/*!
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 */

var Cufon = (function() {
    
    var api = function() {    
        return api.replace.apply(null, arguments);
    };
    
    var DOM = api.DOM = {
            
        ready: (function() {
        
            var complete = false, readyStatus = { loaded: 1, complete: 1 };
        
            var queue = [], perform = function() {
                if (complete) return;
                complete = true;
                for (var fn; fn = queue.shift(); fn());
            };
            
            // Gecko, Opera, WebKit r26101+
            
            if (document.addEventListener) {
                document.addEventListener('DOMContentLoaded', perform, false);
                window.addEventListener('pageshow', perform, false); // For cached Gecko pages
            }
            
            // Old WebKit, Internet Explorer
            
            if (!window.opera && document.readyState) (function() {
                readyStatus[document.readyState] ? perform() : setTimeout(arguments.callee, 10);
            })();
            
            // Internet Explorer
            
            if (document.readyState && document.createStyleSheet) (function() {
                try {
                    document.body.doScroll('left');
                    perform();
                }
                catch (e) {
                    setTimeout(arguments.callee, 1);
                }
            })();
            
            addEvent(window, 'load', perform); // Fallback
            
            return function(listener) {
                if (!arguments.length) perform();
                else complete ? listener() : queue.push(listener);
            };
            
        })()
        
    };

    var CSS = api.CSS = {
    
        Size: function(value, base) {
        
            this.value = parseFloat(value);
            this.unit = String(value).match(/[a-z%]*$/)[0] || 'px';
        
            this.convert = function(value) {
                return value / base * this.value;
            };
            
            this.convertFrom = function(value) {
                return value / this.value * base;
            };
            
            this.toString = function() {
                return this.value + this.unit;
            };

        },
        
        color: cached(function(value) {
            var parsed = {};
            parsed.color = value.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function($0, $1, $2) {
                parsed.opacity = parseFloat($2);
                return 'rgb(' + $1 + ')';
            });
            return parsed;
        }),
        
        // has no direct CSS equivalent.
        // @see http://msdn.microsoft.com/en-us/library/system.windows.fontstretches.aspx
        fontStretch: cached(function(value) {
            if (typeof value == 'number') return value;
            if (/%$/.test(value)) return parseFloat(value) / 100;
            return {
                'ultra-condensed': 0.5,
                'extra-condensed': 0.625,
                condensed: 0.75,
                'semi-condensed': 0.875,
                'semi-expanded': 1.125,
                expanded: 1.25,
                'extra-expanded': 1.5,
                'ultra-expanded': 2
            }[value] || 1;
        }),
    
        getStyle: function(el) {
            var view = document.defaultView;
            if (view && view.getComputedStyle) return new Style(view.getComputedStyle(el, null));
            if (el.currentStyle) return new Style(el.currentStyle);
            return new Style(el.style);
        },
        
        gradient: cached(function(value) {
            var gradient = {
                id: value,
                type: value.match(/^-([a-z]+)-gradient\(/)[1],
                stops: []
            }, colors = value.substr(value.indexOf('(')).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);
            for (var i = 0, l = colors.length, stop; i < l; ++i) {
                stop = colors[i].split('=', 2).reverse();
                gradient.stops.push([ stop[1] || i / (l - 1), stop[0] ]);
            }
            return gradient;
        }),
        
        quotedList: cached(function(value) {
            // doesn't work properly with empty quoted strings (""), but
            // it's not worth the extra code.
            var list = [], re = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g, match;
            while (match = re.exec(value)) list.push(match[3] || match[1]);
            return list;
        }),
        
        recognizesMedia: cached(function(media) {
            var el = document.createElement('style'), sheet, container, supported;
            el.type = 'text/css';
            el.media = media;
            try { // this is cached anyway
                el.appendChild(document.createTextNode('/**/'));
            } catch (e) {}
            container = elementsByTagName('head')[0];
            container.insertBefore(el, container.firstChild);
            sheet = (el.sheet || el.styleSheet);
            supported = sheet && !sheet.disabled;
            container.removeChild(el);
            return supported;
        }),

        supports: function(property, value) {
            var checker = document.createElement('span').style;
            if (checker[property] === undefined) return false;
            checker[property] = value;
            return checker[property] === value;
        },
        
        textAlign: function(word, style, position, wordCount) {
            if (style.get('textAlign') == 'right') {
                if (position > 0) word = ' ' + word;
            }
            else if (position < wordCount - 1) word += ' ';
            return word;
        },
        
        textDecoration: function(el, style) {
            if (!style) style = this.getStyle(el);
            var types = {
                underline: null,
                overline: null,
                'line-through': null
            };
            for (var search = el; search.parentNode && search.parentNode.nodeType == 1; ) {
                var foundAll = true;
                for (var type in types) {
                    if (!hasOwnProperty(types, type) || types[type]) continue;
                    if (style.get('textDecoration').indexOf(type) != -1) types[type] = style.get('color');
                    foundAll = false;
                }
                if (foundAll) break; // this is rather unlikely to happen
                style = this.getStyle(search = search.parentNode);
            }
            return types;
        },
        
        textShadow: cached(function(value) {
            if (value == 'none') return null;
            var shadows = [], currentShadow = {}, result, offCount = 0;
            var re = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
            while (result = re.exec(value)) {
                if (result[0] == ',') {
                    shadows.push(currentShadow);
                    currentShadow = {};
                    offCount = 0;
                }
                else if (result[1]) {
                    currentShadow.color = result[1];
                }
                else {
                    currentShadow[[ 'offX', 'offY', 'blur' ][offCount++]] = result[2];
                }
            }
            shadows.push(currentShadow);
            return shadows;
        }),
        
        textTransform: function(text, style) {
            return text[{
                uppercase: 'toUpperCase',
                lowercase: 'toLowerCase'
            }[style.get('textTransform')] || 'toString']();
        },
        
        whiteSpace: (function() {
            var ignore = {
                inline: 1,
                'inline-block': 1,
                'run-in': 1
            };
            return function(text, style, node) {
                if (ignore[style.get('display')]) return text;
                if (!node.previousSibling) text = text.replace(/^\s+/, '');
                if (!node.nextSibling) text = text.replace(/\s+$/, '');
                return text;
            };
        })()
        
    };
    
    CSS.ready = (function() {
        
        // don't do anything in Safari 2 (it doesn't recognize any media type)
        var complete = !CSS.recognizesMedia('all'), hasLayout = false;
        
        var queue = [], perform = function() {
            complete = true;
            for (var fn; fn = queue.shift(); fn());
        };
        
        var links = elementsByTagName('link'), styles = elementsByTagName('style');
        
        function isContainerReady(el) {
            return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
        }
        
        function isSheetReady(sheet, media) {
            // in Opera sheet.disabled is true when it's still loading,
            // even though link.disabled is false. they stay in sync if
            // set manually.
            if (!CSS.recognizesMedia(media || 'all')) return true;
            if (!sheet || sheet.disabled) return false;
            try {
                var rules = sheet.cssRules, rule;
                if (rules) {
                    // needed for Safari 3 and Chrome 1.0.
                    // in standards-conforming browsers cssRules contains @-rules.
                    // Chrome 1.0 weirdness: rules[<number larger than .length - 1>]
                    // returns the last rule, so a for loop is the only option.
                    search: for (var i = 0, l = rules.length; rule = rules[i], i < l; ++i) {
                        switch (rule.type) {
                            case 2: // @charset
                                break;
                            case 3: // @import
                                if (!isSheetReady(rule.styleSheet, rule.media.mediaText)) return false;
                                break;
                            default:
                                // only @charset can precede @import
                                break search;
                        }
                    }
                }
            }
            catch (e) {} // probably a style sheet from another domain
            return true;
        }
        
        function allStylesLoaded() {
            // Internet Explorer's style sheet model, there's no need to do anything
            if (document.createStyleSheet) return true;
            // standards-compliant browsers
            var el, i;
            for (i = 0; el = links[i]; ++i) {
                if (el.rel.toLowerCase() == 'stylesheet' && !isContainerReady(el)) return false;
            }
            for (i = 0; el = styles[i]; ++i) {
                if (!isContainerReady(el)) return false;
            }
            return true;
        }
        
        DOM.ready(function() {
            // getComputedStyle returns null in Gecko if used in an iframe with display: none
            if (!hasLayout) hasLayout = CSS.getStyle(document.body).isUsable();
            if (complete || (hasLayout && allStylesLoaded())) perform();
            else setTimeout(arguments.callee, 10);
        });
        
        return function(listener) {
            if (complete) listener();
            else queue.push(listener);
        };
        
    })();
    
    function Font(data) {
        
        var face = this.face = data.face;
        this.glyphs = data.glyphs;
        this.w = data.w;
        this.baseSize = parseInt(face['units-per-em'], 10);
        
        this.family = face['font-family'].toLowerCase();
        this.weight = face['font-weight'];
        this.style = face['font-style'] || 'normal';
        
        this.viewBox = (function () {
            var parts = face.bbox.split(/\s+/);
            var box = {
                minX: parseInt(parts[0], 10),
                minY: parseInt(parts[1], 10),
                maxX: parseInt(parts[2], 10),
                maxY: parseInt(parts[3], 10)
            };
            box.width = box.maxX - box.minX;
            box.height = box.maxY - box.minY;
            box.toString = function() {
                return [ this.minX, this.minY, this.width, this.height ].join(' ');
            };
            return box;
        })();
        
        this.ascent = -parseInt(face.ascent, 10);
        this.descent = -parseInt(face.descent, 10);
        
        this.height = -this.ascent + this.descent;
        
    }
    
    function FontFamily() {

        var styles = {}, mapping = {
            oblique: 'italic',
            italic: 'oblique'
        };
        
        this.add = function(font) {
            (styles[font.style] || (styles[font.style] = {}))[font.weight] = font;
        };
        
        this.get = function(style, weight) {
            var weights = styles[style] || styles[mapping[style]]
                || styles.normal || styles.italic || styles.oblique;
            if (!weights) return null;
            // we don't have to worry about "bolder" and "lighter"
            // because IE's currentStyle returns a numeric value for it,
            // and other browsers use the computed value anyway
            weight = {
                normal: 400,
                bold: 700
            }[weight] || parseInt(weight, 10);
            if (weights[weight]) return weights[weight];
            // http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight
            // Gecko uses x99/x01 for lighter/bolder
            var up = {
                1: 1,
                99: 0
            }[weight % 100], alts = [], min, max;
            if (up === undefined) up = weight > 400;
            if (weight == 500) weight = 400;
            for (var alt in weights) {
                if (!hasOwnProperty(weights, alt)) continue;
                alt = parseInt(alt, 10);
                if (!min || alt < min) min = alt;
                if (!max || alt > max) max = alt;
                alts.push(alt);
            }
            if (weight < min) weight = min;
            if (weight > max) weight = max;
            alts.sort(function(a, b) {
                return (up
                    ? (a > weight && b > weight) ? a < b : a > b
                    : (a < weight && b < weight) ? a > b : a < b) ? -1 : 1;
            });
            return weights[alts[0]];
        };
    
    }
    
    function HoverHandler() {
        
        function contains(node, anotherNode) {
            if (node.contains) return node.contains(anotherNode);
            return node.compareDocumentPosition(anotherNode) & 16;
        }
        
        function onOverOut(e) {
            var related = e.relatedTarget;
            if (!related || contains(this, related)) return;
            trigger(this);
        }
        
        function onEnterLeave(e) {
            trigger(this);
        }

        function trigger(el) {
            // A timeout is needed so that the event can actually "happen"
            // before replace is triggered. This ensures that styles are up
            // to date.
            setTimeout(function() {
                api.replace(el, sharedStorage.get(el).options, true);
            }, 10);
        }
        
        this.attach = function(el) {
            if (el.onmouseenter === undefined) {
                addEvent(el, 'mouseover', onOverOut);
                addEvent(el, 'mouseout', onOverOut);
            }
            else {
                addEvent(el, 'mouseenter', onEnterLeave);
                addEvent(el, 'mouseleave', onEnterLeave);
            }
        };
        
    }
    
    function ReplaceHistory() {
        
        var list = [], map = {};
        
        function filter(keys) {
            var values = [], key;
            for (var i = 0; key = keys[i]; ++i) values[i] = list[map[key]];
            return values;
        }
        
        this.add = function(key, args) {
            map[key] = list.push(args) - 1;
        };
        
        this.repeat = function() {
            var snapshot = arguments.length ? filter(arguments) : list, args;
            for (var i = 0; args = snapshot[i++];) api.replace(args[0], args[1], true);
        };
        
    }
    
    function Storage() {
        
        var map = {}, at = 0;
        
        function identify(el) {
            return el.cufid || (el.cufid = ++at);
        }
        
        this.get = function(el) {
            var id = identify(el);
            return map[id] || (map[id] = {});
        };
        
    }
    
    function Style(style) {
        
        var custom = {}, sizes = {};
        
        this.extend = function(styles) {
            for (var property in styles) {
                if (hasOwnProperty(styles, property)) custom[property] = styles[property];
            }
            return this;
        };
        
        this.get = function(property) {
            return custom[property] != undefined ? custom[property] : style[property];
        };
        
        this.getSize = function(property, base) {
            return sizes[property] || (sizes[property] = new CSS.Size(this.get(property), base));
        };
        
        this.isUsable = function() {
            return !!style;
        };
        
    }
    
    function addEvent(el, type, listener) {
        if (el.addEventListener) {
            el.addEventListener(type, listener, false);
        }
        else if (el.attachEvent) {
            el.attachEvent('on' + type, function() {
                return listener.call(el, window.event);
            });
        }
    }
    
    function attach(el, options) {
        var storage = sharedStorage.get(el);
        if (storage.options) return el;
        if (options.hover && options.hoverables[el.nodeName.toLowerCase()]) {
            hoverHandler.attach(el);
        }
        storage.options = options;
        return el;
    }
    
    function cached(fun) {
        var cache = {};
        return function(key) {
            if (!hasOwnProperty(cache, key)) cache[key] = fun.apply(null, arguments);
            return cache[key];
        };    
    }
    
    function getFont(el, style) {
        if (!style) style = CSS.getStyle(el);
        var families = CSS.quotedList(style.get('fontFamily').toLowerCase()), family;
        for (var i = 0, l = families.length; i < l; ++i) {
            family = families[i];
            if (fonts[family]) return fonts[family].get(style.get('fontStyle'), style.get('fontWeight'));
        }
        return null;
    }
    
    function elementsByTagName(query) {
        return document.getElementsByTagName(query);
    }
    
    function hasOwnProperty(obj, property) {
        return obj.hasOwnProperty(property);
    }
    
    function merge() {
        var merged = {}, args, key;
        for (var i = 0, l = arguments.length; args = arguments[i], i < l; ++i) {
            for (key in args) {
                if (hasOwnProperty(args, key)) merged[key] = args[key];
            }
        }
        return merged;
    }
    
    function process(font, text, style, options, node, el) {
        var separate = options.separate;
        if (separate == 'none') return engines[options.engine].apply(null, arguments);
        var fragment = document.createDocumentFragment(), processed;
        var parts = text.split(separators[separate]), needsAligning = (separate == 'words');
        if (needsAligning && HAS_BROKEN_REGEXP) {
            // @todo figure out a better way to do this
            if (/^\s/.test(text)) parts.unshift('');
            if (/\s$/.test(text)) parts.push('');
        }
        for (var i = 0, l = parts.length; i < l; ++i) {
            processed = engines[options.engine](font,
                needsAligning ? CSS.textAlign(parts[i], style, i, l) : parts[i],
                style, options, node, el, i < l - 1);
            if (processed) fragment.appendChild(processed);
        }
        return fragment;
    }
    
    function replaceElement(el, options) {
        var font, style, node, nodeType, nextNode, redraw;
        for (node = attach(el, options).firstChild; node; node = nextNode) {
            nodeType = node.nodeType;
            nextNode = node.nextSibling;
            redraw = false;
            if (nodeType == 1) {
                if (!node.firstChild) continue;
                if (!/cufon/.test(node.className)) {
                    arguments.callee(node, options);
                    continue;
                }
                else redraw = true;
            }
            else if (nodeType != 3) continue;
            if (!style) style = CSS.getStyle(el).extend(options);
            if (!font) font = getFont(el, style);
            if (!font) continue;
            if (redraw) {
                engines[options.engine](font, null, style, options, node, el);
                continue;
            }
            var text = CSS.whiteSpace(node.data, style, node);
            if (text === '') continue;
            var processed = process(font, text, style, options, node, el);
            if (processed) node.parentNode.replaceChild(processed, node);
            else node.parentNode.removeChild(node);
        }
    }
    
    var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;
    
    var sharedStorage = new Storage();
    var hoverHandler = new HoverHandler();
    var replaceHistory = new ReplaceHistory();
    
    var engines = {}, fonts = {}, defaultOptions = {
        enableTextDecoration: false,
        engine: null,
        //fontScale: 1,
        //fontScaling: false,
        forceHitArea: false,
        hover: false,
        hoverables: {
            a: true
        },
        printable: true,
        //rotation: 0,
        //selectable: false,
        selector: (
                window.Sizzle
            ||    (window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
            ||    (window.dojo && dojo.query)
            ||    (window.$$ && function(query) { return $$(query); })
            ||    (window.$ && function(query) { return $(query); })
            ||    (document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
            ||    elementsByTagName
        ),
        separate: 'words', // 'none' and 'characters' are also accepted
        textShadow: 'none'
    };
    
    var separators = {
        words: /[^\S\u00a0]+/,
        characters: ''
    };
    
    api.now = function() {
        DOM.ready();
        return api;
    };
    
    api.refresh = function() {
        replaceHistory.repeat.apply(replaceHistory, arguments);
        return api;
    };
    
    api.registerEngine = function(id, engine) {
        if (!engine) return api;
        engines[id] = engine;
        return api.set('engine', id);
    };
    
    api.registerFont = function(data) {
        var font = new Font(data), family = font.family;
        if (!fonts[family]) fonts[family] = new FontFamily();
        fonts[family].add(font);
        return api.set('fontFamily', '"' + family + '"');
    };
    
    api.replace = function(elements, options, ignoreHistory) {
        options = merge(defaultOptions, options);
        if (!options.engine) return api; // there's no browser support so we'll just stop here
        if (options.hover) options.forceHitArea = true;
        if (typeof options.textShadow == 'string')
            options.textShadow = CSS.textShadow(options.textShadow);
        if (typeof options.color == 'string' && /^-/.test(options.color))
            options.textGradient = CSS.gradient(options.color);
        if (!ignoreHistory) replaceHistory.add(elements, arguments);
        if (elements.nodeType || typeof elements == 'string') elements = [ elements ];
        CSS.ready(function() {
            for (var i = 0, l = elements.length; i < l; ++i) {
                var el = elements[i];
                if (typeof el == 'string') api.replace(options.selector(el), options, true);
                else replaceElement(el, options);
            }
        });
        return api;
    };
    
    api.set = function(option, value) {
        defaultOptions[option] = value;
        return api;
    };
    
    return api;
    
})();

Cufon.registerEngine('canvas', (function() {

    // Safari 2 doesn't support .apply() on native methods
    
    var check = document.createElement('canvas');
    if (!check || !check.getContext || !check.getContext.apply) return;
    check = null;
    
    var HAS_INLINE_BLOCK = Cufon.CSS.supports('display', 'inline-block');
    
    // Firefox 2 w/ non-strict doctype (almost standards mode)
    var HAS_BROKEN_LINEHEIGHT = !HAS_INLINE_BLOCK && (document.compatMode == 'BackCompat' || /frameset|transitional/i.test(document.doctype.publicId));
    
    var styleSheet = document.createElement('style');
    styleSheet.type = 'text/css';
    styleSheet.appendChild(document.createTextNode((
        '.cufon-canvas{text-indent:0;}' +
        '@media screen,projection{' +
            '.cufon-canvas{display:inline;display:inline-block;position:relative;vertical-align:middle;' + 
            (HAS_BROKEN_LINEHEIGHT
                ? ''
                : 'font-size:1px;line-height:1px;') +
            '}.cufon-canvas .cufon-alt{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}' +
            (HAS_INLINE_BLOCK
                ? '.cufon-canvas canvas{position:relative;}'
                : '.cufon-canvas canvas{position:absolute;}') +
        '}' +
        '@media print{' +
            '.cufon-canvas{padding:0;}' +
            '.cufon-canvas canvas{display:none;}' +
            '.cufon-canvas .cufon-alt{display:inline;}' +
        '}'
    ).replace(/;/g, '!important;')));
    document.getElementsByTagName('head')[0].appendChild(styleSheet);

    function generateFromVML(path, context) {
        var atX = 0, atY = 0;
        var code = [], re = /([mrvxe])([^a-z]*)/g, match;
        generate: for (var i = 0; match = re.exec(path); ++i) {
            var c = match[2].split(',');
            switch (match[1]) {
                case 'v':
                    code[i] = { m: 'bezierCurveTo', a: [ atX + ~~c[0], atY + ~~c[1], atX + ~~c[2], atY + ~~c[3], atX += ~~c[4], atY += ~~c[5] ] };
                    break;
                case 'r':
                    code[i] = { m: 'lineTo', a: [ atX += ~~c[0], atY += ~~c[1] ] };
                    break;
                case 'm':
                    code[i] = { m: 'moveTo', a: [ atX = ~~c[0], atY = ~~c[1] ] };
                    break;
                case 'x':
                    code[i] = { m: 'closePath' };
                    break;
                case 'e':
                    break generate;
            }
            context[code[i].m].apply(context, code[i].a);
        }
        return code;
    }
    
    function interpret(code, context) {
        for (var i = 0, l = code.length; i < l; ++i) {
            var line = code[i];
            context[line.m].apply(context, line.a);
        }
    }
    
    return function(font, text, style, options, node, el) {
        
        var redraw = (text === null);
        
        if (redraw) text = node.alt;
        
        var viewBox = font.viewBox;
        
        var size = style.getSize('fontSize', font.baseSize);
        
        var letterSpacing = style.get('letterSpacing');
        letterSpacing = (letterSpacing == 'normal') ? 0 : size.convertFrom(parseInt(letterSpacing, 10));
        
        var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
        var shadows = options.textShadow, shadowOffsets = [];
        if (shadows) {
            for (var i = shadows.length; i--;) {
                var shadow = shadows[i];
                var x = size.convertFrom(parseFloat(shadow.offX));
                var y = size.convertFrom(parseFloat(shadow.offY));
                shadowOffsets[i] = [ x, y ];
                if (y < expandTop) expandTop = y;
                if (x > expandRight) expandRight = x;
                if (y > expandBottom) expandBottom = y;
                if (x < expandLeft) expandLeft = x;
            }
        }
        
        var chars = Cufon.CSS.textTransform(text, style).split(''), chr;
        
        var glyphs = font.glyphs, glyph, kerning, k;
        var width = 0, advance, jumps = [];
        
        for (var i = 0, j = 0, l = chars.length; i < l; ++i) {
            glyph = glyphs[chr = chars[i]] || font.missingGlyph;
            if (!glyph) continue;
            if (kerning) {
                width -= k = kerning[chr] || 0;
                jumps[j - 1] -= k;
            }
            width += advance = jumps[j++] = ~~(glyph.w || font.w) + letterSpacing;
            kerning = glyph.k;
        }
        
        if (advance === undefined) return null; // there's nothing to render
        
        expandRight += viewBox.width - advance;
        expandLeft += viewBox.minX;
        
        var wrapper, canvas;
        
        if (redraw) {
            wrapper = node;
            canvas = node.firstChild;
        }
        else {
            wrapper = document.createElement('span');
            wrapper.className = 'cufon cufon-canvas';
            wrapper.alt = text;
            
            canvas = document.createElement('canvas');
            wrapper.appendChild(canvas);
            
            if (options.printable) {
                var print = document.createElement('span');
                print.className = 'cufon-alt';
                print.appendChild(document.createTextNode(text));
                wrapper.appendChild(print);
            }
        }
        
        var wStyle = wrapper.style;
        var cStyle = canvas.style;
        
        var height = size.convert(viewBox.height);
        var roundedHeight = Math.ceil(height);
        var roundingFactor = roundedHeight / height;
        var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
        var stretchedWidth = width * stretchFactor;
        
        canvas.width = Math.ceil(size.convert(stretchedWidth + expandRight - expandLeft));
        canvas.height = Math.ceil(size.convert(viewBox.height - expandTop + expandBottom));
        
        // minY has no part in canvas.height
        expandTop += viewBox.minY;
        
        cStyle.top = Math.round(size.convert(expandTop - font.ascent)) + 'px';
        cStyle.left = Math.round(size.convert(expandLeft)) + 'px';
        
        var wrapperWidth = Math.ceil(size.convert(stretchedWidth)) + 'px';
        
        if (HAS_INLINE_BLOCK) {
            wStyle.width = wrapperWidth;
            wStyle.height = size.convert(font.height) + 'px';
        }
        else {
            wStyle.paddingLeft = wrapperWidth;
            wStyle.paddingBottom = (size.convert(font.height) - 1) + 'px';
        }
        
        var g = canvas.getContext('2d'), scale = height / viewBox.height;
        
        // proper horizontal scaling is performed later
        g.scale(scale, scale * roundingFactor);
        g.translate(-expandLeft, -expandTop);
        
        g.lineWidth = font.face['underline-thickness'];
        
        g.save();
        
        function line(y, color) {
            g.strokeStyle = color;
            
            g.beginPath();
            
            g.moveTo(0, y);
            g.lineTo(width, y);
            
            g.stroke();
        }
        
        var textDecoration = options.enableTextDecoration ? Cufon.CSS.textDecoration(el, style) : {};
        
        if (textDecoration.underline) line(-font.face['underline-position'], textDecoration.underline);
        if (textDecoration.overline) line(font.ascent, textDecoration.overline);
        
        function renderText() {
            g.scale(stretchFactor, 1);
            for (var i = 0, j = 0, l = chars.length; i < l; ++i) {
                var glyph = glyphs[chars[i]] || font.missingGlyph;
                if (!glyph) continue;
                if (glyph.d) {
                    g.beginPath();
                    if (glyph.code) interpret(glyph.code, g);
                    else glyph.code = generateFromVML('m' + glyph.d, g);
                    g.fill();
                }
                g.translate(jumps[j++], 0);
            }
            g.restore();
        }
        
        if (shadows) {
            for (var i = shadows.length; i--;) {
                var shadow = shadows[i];
                g.save();
                g.fillStyle = shadow.color;
                g.translate.apply(g, shadowOffsets[i]);
                renderText();
            }
        }
        
        var gradient = options.textGradient;
        if (gradient) {
            var stops = gradient.stops, fill = g.createLinearGradient(0, viewBox.minY, 0, viewBox.maxY);
            for (var i = 0, l = stops.length; i < l; ++i) {
                fill.addColorStop.apply(fill, stops[i]);
            }
            g.fillStyle = fill;
        }
        else g.fillStyle = style.get('color');
        
        renderText();
        
        if (textDecoration['line-through']) line(-font.descent, textDecoration['line-through']);
        
        return wrapper;
            
    };
    
})());

Cufon.registerEngine('vml', (function() {

    if (!document.namespaces) return;
    
    if (document.namespaces.cvml == null) {
        document.namespaces.add('cvml', 'urn:schemas-microsoft-com:vml');
    }
    
    var check = document.createElement('cvml:shape');
    check.style.behavior = 'url(#default#VML)';
    if (!check.coordsize) return; // VML isn't supported
    check = null;
    
    var HAS_BROKEN_LINEHEIGHT = (document.documentMode || 0) < 8;
    
    document.write(('<style type="text/css">' +
        '.cufon-vml-canvas{text-indent:0;}' +
        '@media screen{' + 
            'cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}' +
            '.cufon-vml-canvas{position:absolute;text-align:left;}' +
            '.cufon-vml{display:inline-block;position:relative;vertical-align:' +
            (HAS_BROKEN_LINEHEIGHT
                ? 'middle'
                : 'text-bottom') +
            ';}' +
            '.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px;}' +
            'a .cufon-vml{cursor:pointer}' + // ignore !important here
        '}' +
        '@media print{' + 
            '.cufon-vml *{display:none;}' +
            '.cufon-vml .cufon-alt{display:inline;}' +
        '}' +
    '</style>').replace(/;/g, '!important;'));

    function getFontSizeInPixels(el, value) {
        return getSizeInPixels(el, /(?:em|ex|%)$/i.test(value) ? '1em' : value);
    }
    
    // Original by Dead Edwards.
    // Combined with getFontSizeInPixels it also works with relative units.
    function getSizeInPixels(el, value) {
        if (/px$/i.test(value)) return parseFloat(value);
        var style = el.style.left, runtimeStyle = el.runtimeStyle.left;
        el.runtimeStyle.left = el.currentStyle.left;
        el.style.left = value.replace('%', 'em');
        var result = el.style.pixelLeft;
        el.style.left = style;
        el.runtimeStyle.left = runtimeStyle;
        return result;
    }
    
    var fills = {};
    
    function gradientFill(gradient) {
        var id = gradient.id;
        if (!fills[id]) {
            var stops = gradient.stops, fill = document.createElement('cvml:fill'), colors = [];
            fill.type = 'gradient';
            fill.angle = 180;
            fill.focus = '0';
            fill.method = 'sigma';
            fill.color = stops[0][1];
            for (var j = 1, k = stops.length - 1; j < k; ++j) {
                colors.push(stops[j][0] * 100 + '% ' + stops[j][1]);
            }
            fill.colors = colors.join(',');
            fill.color2 = stops[k][1];
            fills[id] = fill;
        }
        return fills[id];
    }
    
    return function(font, text, style, options, node, el, hasNext) {
        
        var redraw = (text === null);
        
        if (redraw) text = node.alt;
        
        // @todo word-spacing, text-decoration
    
        var viewBox = font.viewBox;
        
        var size = style.computedFontSize || (style.computedFontSize = new Cufon.CSS.Size(getFontSizeInPixels(el, style.get('fontSize')) + 'px', font.baseSize));
        
        var letterSpacing = style.computedLSpacing;
        
        if (letterSpacing == undefined) {
            letterSpacing = style.get('letterSpacing');
            style.computedLSpacing = letterSpacing = (letterSpacing == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, letterSpacing));
        }
        
        var wrapper, canvas;
        
        if (redraw) {
            wrapper = node;
            canvas = node.firstChild;
        }
        else {
            wrapper = document.createElement('span');
            wrapper.className = 'cufon cufon-vml';
            wrapper.alt = text;
            
            canvas = document.createElement('span');
            canvas.className = 'cufon-vml-canvas';
            wrapper.appendChild(canvas);
            
            if (options.printable) {
                var print = document.createElement('span');
                print.className = 'cufon-alt';
                print.appendChild(document.createTextNode(text));
                wrapper.appendChild(print);
            }
            
            // ie6, for some reason, has trouble rendering the last VML element in the document.
            // we can work around this by injecting a dummy element where needed.
            // @todo find a better solution
            if (!hasNext) wrapper.appendChild(document.createElement('cvml:shape'));
        }
        
        var wStyle = wrapper.style;
        var cStyle = canvas.style;
        
        var height = size.convert(viewBox.height), roundedHeight = Math.ceil(height);
        var roundingFactor = roundedHeight / height;
        var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
        var minX = viewBox.minX, minY = viewBox.minY;
        
        cStyle.height = roundedHeight;
        cStyle.top = Math.round(size.convert(minY - font.ascent));
        cStyle.left = Math.round(size.convert(minX));
        
        wStyle.height = size.convert(font.height) + 'px';
        
        var textDecoration = options.enableTextDecoration ? Cufon.CSS.textDecoration(el, style) : {};
        
        var color = style.get('color');
        var chars = Cufon.CSS.textTransform(text, style).split(''), chr;
        
        var glyphs = font.glyphs, glyph, kerning, k;
        var width = 0, jumps = [], offsetX = 0, advance;
        
        var shape, shadows = options.textShadow;
        
        // pre-calculate width
        for (var i = 0, j = 0, l = chars.length; i < l; ++i) {
            glyph = glyphs[chr = chars[i]] || font.missingGlyph;
            if (!glyph) continue;
            if (kerning) {
                width -= k = kerning[chr] || 0;
                jumps[j - 1] -= k;
            }
            width += advance = jumps[j++] = ~~(glyph.w || font.w) + letterSpacing;
            kerning = glyph.k;
        }
        
        if (advance === undefined) return null;
        
        var fullWidth = -minX + width + (viewBox.width - advance);
    
        var shapeWidth = size.convert(fullWidth * stretchFactor), roundedShapeWidth = Math.round(shapeWidth);
        
        var coordSize = fullWidth + ',' + viewBox.height, coordOrigin;
        var stretch = 'r' + coordSize + 'ns';
        
        var fill = options.textGradient && gradientFill(options.textGradient);
        
        for (i = 0, j = 0; i < l; ++i) {
            
            glyph = glyphs[chars[i]] || font.missingGlyph;
            if (!glyph) continue;
            
            if (redraw) {
                // some glyphs may be missing so we can't use i
                shape = canvas.childNodes[j];
                while (shape.firstChild) shape.removeChild(shape.firstChild); // shadow, fill
            }
            else { 
                shape = document.createElement('cvml:shape');
                canvas.appendChild(shape);
            }
            
            shape.stroked = 'f';
            shape.coordsize = coordSize;
            shape.coordorigin = coordOrigin = (minX - offsetX) + ',' + minY;
            shape.path = (glyph.d ? 'm' + glyph.d + 'xe' : '') + 'm' + coordOrigin + stretch;
            shape.fillcolor = color;
            
            if (fill) shape.appendChild(fill.cloneNode(false));
            
            // it's important to not set top/left or IE8 will grind to a halt
            var sStyle = shape.style;
            sStyle.width = roundedShapeWidth;
            sStyle.height = roundedHeight;
            
            if (shadows) {
                // due to the limitations of the VML shadow element there
                // can only be two visible shadows. opacity is shared
                // for all shadows.
                var shadow1 = shadows[0], shadow2 = shadows[1];
                var color1 = Cufon.CSS.color(shadow1.color), color2;
                var shadow = document.createElement('cvml:shadow');
                shadow.on = 't';
                shadow.color = color1.color;
                shadow.offset = shadow1.offX + ',' + shadow1.offY;
                if (shadow2) {
                    color2 = Cufon.CSS.color(shadow2.color);
                    shadow.type = 'double';
                    shadow.color2 = color2.color;
                    shadow.offset2 = shadow2.offX + ',' + shadow2.offY;
                }
                shadow.opacity = color1.opacity || (color2 && color2.opacity) || 1;
                shape.appendChild(shadow);
            }
            
            offsetX += jumps[j++];
        }
        
        // addresses flickering issues on :hover
        
        var cover = shape.nextSibling, coverFill, vStyle;
        
        if (options.forceHitArea) {
            
            if (!cover) {
                cover = document.createElement('cvml:rect');
                cover.stroked = 'f';
                cover.className = 'cufon-vml-cover';
                coverFill = document.createElement('cvml:fill');
                coverFill.opacity = 0;
                cover.appendChild(coverFill);
                canvas.appendChild(cover);
            }
            
            vStyle = cover.style;
            
            vStyle.width = roundedShapeWidth;
            vStyle.height = roundedHeight;
            
        }
        else if (cover) canvas.removeChild(cover);
        
        wStyle.width = Math.max(Math.ceil(size.convert(width * stretchFactor)), 0);
        
        if (HAS_BROKEN_LINEHEIGHT) {
            
            var yAdjust = style.computedYAdjust;
            
            if (yAdjust === undefined) {
                var lineHeight = style.get('lineHeight');
                if (lineHeight == 'normal') lineHeight = '1em';
                else if (!isNaN(lineHeight)) lineHeight += 'em'; // no unit
                style.computedYAdjust = yAdjust = 0.5 * (getSizeInPixels(el, lineHeight) - parseFloat(wStyle.height));
            }
            
            if (yAdjust) {
                wStyle.marginTop = Math.ceil(yAdjust) + 'px';
                wStyle.marginBottom = yAdjust + 'px';
            }
            
        }
        
        return wrapper;
        
    };
    
})());
if (!{"dev.appelpop.local":1,"www.dev.appelpop.local":1,"www.joostvaningen.com":1,"appelpop.nl":1,"www.appelpop.nl":1}[location.host]) throw Error("This font cannot be used with this domain");Cufon.registerFont({"w":196,"face":{"font-family":"geosanslight","font-weight":500,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 6 3 2 0 0 2 0 3","ascent":"288","descent":"-72","x-height":"3","bbox":"0 -277 317 76","underline-thickness":"6.84","underline-position":"-44.64","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":91},"!":{"d":"44,-53r0,-204r-14,0r0,204r14,0xm50,-12v-1,-8,-6,-12,-13,-12v-9,1,-13,5,-13,12v0,9,4,13,13,13v9,0,13,-5,13,-13","w":73},"\"":{"d":"77,-262r-15,0r4,58r7,0xm37,-262r-15,0r4,58r7,0","w":97},"#":{"d":"188,-186r-47,0r11,-45r-9,0r-11,45r-50,0r11,-45r-9,0r-11,45r-50,0r-3,9r51,0r-11,41r-46,0r-2,9r46,0r-10,46r8,0r11,-46r51,0r-12,47r9,0r11,-47r49,0r2,-9r-48,0r10,-41r46,0xm130,-177r-10,41r-51,0r10,-41r51,0","w":194},"$":{"d":"98,3v41,0,63,-31,63,-73v0,-34,-21,-58,-63,-75r0,-99v18,3,31,11,38,25r14,-6v-11,-22,-28,-33,-52,-33r0,-19r-14,0r0,19v-33,0,-58,26,-57,59v1,40,22,52,57,64r0,123v-29,0,-48,-15,-56,-46r-15,5v7,33,33,56,71,56r0,19r14,0r0,-19xm84,-150v-51,-8,-57,-88,0,-94r0,94xm98,-129v47,16,60,60,37,99v-7,12,-20,18,-37,18r0,-117","w":170},"%":{"d":"60,-162v23,0,45,-19,45,-44v0,-24,-21,-45,-45,-45v-24,0,-46,22,-45,45v0,23,22,44,45,44xm176,-257r-14,0r-140,257r15,0xm132,3v23,0,45,-20,45,-44v0,-25,-21,-45,-45,-45v-24,0,-46,21,-45,45v0,21,22,44,45,44xm60,-236v15,0,30,15,30,30v0,16,-16,30,-30,30v-15,0,-30,-15,-30,-30v0,-15,15,-30,30,-30xm132,-72v16,0,31,14,30,31v0,14,-15,29,-30,29v-15,0,-30,-14,-30,-29v-1,-17,14,-31,30,-31","w":191},"&":{"d":"42,-112v-47,35,-34,114,30,113v25,0,52,-11,81,-35r23,34r17,0r-28,-43r38,-31r-8,-10r-38,30r-56,-85v21,-15,58,-38,58,-65v0,-33,-22,-50,-55,-50v-47,0,-68,59,-36,91r14,22xm104,-241v47,0,53,58,17,73r-27,19v-9,-19,-26,-29,-28,-55v-1,-20,19,-37,38,-37xm146,-45v-27,33,-118,54,-118,-10v0,-34,34,-58,61,-76","w":216},"'":{"d":"37,-257r-15,0r4,57r7,0","w":59},"(":{"d":"41,-271v-37,91,-33,211,0,293r12,0v-37,-89,-32,-208,0,-293r-12,0","w":66},")":{"d":"32,22v37,-88,34,-210,0,-293r-13,0v37,92,33,209,0,293r13,0","w":69},"*":{"d":"98,-201v0,-13,-25,-20,-43,-22v16,-3,60,-19,35,-31v-12,2,-24,12,-37,27v5,-11,16,-46,-2,-49v-17,5,-5,36,-2,49v-10,-8,-21,-27,-36,-27v-15,7,-9,19,9,24v8,3,17,5,26,7v-29,7,-43,14,-43,22v11,24,34,-11,44,-18v-3,13,-7,18,-8,35v0,9,4,14,10,13v17,-4,5,-36,2,-48v10,8,22,25,37,26v6,0,8,-2,8,-8","w":104},"+":{"d":"114,-88r0,-15r-37,0r0,-36r-17,0r0,36r-36,0r0,15r36,0r0,37r17,0r0,-37r37,0","w":136},",":{"d":"56,-19r-13,-6r-26,59r4,3","w":64},"-":{"d":"82,-88r0,-15r-76,0r0,15r76,0","w":97},".":{"d":"18,-22v-17,2,-13,24,0,24v8,0,12,-4,12,-12v-2,-8,-6,-12,-12,-12","w":40},"\/":{"d":"98,-262r-14,0r-76,262r15,0","w":103},"0":{"d":"101,4v61,0,94,-66,94,-135v0,-66,-33,-134,-94,-134v-62,0,-95,68,-95,134v0,67,33,136,95,135xm101,-251v106,0,106,238,0,239v-52,1,-79,-60,-79,-119v0,-59,28,-119,79,-120","w":200},"1":{"d":"121,0r0,-257r-49,0r-9,15r43,0r0,242r15,0"},"2":{"d":"44,-198v7,-65,120,-59,119,7v0,16,-4,32,-15,45r-126,146r155,0r0,-15r-123,0r100,-114v48,-50,19,-130,-51,-130v-38,0,-71,29,-76,61r17,0"},"3":{"d":"97,2v41,0,75,-29,74,-71v0,-36,-17,-60,-51,-70v81,-14,51,-124,-21,-124v-38,0,-65,25,-69,60r17,0v6,-30,24,-45,52,-45v30,0,52,22,52,51v0,36,-26,51,-65,48r0,21v41,-4,67,22,68,59v1,30,-26,56,-57,56v-26,0,-49,-21,-55,-41r-15,0v7,32,32,56,70,56"},"4":{"d":"194,-49r0,-14r-30,0r0,-198r-147,212r132,0r0,49r15,0r0,-49r30,0xm149,-63r-106,0r106,-152r0,152"},"5":{"d":"94,4v54,1,91,-42,91,-96v0,-60,-56,-100,-121,-84r16,-66r87,0r0,-15r-99,0r-26,100v60,-22,128,4,128,65v0,45,-33,82,-76,81v-39,0,-57,-17,-71,-45r-13,6v15,36,43,54,84,54"},"6":{"d":"99,6v77,0,116,-97,63,-151v-27,-27,-78,-34,-110,-12r55,-100r-17,0v-25,60,-80,97,-80,175v0,50,36,88,89,88xm99,-156v39,0,74,36,74,74v0,41,-34,74,-74,74v-41,0,-74,-32,-74,-74v0,-41,33,-74,74,-74"},"7":{"d":"192,-257r-181,0r0,15r154,0r-156,236r12,10"},"8":{"d":"99,5v42,0,76,-31,75,-73v0,-35,-21,-58,-50,-68v24,-7,40,-31,41,-59v0,-39,-27,-66,-67,-66v-73,0,-87,108,-26,125v-27,10,-48,32,-48,68v-1,42,32,73,75,73xm98,-247v30,0,52,23,52,52v-1,30,-21,53,-52,53v-65,0,-66,-105,0,-105xm98,-130v34,0,60,28,61,62v0,33,-26,58,-61,58v-32,0,-61,-26,-60,-58v0,-33,27,-62,60,-62"},"9":{"d":"99,-259v-77,0,-116,98,-63,152v27,27,77,31,110,12r-51,92r14,7r70,-128v27,-63,-11,-135,-80,-135xm99,-244v41,0,74,32,74,74v0,41,-33,74,-74,74v-41,0,-74,-34,-74,-74v0,-41,33,-74,74,-74"},":":{"d":"30,-128v-17,2,-13,24,0,24v8,0,12,-4,12,-12v-2,-8,-6,-12,-12,-12xm30,-22v-17,2,-13,24,0,24v8,0,12,-4,12,-12v-2,-8,-6,-12,-12,-12","w":58},";":{"d":"37,-128v-17,2,-14,24,0,24v8,0,12,-4,12,-12v-2,-8,-6,-12,-12,-12xm54,-19r-13,-6r-26,59r4,3","w":73},"<":{"d":"102,-40r0,-16r-64,-39r64,-39r0,-16r-90,55","w":113},"=":{"d":"95,-110r0,-15r-82,0r0,15r82,0xm95,-66r0,-14r-82,0r0,14r82,0","w":106},">":{"d":"107,-95r-90,-55r0,16r63,39r-63,39r0,16","w":113},"?":{"d":"105,-77v-13,11,-47,10,-44,-12v8,-54,95,-55,95,-117v1,-35,-30,-55,-67,-55v-35,0,-59,16,-72,48r13,6v13,-24,28,-37,59,-39v50,-3,70,55,29,79v-20,21,-71,42,-73,78v-2,34,48,44,69,23xm93,-12v0,-8,-5,-12,-12,-12v-19,0,-14,26,0,25v8,0,12,-4,12,-13","w":168},"@":{"d":"163,-19v27,0,40,-27,40,-56v1,-50,-44,-88,-95,-88v-53,0,-96,41,-96,92v0,82,101,121,161,71r-7,-7v-47,44,-144,12,-144,-64v0,-46,38,-83,86,-83v45,0,87,34,86,79v0,22,-12,46,-30,46v-30,-7,-9,-56,-11,-83r-9,0r-1,19v-19,-40,-93,-18,-87,28v-7,49,65,61,83,25v2,11,10,21,24,21xm105,-105v20,0,33,14,33,34v0,25,-14,42,-40,42v-22,0,-32,-12,-32,-36v0,-22,18,-40,39,-40","w":214},"A":{"d":"217,0r-103,-265r-103,265r15,0r29,-77r117,0r30,77r15,0xm166,-92r-105,0r53,-136","w":227},"B":{"d":"108,0v43,0,80,-30,80,-75v0,-39,-26,-64,-59,-71v50,-28,26,-121,-39,-111r-63,0r0,257r81,0xm42,-242v50,-2,99,-2,99,47v0,47,-49,49,-99,46r0,-93xm42,-134v65,-4,132,-1,132,59v0,60,-66,64,-132,60r0,-119","w":201},"C":{"d":"18,-129v0,114,142,174,222,101r0,-17v-27,21,-48,33,-90,34v-67,1,-117,-50,-117,-118v0,-67,50,-117,117,-117v36,0,69,13,90,31r0,-18v-22,-19,-52,-27,-90,-28v-77,-1,-132,57,-132,132","w":252},"D":{"d":"113,0v68,1,115,-58,115,-129v0,-69,-47,-128,-115,-128r-86,0r0,257r86,0xm113,-243v60,-1,100,52,100,114v0,63,-42,114,-100,114r-71,0r0,-228r71,0","w":247},"E":{"d":"149,0r0,-15r-109,0r0,-118r109,0r0,-16r-109,0r0,-93r109,0r0,-15r-123,0r0,257r123,0","w":170},"F":{"d":"139,-134r0,-15r-97,0r0,-93r97,0r0,-15r-112,0r0,257r15,0r0,-134r97,0","w":155},"G":{"d":"18,-129v0,77,56,133,132,133v76,0,133,-55,133,-128r-102,0r0,15r85,0v-6,55,-56,98,-116,98v-67,0,-118,-50,-118,-118v0,-64,51,-117,118,-117v42,0,74,16,97,47r12,-9v-27,-35,-63,-53,-109,-53v-74,-1,-132,57,-132,132","w":295},"H":{"d":"198,0r0,-257r-15,0r0,108r-141,0r0,-108r-15,0r0,257r15,0r0,-134r141,0r0,134r15,0","w":221},"I":{"d":"42,0r0,-257r-14,0r0,257r14,0","w":69},"J":{"d":"92,-51r0,-206r-15,0r0,205v4,44,-38,51,-54,24r-12,7v20,40,81,30,81,-30","w":113},"K":{"d":"185,0r-134,-134r123,-123r-21,0r-114,114r0,-114r-15,0r0,257r15,0v2,-40,-4,-88,2,-124r124,124r20,0","w":188},"L":{"d":"114,0r0,-15r-72,0r0,-242r-15,0r0,257r87,0","w":128},"M":{"d":"317,0r-67,-265r-87,230r-88,-230r-67,265r15,0r55,-216r85,222r84,-222r55,216r15,0","w":324},"N":{"d":"234,4r0,-261r-14,0r0,223r-192,-225r0,259r14,0r0,-218","w":257},"O":{"d":"150,4v77,0,133,-56,133,-133v0,-76,-57,-132,-133,-132v-77,0,-132,57,-132,132v0,77,56,133,132,133xm150,-246v68,0,118,50,118,117v0,69,-50,118,-118,118v-67,0,-117,-50,-117,-118v0,-67,50,-117,117,-117","w":295},"P":{"d":"42,-129v63,5,117,-7,118,-64v1,-63,-65,-69,-133,-64r0,257r15,0r0,-129xm42,-242v52,-3,103,-1,103,49v0,48,-50,54,-103,50r0,-99","w":176},"Q":{"d":"153,4v77,0,132,-57,132,-133v0,-75,-56,-132,-132,-132v-77,0,-132,57,-132,132v0,77,55,133,132,133xm153,-246v68,0,118,50,118,117v0,69,-50,118,-118,118v-67,0,-117,-49,-117,-118v0,-67,49,-117,117,-117xm229,35r0,-15r-76,0r0,15r76,0","w":295},"R":{"d":"157,-193v1,-64,-63,-68,-130,-64r0,257r15,0r0,-129r27,0r82,129r17,0r-82,-129v45,0,70,-20,71,-64xm42,-242v51,-2,100,-2,100,48v0,52,-47,54,-100,51r0,-99","w":174},"S":{"d":"90,3v86,0,95,-105,34,-136v-30,-16,-81,-26,-81,-66v0,-52,83,-58,101,-20r14,-6v-25,-52,-130,-40,-130,26v0,76,122,55,122,132v0,36,-24,56,-60,55v-32,0,-52,-15,-61,-46r-15,5v12,37,37,56,76,56","w":179},"T":{"d":"145,-242r0,-15r-129,0r0,15r57,0r0,242r15,0r0,-242r57,0","w":158},"U":{"d":"102,3v42,0,75,-27,74,-67r0,-193r-14,0r0,193v1,31,-29,52,-60,52v-34,0,-60,-20,-60,-52r0,-193r-15,0r0,193v0,41,33,67,75,67","w":199},"V":{"d":"179,-257r-16,0r-67,212r-68,-212r-15,0r83,261","w":189},"W":{"d":"306,-257r-15,0r-67,210r-65,-215r-65,215r-67,-210r-15,0r83,261r64,-216r64,216","w":315},"X":{"d":"181,0r-75,-132r71,-125r-17,0r-64,111r-63,-111r-17,0r71,124r-75,133r16,0r68,-119r69,119r16,0","w":190},"Y":{"d":"173,-257r-17,0r-64,111r-63,-111r-17,0r73,128r0,129r15,0r0,-129","w":183},"Z":{"d":"188,-257r-165,0r0,15r138,0r-147,242r173,0r0,-15r-147,0","w":199},"[":{"d":"61,17r0,-13r-25,0r0,-263r24,0r0,-13r-39,0r0,289r40,0","w":77},"\\":{"d":"96,0r-73,-257r-15,0r74,257r14,0","w":101},"]":{"d":"62,17r0,-289r-39,0r0,13r25,0r0,263r-26,0r0,13r40,0","w":77},"^":{"d":"114,-136r-44,-101r-12,0r-43,101r9,0r40,-74r40,74r10,0","w":126},"_":{"d":"132,76r0,-13r-132,0r0,13r132,0","w":128},"`":{"d":"89,-177r-48,-48r-8,8r47,48","w":119},"a":{"d":"13,-74v0,70,95,106,136,48r0,26r14,0r0,-149r-14,0r0,26v-42,-55,-136,-22,-136,49xm89,-136v34,0,63,29,63,62v0,33,-28,62,-63,62v-33,0,-62,-29,-62,-62v0,-33,29,-62,62,-62","w":183},"b":{"d":"35,-27v39,58,137,24,137,-47v0,-71,-98,-106,-137,-47r0,-145r-15,0r0,266r15,0r0,-27xm95,-136v33,0,63,29,63,62v0,33,-29,62,-63,62v-33,0,-62,-29,-62,-62v0,-33,29,-62,62,-62","w":186},"c":{"d":"17,-74v0,61,70,99,122,64r0,-19v-39,37,-108,10,-108,-45v0,-56,67,-81,108,-47r0,-17v-49,-34,-122,3,-122,64","w":157},"d":{"d":"15,-74v0,70,98,106,138,47r0,27r14,0r0,-266r-14,0r0,144v-42,-56,-138,-24,-138,48xm92,-136v33,0,62,29,62,62v0,33,-29,62,-62,62v-33,0,-62,-29,-62,-62v0,-33,29,-62,62,-62","w":187},"e":{"d":"144,-43v-25,55,-127,32,-117,-34r139,0v1,-43,-33,-74,-77,-74v-43,0,-77,34,-77,77v0,51,48,91,102,73v20,-6,34,-18,44,-36xm149,-91r-120,0v11,-64,112,-57,120,0","w":176},"f":{"d":"90,-249r0,-15v-25,-9,-54,0,-54,31r0,84r-21,0r0,15r21,0r0,134r14,0r0,-134r36,0r0,-15r-36,0r0,-80v-2,-25,22,-28,40,-20","w":97},"g":{"d":"90,70v43,1,73,-30,73,-73r0,-146r-14,0r0,26v-42,-55,-136,-22,-136,49v0,70,95,106,136,48v4,49,-13,82,-59,81v-28,0,-53,-11,-58,-33r-14,0v8,32,32,48,72,48xm89,-136v34,0,63,29,63,62v0,33,-28,62,-63,62v-33,0,-62,-29,-62,-62v0,-33,29,-62,62,-62","w":183},"h":{"d":"41,0v3,-58,-18,-136,45,-136v62,0,40,81,44,136r14,0v-2,-67,17,-151,-58,-151v-21,0,-36,7,-45,22r0,-137r-14,0r0,266r14,0","w":164},"i":{"d":"34,-199v-17,0,-14,24,0,24v8,0,12,-4,12,-12v-2,-8,-6,-12,-12,-12xm41,0r0,-149r-15,0r0,149r15,0","w":66},"j":{"d":"34,-199v-17,0,-14,24,0,24v8,0,12,-4,12,-12v-2,-8,-6,-12,-12,-12xm41,65r0,-214r-14,0r0,214r14,0","w":66},"k":{"d":"144,0r-87,-87r67,-67r-21,0r-64,64r0,-176r-15,0r0,266r15,0r0,-69r8,-8r78,77r19,0","w":150},"l":{"d":"42,0r0,-266r-14,0r0,266r14,0","w":69},"m":{"d":"158,-136v56,0,29,85,35,136r15,0v-3,-63,19,-154,-50,-151v-19,0,-33,8,-42,24v-12,-28,-62,-33,-77,-7r0,-15r-15,0r0,149r15,0v6,-51,-20,-136,34,-136v55,0,29,85,35,136r15,0v7,-50,-23,-137,35,-136","w":231},"n":{"d":"39,0v4,-55,-19,-136,42,-136v61,0,39,81,43,136r15,0v-2,-68,16,-150,-58,-150v-21,0,-36,6,-42,19r0,-18r-15,0r0,149r15,0","w":162},"o":{"d":"89,3v42,0,77,-35,77,-77v0,-43,-34,-77,-77,-77v-41,0,-76,35,-76,77v0,42,35,77,76,77xm89,-137v34,0,64,28,63,63v0,33,-28,62,-63,62v-33,0,-62,-29,-62,-62v0,-33,29,-63,62,-63","w":179},"p":{"d":"38,-28v39,59,138,26,138,-46v0,-71,-99,-106,-138,-47r0,-28r-15,0r0,219r15,0r0,-98xm99,-136v33,0,62,29,62,62v0,33,-29,62,-62,62v-33,0,-62,-29,-62,-62v0,-33,29,-62,62,-62","w":184},"q":{"d":"11,-74v0,70,97,106,137,47r0,97r15,0r0,-219r-15,0r0,27v-41,-56,-137,-23,-137,48xm87,-136v34,0,63,29,63,62v0,33,-29,62,-63,62v-33,0,-62,-29,-62,-62v0,-33,29,-62,62,-62","w":180},"r":{"d":"39,-98v-2,-31,33,-49,55,-29r8,-12v-18,-17,-55,-13,-63,10r0,-20r-15,0r0,149r15,0r0,-98","w":111},"s":{"d":"10,-28v19,44,99,40,101,-13v2,-48,-71,-35,-76,-73v-3,-29,44,-26,57,-10r11,-10v-24,-28,-81,-20,-83,20v-2,48,73,31,76,73v3,42,-65,33,-73,5","w":119},"t":{"d":"81,-134r0,-15r-35,0r0,-65r-15,0r0,65r-20,0r0,15r20,0r0,134r15,0r0,-134r35,0","w":90},"u":{"d":"77,3v71,0,55,-85,56,-152r-15,0v-5,54,20,137,-41,137v-61,0,-34,-83,-40,-137r-15,0v1,67,-15,152,55,152","w":154},"v":{"d":"150,-149r-16,0r-54,119r-54,-119r-16,0r70,155","w":156},"w":{"d":"238,-149r-17,0r-49,115r-48,-119r-48,120r-50,-116r-16,0r67,155r47,-118r47,118","w":246},"x":{"d":"125,0r-50,-75r49,-74r-17,0r-41,62r-42,-62r-17,0r50,74r-51,75r17,0r43,-62r42,62r17,0","w":129},"y":{"d":"152,-149r-16,0r-55,118r-55,-118r-16,0r63,135r-39,84r17,0","w":160},"z":{"d":"153,-149r-130,0r0,14r100,0r-106,135r134,0r0,-15r-104,0","w":164},"{":{"d":"3,-128v34,22,-1,106,27,138v5,6,18,8,34,8r0,-13v-65,5,-7,-99,-46,-133v38,-22,-19,-128,46,-129r0,-13v-80,-10,-18,104,-61,142","w":69},"|":{"d":"32,17r0,-289r-13,0r0,289r13,0","w":47},"}":{"d":"5,18v85,9,17,-123,62,-146v-47,-22,25,-142,-61,-142r0,13v62,-4,6,99,46,129v-25,23,-13,63,-15,104v-1,25,-7,29,-32,29r0,13","w":69},"~":{"d":"145,-129r-12,-10v-24,28,-52,-4,-80,-4v-16,0,-30,6,-42,18v15,24,32,-19,57,0v22,15,57,21,77,-4","w":154},"\u00a0":{"w":91}}});Cufon.registerFont({"w":196,"face":{"font-family":"geosanslight","font-weight":500,"font-style":"oblique","font-stretch":"normal","units-per-em":"360","panose-1":"2 0 6 3 3 0 0 9 0 3","ascent":"288","descent":"-72","bbox":"-15 -277 324 76","underline-thickness":"6.84","underline-position":"-44.64","slope":"-11","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":91},"!":{"d":"33,-53r29,-204r-14,0r-29,204r14,0xm19,1v17,1,20,-24,4,-25v-17,-1,-23,26,-4,25","w":73},"\"":{"d":"81,-262r-15,0r-4,58r7,0xm41,-262r-15,0r-4,58r7,0","w":97},"#":{"d":"192,-186r-47,0r17,-45r-8,0r-18,45r-50,0r17,-45r-8,0r-18,45r-50,0r-4,9r50,0r-15,41r-46,0r-4,9r46,0r-17,46r9,0r17,-46r51,0r-19,47r9,0r18,-47r49,0r4,-9r-49,0r15,-41r47,0xm133,-177r-16,41r-50,0r15,-41r51,0","w":194},"$":{"d":"3,-53v2,34,27,56,63,56r-3,19r14,0r3,-19v41,0,68,-33,73,-73v5,-34,-13,-58,-52,-75r13,-99v18,3,29,11,35,25r15,-6v-9,-22,-24,-33,-47,-33r2,-19r-14,0r-3,19v-57,-4,-93,85,-40,113v6,3,14,7,23,10r-17,123v-30,0,-46,-15,-50,-46xm87,-150v-37,-9,-47,-55,-19,-79v8,-8,19,-13,32,-15xm98,-129v69,20,41,118,-16,117","w":170},"%":{"d":"36,-175v26,30,75,4,80,-31v5,-39,-44,-59,-72,-32v-17,16,-25,43,-8,63xm195,-257r-15,0r-176,257r15,0xm85,-10v37,41,107,-21,71,-63v-37,-39,-108,20,-71,63xm41,-206v2,-35,64,-42,61,0v-2,22,-37,42,-54,21v-5,-7,-8,-13,-7,-21xm124,-72v27,0,35,38,14,51v-18,20,-52,3,-48,-20v2,-14,18,-31,34,-31","w":191},"&":{"d":"195,-74r-6,-10r-42,30r-44,-85v36,-19,92,-57,57,-102v-48,-40,-129,20,-87,78r12,22v-42,23,-110,70,-71,127v38,30,82,12,126,-20r18,34r17,0r-22,-43xm92,-230v35,-30,88,8,55,45v-14,16,-33,24,-50,36v-12,-22,-33,-58,-5,-81xm135,-45v-29,22,-76,47,-109,21v-30,-46,27,-86,64,-107","w":216},"'":{"d":"41,-257r-15,0r-4,57r8,0","w":59},"(":{"d":"61,-271v-43,83,-64,184,-41,293r13,0v-28,-107,3,-219,41,-293r-13,0","w":66},")":{"d":"12,22v43,-79,65,-186,41,-293r-13,0v26,110,-2,219,-41,293r13,0","w":69},"*":{"d":"95,-201v-1,-14,-23,-20,-40,-22v14,-3,45,-13,46,-23v1,-5,-1,-8,-7,-8v-12,0,-26,12,-40,27v7,-12,8,-21,12,-35v3,-10,-1,-14,-7,-14v-17,1,-12,34,-9,49v-9,-9,-18,-27,-33,-27v-16,5,-10,19,6,24v8,2,16,5,25,7v-30,7,-45,14,-47,22v2,18,21,4,29,-2r19,-16v-4,13,-11,19,-13,35v-2,9,1,14,8,13v15,-1,11,-33,9,-48v9,9,18,26,33,26v5,0,8,-2,9,-8","w":104},"+":{"d":"113,-88r2,-15r-37,0r5,-36r-16,0r-5,36r-37,0r-2,15r36,0r-5,37r17,0r5,-37r37,0","w":136},",":{"d":"59,-19r-15,-6r-31,59r4,3","w":64},"-":{"d":"81,-81r3,-15r-76,0r-3,15r76,0","w":97},".":{"d":"20,-22v-15,1,-19,23,-3,24v7,0,13,-4,13,-12v0,-8,-4,-12,-10,-12","w":40},"\/":{"d":"116,-262r-14,0r-112,262r15,0","w":103},"0":{"d":"82,4v89,0,139,-132,104,-224v-24,-65,-108,-52,-146,0v-44,60,-58,224,42,224xm118,-251v87,0,72,159,30,202v-30,48,-101,53,-120,-4v-27,-81,14,-198,90,-198","w":200},"1":{"d":"103,0r36,-257r-49,0r-12,15r44,0r-34,242r15,0"},"2":{"d":"53,-198v10,-41,72,-65,106,-31v25,24,12,62,-9,83r-146,146r155,0r2,-15r-123,0r116,-114v50,-41,42,-130,-32,-130v-41,0,-75,30,-85,61r16,0"},"3":{"d":"78,2v78,0,122,-118,43,-141v51,-5,77,-70,44,-106v-39,-43,-121,-4,-125,42r17,0v11,-43,63,-59,94,-31v26,41,-5,96,-62,87r-3,17v61,-8,77,67,37,101v-31,27,-88,15,-91,-25r-16,0v2,33,26,56,62,56"},"4":{"d":"182,-49r2,-14r-30,0r28,-198r-177,212r132,0r-7,49r15,0r7,-49r30,0xm139,-63r-102,0r124,-150"},"5":{"d":"136,-35v-36,36,-112,31,-123,-21r-14,6v11,63,104,67,146,27v33,-32,52,-97,16,-134v-23,-23,-54,-25,-90,-19r25,-66r87,0r2,-15r-99,0r-39,100v56,-21,130,2,118,65v-4,23,-13,41,-29,57"},"6":{"d":"20,-18v52,56,153,5,161,-64v8,-72,-66,-112,-125,-75r69,-100r-17,0r-88,128v-18,29,-26,83,0,111xm103,-156v67,0,85,92,35,126v-44,47,-132,14,-119,-52v7,-38,41,-74,84,-74"},"7":{"d":"210,-257r-180,0r-3,15r154,0r-189,236r11,10"},"8":{"d":"29,-15v56,62,177,-25,125,-101v-7,-9,-17,-16,-29,-20v40,-9,70,-73,37,-107v-50,-51,-149,12,-115,84v6,12,14,19,26,23v-46,11,-81,80,-44,121xm115,-247v48,-2,55,62,25,89v-33,29,-93,8,-84,-37v6,-28,29,-51,59,-52xm75,-124v62,-30,101,59,52,98v-40,32,-107,8,-97,-42v5,-24,23,-45,45,-56"},"9":{"d":"171,-111v20,-29,36,-89,6,-123v-30,-34,-91,-28,-126,0v-66,52,-25,187,74,146r16,-7r-64,92r13,7xm116,-244v69,0,83,93,34,126v-45,47,-131,11,-119,-52v8,-40,42,-74,85,-74"},":":{"d":"39,-128v-16,1,-17,24,-3,24v8,0,12,-4,14,-12v-1,-8,-5,-12,-11,-12xm24,-22v-14,1,-18,24,-3,24v8,0,12,-4,14,-12v-1,-8,-4,-12,-11,-12","w":58},";":{"d":"49,-128v-16,1,-19,23,-4,24v8,0,13,-4,14,-12v-1,-8,-4,-12,-10,-12xm50,-19r-11,-6r-35,59r4,3","w":73},"<":{"d":"94,-40r2,-16r-58,-39r69,-39r3,-16r-98,55","w":113},"=":{"d":"97,-110r2,-15r-82,0r-2,15r82,0xm91,-66r2,-14r-82,0r-2,14r82,0","w":106},">":{"d":"107,-95r-83,-55r-2,16r58,39r-69,39r-2,16","w":113},"?":{"d":"41,-207v17,-31,62,-52,98,-30v52,71,-86,87,-99,148v-8,36,44,44,65,23r-7,-11v-14,11,-45,11,-43,-12v17,-52,105,-59,111,-117v4,-37,-22,-55,-59,-55v-35,0,-61,16,-79,48xm77,-12v0,-19,-25,-12,-26,0v1,19,25,16,26,0","w":168},"@":{"d":"135,-40v2,31,41,23,55,2v18,-28,21,-77,-6,-101v-83,-73,-222,36,-157,133v25,37,106,34,136,6r-6,-7v-24,25,-96,27,-120,-3v-61,-78,57,-191,139,-122v35,30,13,120,-28,98v-8,-24,8,-53,11,-78r-9,0r-4,19v-19,-44,-95,-10,-91,28v-13,52,59,59,80,25xm80,-93v22,-20,64,-13,58,22v-3,23,-19,42,-45,42v-38,0,-33,-47,-13,-64","w":214},"A":{"d":"198,0r-66,-265r-140,265r17,0r40,-77r116,0r18,77r15,0xm161,-92r-104,0r70,-132","w":227},"B":{"d":"90,0v81,9,134,-123,41,-146v33,-13,48,-67,22,-96v-19,-22,-69,-13,-108,-15r-36,257r81,0xm107,-242v45,-5,59,58,25,80v-19,19,-53,12,-87,13r13,-93r49,0xm109,-134v59,-6,74,72,32,103v-28,21,-70,14,-115,16r16,-119r67,0","w":201},"C":{"d":"255,-233v-45,-42,-141,-32,-187,9v-48,43,-71,134,-27,191v38,50,145,45,185,5r3,-17v-41,37,-137,51,-175,1v-62,-82,14,-208,113,-202v38,2,66,13,86,31","w":252},"D":{"d":"95,0v101,3,169,-128,115,-218v-29,-48,-94,-38,-165,-39r-36,257r86,0xm129,-243v102,-5,102,151,41,199v-39,31,-82,29,-144,29r32,-228r71,0","w":247},"E":{"d":"131,0r2,-15r-109,0r17,-118r109,0r2,-16r-109,0r13,-93r109,0r2,-15r-123,0r-36,257r123,0","w":170},"F":{"d":"140,-134r2,-15r-97,0r13,-93r97,0r2,-15r-112,0r-36,257r15,0r18,-134r98,0","w":155},"G":{"d":"264,-109v-14,80,-149,139,-210,65v-66,-80,15,-202,113,-202v41,0,71,16,90,47r13,-9v-37,-67,-144,-65,-201,-15v-49,43,-73,134,-28,190v44,53,145,46,194,-3v26,-25,42,-53,47,-88r-101,0r-2,15r85,0","w":295},"H":{"d":"180,0r36,-257r-15,0r-15,108r-141,0r15,-108r-15,0r-36,257r15,0r18,-134r142,0r-19,134r15,0","w":221},"I":{"d":"24,0r36,-257r-14,0r-36,257r14,0","w":69},"J":{"d":"81,-51r29,-206r-15,0r-28,205v-2,41,-40,53,-58,24r-13,7v20,43,77,25,85,-30","w":113},"K":{"d":"167,0r-115,-134r140,-123r-21,0r-130,114r16,-114r-15,0r-36,257r15,0r16,-122r3,-2r107,124r20,0","w":188},"L":{"d":"96,0r2,-15r-72,0r34,-242r-15,0r-36,257r87,0","w":128},"M":{"d":"299,0r-30,-265r-120,230r-55,-230r-104,265r15,0r85,-216r54,222r116,-222r24,216r15,0","w":324},"N":{"d":"216,4r37,-261r-15,0r-31,223r-161,-225r-36,259r14,0r31,-218","w":257},"O":{"d":"131,4v116,0,199,-136,128,-228v-41,-54,-140,-44,-191,0v-48,42,-73,136,-27,191v21,25,52,37,90,37xm247,-213v66,79,-15,202,-113,202v-67,0,-107,-48,-101,-118v8,-94,148,-163,214,-84","w":295},"P":{"d":"42,-129v85,16,161,-46,114,-111v-19,-26,-68,-16,-111,-17r-36,257r15,0xm105,-242v54,-7,62,61,28,86v-21,15,-54,13,-89,13r14,-99r47,0","w":176},"Q":{"d":"136,4v116,0,198,-135,128,-228v-40,-53,-141,-44,-191,0v-48,42,-73,136,-27,191v21,25,52,37,90,37xm252,-213v66,79,-15,202,-113,202v-67,0,-107,-48,-101,-118v8,-94,148,-163,214,-84xm230,45r7,-13r-70,-28r-8,13","w":295},"R":{"d":"150,0r-64,-129v64,7,104,-65,66,-112v-18,-22,-67,-15,-107,-16r-36,257r15,0r18,-129r27,0r64,129r17,0xm102,-242v51,-9,62,61,30,86v-21,16,-53,12,-88,13r14,-99r44,0","w":174},"S":{"d":"53,-199v2,-46,86,-62,104,-20r14,-6v-22,-57,-134,-32,-132,26v-16,77,113,53,102,132v-5,35,-29,55,-67,55v-32,0,-50,-15,-55,-46r-15,5v4,49,54,64,102,51v53,-14,69,-101,19,-131v-28,-16,-74,-25,-72,-66","w":179},"T":{"d":"163,-258r-2,16r-57,0r-34,243r-16,0r35,-243r-57,0r2,-16r129,0","w":158},"U":{"d":"33,-14v43,39,126,7,134,-50r28,-193r-15,0r-27,193v-3,44,-72,68,-108,39v-10,-9,-14,-22,-12,-39r27,-193r-14,0r-28,193v-3,21,2,38,15,50","w":199},"V":{"d":"197,-257r-15,0r-98,212r-37,-212r-15,0r45,261","w":189},"W":{"d":"324,-257r-15,0r-97,210r-34,-215r-96,215r-37,-210r-15,0r46,261r95,-216r33,216","w":315},"X":{"d":"163,0r-57,-132r89,-125r-17,0r-79,111r-48,-111r-17,0r54,124r-94,133r16,0r85,-119r52,119r16,0","w":190},"Y":{"d":"191,-257r-17,0r-79,111r-48,-111r-17,0r55,128r-18,129r15,0r18,-129","w":183},"Z":{"d":"207,-257r-165,0r-2,15r135,0r-178,242r173,0r2,-15r-143,0","w":199},"[":{"d":"41,17r1,-13r-25,0r37,-263r24,0r2,-13r-39,0r-40,289r40,0","w":77},"\\":{"d":"78,0r-37,-257r-15,0r38,257r14,0","w":101},"]":{"d":"42,17r40,-289r-39,0r-2,13r25,0r-37,263r-26,0r-1,13r40,0","w":77},"^":{"d":"107,-136r-30,-101r-11,0r-58,101r9,0r51,-74r29,74r10,0","w":126},"_":{"d":"131,76r3,-13r-133,0r-2,13r132,0","w":128},"`":{"d":"86,-177r-41,-48r-9,8r40,48","w":119},"a":{"d":"153,0r21,-149r-15,0r-3,26v-64,-78,-191,27,-129,104v28,34,85,27,115,-7r-4,26r15,0xm98,-136v57,0,71,78,29,106v-39,40,-110,8,-100,-44v6,-33,36,-62,71,-62","w":183},"b":{"d":"20,-27v38,62,136,16,144,-47v9,-76,-89,-103,-131,-47r20,-145r-14,0r-38,266r15,0xm96,-136v56,0,71,77,29,106v-38,39,-109,9,-100,-44v5,-32,36,-62,71,-62","w":186},"c":{"d":"130,-10r3,-19v-40,37,-110,12,-102,-45v7,-50,73,-84,115,-47r2,-17v-71,-48,-172,46,-117,119v20,27,69,28,99,9","w":157},"d":{"d":"149,0r37,-266r-15,0r-20,144v-42,-62,-144,-11,-144,48v0,76,88,103,131,47r-4,27r15,0xm93,-136v56,0,68,73,29,106v-42,35,-109,8,-100,-44v5,-32,36,-62,71,-62","w":187},"e":{"d":"140,-43v-27,51,-131,37,-113,-34r139,0v15,-71,-76,-92,-124,-52v-56,46,-24,160,62,128v20,-7,37,-18,48,-36xm152,-91r-121,0v16,-58,114,-63,121,0","w":176},"f":{"d":"106,-249v4,-13,-1,-21,-17,-18v-55,-1,-39,75,-51,118r-20,0r-3,15r21,0r-19,134r15,0r18,-134r36,0r2,-15r-35,0r11,-80v1,-24,23,-28,42,-20","w":97},"g":{"d":"122,40v-24,23,-97,20,-98,-18r-15,0v1,54,88,61,122,28v43,-42,32,-131,48,-199r-15,0r-4,26v-66,-79,-190,29,-128,104v28,34,85,27,115,-7v-3,28,-9,51,-25,66xm103,-136v57,0,71,78,29,106v-38,39,-109,9,-100,-44v6,-32,36,-62,71,-62","w":183},"h":{"d":"126,0v4,-58,42,-154,-38,-151v-20,0,-36,7,-47,22r19,-137r-15,0r-37,266r15,0v13,-53,-5,-135,63,-136v66,-1,26,89,25,136r15,0","w":164},"i":{"d":"48,-199v-16,-1,-18,24,-3,24v7,0,12,-4,13,-12v-1,-8,-4,-12,-10,-12xm27,0r21,-149r-15,0r-21,149r15,0","w":66},"j":{"d":"53,-199v-17,-1,-17,24,-4,24v8,0,12,-4,14,-12v-1,-8,-4,-12,-10,-12xm23,65r30,-214r-15,0r-30,214r15,0","w":66},"k":{"d":"126,0r-76,-87r77,-67r-21,0r-73,64r25,-176r-15,0r-38,266r15,0r10,-69r9,-8r67,77r20,0","w":150},"l":{"d":"23,0r38,-266r-15,0r-37,266r14,0","w":69},"m":{"d":"197,0v2,-53,47,-148,-29,-151v-19,0,-34,8,-45,24v-8,-30,-60,-31,-76,-7r2,-15r-15,0r-21,149r15,0v14,-49,-6,-132,54,-136v20,-1,33,14,30,33r-14,103r15,0r14,-103v-1,-31,45,-44,64,-23v16,35,-7,85,-8,126r14,0","w":231},"n":{"d":"128,0v4,-55,43,-150,-36,-150v-22,0,-37,6,-46,19r3,-18r-15,0r-21,149r15,0v13,-52,-3,-136,62,-136v64,0,24,90,23,136r15,0","w":162},"o":{"d":"27,-19v61,67,185,-35,124,-110v-67,-67,-184,36,-124,110xm98,-137v55,0,72,78,29,107v-39,39,-109,8,-100,-44v5,-31,37,-63,71,-63","w":179},"p":{"d":"36,-28v37,63,136,17,144,-46v9,-77,-89,-103,-131,-47r4,-28r-15,0r-30,219r14,0xm112,-136v58,0,72,78,29,106v-38,40,-110,7,-100,-44v6,-32,36,-62,71,-62","w":184},"q":{"d":"147,70r31,-219r-15,0r-4,27v-42,-62,-144,-11,-144,48v0,77,88,102,131,47r-14,97r15,0xm101,-136v56,0,71,77,29,106v-39,40,-110,7,-100,-44v7,-33,36,-62,71,-62","w":180},"r":{"d":"42,-98v2,-27,36,-51,59,-29r10,-12v-18,-19,-55,-10,-65,10r3,-20r-15,0r-21,149r15,0","w":111},"s":{"d":"54,-12v-21,0,-29,-10,-36,-24r-14,8v16,49,97,34,102,-13v4,-38,-37,-41,-60,-56v-14,-15,-1,-39,23,-39v13,0,23,4,30,12r12,-10v-32,-42,-113,4,-78,47v13,15,63,16,58,46v-4,20,-15,29,-37,29","w":119},"t":{"d":"85,-134r1,-15r-34,0r9,-65r-15,0r-9,65r-24,0r-1,15r23,0r-19,134r15,0r19,-134r35,0","w":90},"u":{"d":"28,-13v29,39,95,6,102,-43r14,-93r-15,0v-12,51,2,139,-61,137v-64,-1,-20,-92,-20,-137r-15,0v-3,44,-30,103,-5,136","w":154},"v":{"d":"161,-149r-16,0r-71,119r-38,-119r-15,0r48,155","w":156},"w":{"d":"248,-149r-16,0r-66,115r-31,-119r-64,120r-34,-116r-16,0r45,155r64,-118r29,118","w":246},"x":{"d":"114,0r-39,-75r59,-74r-17,0r-50,62r-32,-62r-18,0r40,74r-62,75r18,0r51,-62r33,62r17,0","w":129},"y":{"d":"167,-149r-16,0r-71,118r-39,-118r-16,0r44,135r-50,84r16,0","w":160},"z":{"d":"163,-149r-130,0r-2,14r100,0r-125,135r134,0r3,-15r-104,0","w":164},"{":{"d":"3,-128v32,30,-14,101,7,138v6,5,17,8,34,8r2,-13v-25,-1,-29,-3,-28,-29v2,-34,20,-79,0,-104v34,-21,13,-91,39,-122v5,-4,14,-7,25,-7r2,-13v-81,-6,-32,108,-81,142","w":69},"|":{"d":"12,17r40,-289r-12,0r-41,289r13,0","w":47},"}":{"d":"67,-128v-33,-29,15,-97,-8,-132v-5,-8,-17,-10,-33,-10r-2,13v65,3,-8,93,28,129v-34,25,-15,93,-39,128v-5,3,-14,5,-26,5r-2,13v84,7,31,-106,82,-146","w":69},"~":{"d":"145,-129r-10,-10v-25,28,-52,-4,-80,-4v-16,0,-31,6,-45,18v14,24,41,-24,66,5v20,14,50,11,69,-9","w":154},"\u00a0":{"w":91}}});

