text:
/**
 * @class Ext

 The Ext namespace (global object) encapsulates all classes, singletons, and utility methods provided by Sencha's libraries.

 Most user interface Components are at a lower level of nesting in the namespace, but many common utility functions are provided
 as direct properties of the Ext namespace.

 Also many frequently used methods from other classes are provided as shortcuts within the Ext namespace.
 For example {@link Ext#getCmp Ext.getCmp} aliases {@link Ext.ComponentManager#get Ext.ComponentManager.get}.

 Many applications are initiated with {@link Ext#onReady Ext.onReady} which is called once the DOM is ready.
 This ensures all scripts have been loaded, preventing dependency issues. For example

     Ext.onReady(function(){
         new Ext.Component({
             renderTo: document.body,
             html: 'DOM ready!'
         });
     });

For more information about how to use the Ext classes, see

- The Learning Center
- The FAQ
- The forums

 * @singleton
 * @markdown
 */
Ext.apply(Ext, {
    userAgent: navigator.userAgent.toLowerCase(),
    cache: {},
    idSeed: 1000,
    windowId: 'ext-window',
    documentId: 'ext-document',

    /**
     * True when the document is fully initialized and ready for action
     * @type Boolean
     */
    isReady: false,

    /**
     * True to automatically uncache orphaned Ext.Elements periodically
     * @type Boolean
     */
    enableGarbageCollector: true,

    /**
     * True to automatically purge event listeners during garbageCollection.
     * @type Boolean
     */
    enableListenerCollection: true,

    /**
     * Generates unique ids. If the element already has an id, it is unchanged
     * @param {HTMLElement/Ext.Element} el (optional) The element to generate an id for
     * @param {String} prefix (optional) Id prefix (defaults "ext-gen")
     * @return {String} The generated Id.
     */
    id: function(el, prefix) {
        var me = this,
            sandboxPrefix = '';
        el = Ext.getDom(el, true) || {};
        if (el === document) {
            el.id = me.documentId;
        }
        else if (el === window) {
            el.id = me.windowId;
        }
        if (!el.id) {
            if (me.isSandboxed) {
                if (!me.uniqueGlobalNamespace) {
                    me.getUniqueGlobalNamespace();
                }
                sandboxPrefix = me.uniqueGlobalNamespace + '-';
            }
            el.id = sandboxPrefix + (prefix || "ext-gen") + (++Ext.idSeed);
        }
        return el.id;
    },

    /**
     * Returns the current document body as an {@link Ext.Element}.
     * @return Ext.Element The document body
     */
    getBody: function() {
        return Ext.get(document.body || false);
    },

    /**
     * Returns the current document head as an {@link Ext.Element}.
     * @return Ext.Element The document head
     * @method
     */
    getHead: function() {
        var head;

        return function() {
            if (head == undefined) {
                head = Ext.get(document.getElementsByTagName("head")[0]);
            }

            return head;
        };
    }(),

    /**
     * Returns the current HTML document object as an {@link Ext.Element}.
     * @return Ext.Element The document
     */
    getDoc: function() {
        return Ext.get(document);
    },

    /**
     * This is shorthand reference to {@link Ext.ComponentManager#get}.
     * Looks up an existing {@link Ext.Component Component} by {@link Ext.Component#id id}
     * @param {String} id The component {@link Ext.Component#id id}
     * @return Ext.Component The Component, <tt>undefined</tt> if not found, or <tt>null</tt> if a
     * Class was found.
    */
    getCmp: function(id) {
        return Ext.ComponentManager.get(id);
    },

    /**
     * Returns the current orientation of the mobile device
     * @return {String} Either 'portrait' or 'landscape'
     */
    getOrientation: function() {
        return window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';
    },

    /**
     * Attempts to destroy any objects passed to it by removing all event listeners, removing them from the
     * DOM (if applicable) and calling their destroy functions (if available).  This method is primarily
     * intended for arguments of type {@link Ext.Element} and {@link Ext.Component}, but any subclass of
     * {@link Ext.util.Observable} can be passed in.  Any number of elements and/or components can be
     * passed into this function in a single call as separate arguments.
     * @param {Ext.Element/Ext.Component/Ext.Element[]/Ext.Component[]...} arg1
     * An {@link Ext.Element}, {@link Ext.Component}, or an Array of either of these to destroy
     */
    destroy: function() {
        var ln = arguments.length,
        i, arg;

        for (i = 0; i < ln; i++) {
            arg = arguments[i];
            if (arg) {
                if (Ext.isArray(arg)) {
                    this.destroy.apply(this, arg);
                }
                else if (Ext.isFunction(arg.destroy)) {
                    arg.destroy();
                }
                else if (arg.dom) {
                    arg.remove();
                }
            }
        }
    },

    /**
     * Execute a callback function in a particular scope. If no function is passed the call is ignored.
     *
     * For example, these lines are equivalent:
     *
     *     Ext.callback(myFunc, this, [arg1, arg2]);
     *     Ext.isFunction(myFunc) && myFunc.apply(this, [arg1, arg2]);
     *
     * @param {Function} callback The callback to execute
     * @param {Object} scope (optional) The scope to execute in
     * @param {Array} args (optional) The arguments to pass to the function
     * @param {Number} delay (optional) Pass a number to delay the call by a number of milliseconds.
     */
    callback: function(callback, scope, args, delay){
        if(Ext.isFunction(callback)){
            args = args || [];
            scope = scope || window;
            if (delay) {
                Ext.defer(callback, delay, scope, args);
            } else {
                callback.apply(scope, args);
            }
        }
    },

    /**
     * Convert certain characters (&, <, >, and ') to their HTML character equivalents for literal display in web pages.
     * @param {String} value The string to encode
     * @return {String} The encoded text
     */
    htmlEncode : function(value) {
        return Ext.String.htmlEncode(value);
    },

    /**
     * Convert certain characters (&, <, >, and ') from their HTML character equivalents.
     * @param {String} value The string to decode
     * @return {String} The decoded text
     */
    htmlDecode : function(value) {
         return Ext.String.htmlDecode(value);
    },

    /**
     * Appends content to the query string of a URL, handling logic for whether to place
     * a question mark or ampersand.
     * @param {String} url The URL to append to.
     * @param {String} s The content to append to the URL.
     * @return (String) The resulting URL
     */
    urlAppend : function(url, s) {
        if (!Ext.isEmpty(s)) {
            return url + (url.indexOf('?') === -1 ? '?' : '&') + s;
        }
        return url;
    }
});

Ext.ns = Ext.namespace;

// for old browsers
window.undefined = window.undefined;

/**
 * @class Ext
 * Ext core utilities and functions.
 * @singleton
 */
(function(){
/*
FF 3.6      - Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17
FF 4.0.1    - Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
FF 5.0      - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0

IE6         - Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)
IE7         - Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1;)
IE8         - Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
IE9         - Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

Chrome 11   - Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.60 Safari/534.24

Safari 5    - Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1

Opera 11.11 - Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11
*/
    var check = function(regex){
            return regex.test(Ext.userAgent);
        },
        isStrict = document.compatMode == "CSS1Compat",
        version = function (is, regex) {
            var m;
            return (is && (m = regex.exec(Ext.userAgent))) ? parseFloat(m[1]) : 0;
        },
        docMode = document.documentMode,
        isOpera = check(/opera/),
        isOpera10_5 = isOpera && check(/version\/10\.5/),
        isChrome = check(/\bchrome\b/),
        isWebKit = check(/webkit/),
        isSafari = !isChrome && check(/safari/),
        isSafari2 = isSafari && check(/applewebkit\/4/), // unique to Safari 2
        isSafari3 = isSafari && check(/version\/3/),
        isSafari4 = isSafari && check(/version\/4/),
        isSafari5 = isSafari && check(/version\/5/),
        isIE = !isOpera && check(/msie/),
        isIE7 = isIE && (check(/msie 7/) || docMode == 7),
        isIE8 = isIE && (check(/msie 8/) && docMode != 7 && docMode != 9 || docMode == 8),
        isIE9 = isIE && (check(/msie 9/) && docMode != 7 && docMode != 8 || docMode == 9),
        isIE6 = isIE && check(/msie 6/),
        isGecko = !isWebKit && check(/gecko/),
        isGecko3 = isGecko && check(/rv:1\.9/),
        isGecko4 = isGecko && check(/rv:2\.0/),
        isGecko5 = isGecko && check(/rv:5\./),
        isFF3_0 = isGecko3 && check(/rv:1\.9\.0/),
        isFF3_5 = isGecko3 && check(/rv:1\.9\.1/),
        isFF3_6 = isGecko3 && check(/rv:1\.9\.2/),
        isWindows = check(/windows|win32/),
        isMac = check(/macintosh|mac os x/),
        isLinux = check(/linux/),
        scrollbarSize = null,
        chromeVersion = version(true, /\bchrome\/(\d+\.\d+)/),
        firefoxVersion = version(true, /\bfirefox\/(\d+\.\d+)/),
        ieVersion = version(isIE, /msie (\d+\.\d+)/),
        operaVersion = version(isOpera, /version\/(\d+\.\d+)/),
        safariVersion = version(isSafari, /version\/(\d+\.\d+)/),
        webKitVersion = version(isWebKit, /webkit\/(\d+\.\d+)/),
        isSecure = /^https/i.test(window.location.protocol);

    // remove css image flicker
    try {
        document.execCommand("BackgroundImageCache", false, true);
    } catch(e) {}

    //<debug>
    function dumpObject (object) {
        var member, members = [];

        // Cannot use Ext.encode since it can recurse endlessly (if we're lucky)
        // ...and the data could be prettier!
        Ext.Object.each(object, function (name, value) {
            if (typeof(value) === "function") {
                return;
            }

            if (!Ext.isDefined(value) || value === null ||
                    Ext.isDate(value) ||
                    Ext.isString(value) || (typeof(value) == "number") ||
                    Ext.isBoolean(value)) {
                member = Ext.encode(value);
            } else if (Ext.isArray(value)) {
                member = '[ ]';
            } else if (Ext.isObject(value)) {
                member = '{ }';
            } else {
                member = 'undefined';
            }
            members.push(Ext.encode(name) + ': ' + member);
        });

        if (members.length) {
            return ' \nData: {\n  ' + members.join(',\n  ') + '\n}';
        }
        return '';
    }

    function log (message) {
        var options, dump,
            con = Ext.global.console,
            level = 'log',
            indent = log.indent || 0,
            stack;

        log.indent = indent;

        if (!Ext.isString(message)) {
            options = message;
            message = options.msg || '';
            level = options.level || level;
            dump = options.dump;
            stack = options.stack;

            if (options.indent) {
                ++log.indent;
            } else if (options.outdent) {
                log.indent = indent = Math.max(indent - 1, 0);
            }

            if (dump && !(con && con.dir)) {
                message += dumpObject(dump);
                dump = null;
            }
        }

        if (arguments.length > 1) {
            message += Array.prototype.slice.call(arguments, 1).join('');
        }

        message = indent ? Ext.String.repeat('   ', indent) + message : message;
        // w/o console, all messages are equal, so munge the level into the message:
        if (level != 'log') {
            message = '[' + level.charAt(0).toUpperCase() + '] ' + message;
        }

        // Not obvious, but 'console' comes and goes when Firebug is turned on/off, so
        // an early test may fail either direction if Firebug is toggled.
        //
        if (con) { // if (Firebug-like console)
            if (con[level]) {
                con[level](message);
            } else {
                con.log(message);
            }

            if (dump) {
                con.dir(dump);
            }

            if (stack && con.trace) {
                // Firebug's console.error() includes a trace already...
                if (!con.firebug || level != 'error') {
                    con.trace();
                }
            }
        } else {
            if (Ext.isOpera) {
                opera.postError(message);
            } else {
                var out = log.out,
                    max = log.max;

                if (out.length >= max) {
                    // this formula allows out.max to change (via debugger), where the
                    // more obvious "max/4" would not quite be the same
                    Ext.Array.erase(out, 0, out.length - 3 * Math.floor(max / 4)); // keep newest 75%
                }

                out.push(message);
            }
        }

        // Mostly informational, but the Ext.Error notifier uses them:
        ++log.count;
        ++log.counters[level];
    }

    log.count = 0;
    log.counters = { error: 0, warn: 0, info: 0, log: 0 };
    log.out = [];
    log.max = 250;
    log.show = function () {
        window.open('','extlog').document.write([
            ''].join(''));
    };
    //</debug>

    Ext.setVersion('extjs', '4.0.7');
    Ext.apply(Ext, {
        /**
         * URL to a blank file used by Ext when in secure mode for iframe src and onReady src to prevent
         * the IE insecure content warning (<tt>'about:blank'</tt>, except for IE in secure mode, which is <tt>'javascript:""'</tt>).
         * @type String
         */
        SSL_SECURE_URL : isSecure && isIE ? 'javascript:""' : 'about:blank',

        /**
         * True if the {@link Ext.fx.Anim} Class is available
         * @type Boolean
         * @property enableFx
         */

        /**
         * True to scope the reset CSS to be just applied to Ext components. Note that this wraps root containers
         * with an additional element. Also remember that when you turn on this option, you have to use ext-all-scoped {
         * unless you use the bootstrap.js to load your javascript, in which case it will be handled for you.
         * @type Boolean
         */
        scopeResetCSS : Ext.buildSettings.scopeResetCSS,

        /**
         * EXPERIMENTAL - True to cascade listener removal to child elements when an element is removed.
         * Currently not optimized for performance.
         * @type Boolean
         */
        enableNestedListenerRemoval : false,

        /**
         * Indicates whether to use native browser parsing for JSON methods.
         * This option is ignored if the browser does not support native JSON methods.
         * Note: Native JSON methods will not work with objects that have functions.
         * Also, property names must be quoted, otherwise the data will not parse. (Defaults to false)
         * @type Boolean
         */
        USE_NATIVE_JSON : false,

        /**
         * Return the dom node for the passed String (id), dom node, or Ext.Element.
         * Optional 'strict' flag is needed for IE since it can return 'name' and
         * 'id' elements by using getElementById.
         * Here are some examples:
         *

// gets dom node based on id
var elDom = Ext.getDom('elId');
// gets dom node based on the dom node
var elDom1 = Ext.getDom(elDom);

// If we don't know if we are working with an
// Ext.Element or a dom node use Ext.getDom
function(el){
    var dom = Ext.getDom(el);
    // do something with the dom node
}
         *

         * Note: the dom node to be found actually needs to exist (be rendered, etc)
         * when this method is called to be successful.
         * @param {String/HTMLElement/Ext.Element} el
         * @return HTMLElement
         */
        getDom : function(el, strict) {
            if (!el || !document) {
                return null;
            }
            if (el.dom) {
                return el.dom;
            } else {
                if (typeof el == 'string') {
                    var e = document.getElementById(el);
                    // IE returns elements with the 'name' and 'id' attribute.
                    // we do a strict check to return the element with only the id attribute
                    if (e && isIE && strict) {
                        if (el == e.getAttribute('id')) {
                            return e;
                        } else {
                            return null;
                        }
                    }
                    return e;
                } else {
                    return el;
                }
            }
        },

        /**
         * Removes a DOM node from the document.
         *
Removes this element from the document, removes all DOM event listeners, and deletes the cache reference.
         * All DOM event listeners are removed from this element. If {@link Ext#enableNestedListenerRemoval Ext.enableNestedListenerRemoval} is
         * true, then DOM event listeners are also removed from all child nodes. The body node
         * will be ignored if passed in.

         * @param {HTMLElement} node The node to remove
         * @method
         */
        removeNode : isIE6 || isIE7 ? function() {
            var d;
            return function(n){
                if(n && n.tagName != 'BODY'){
                    (Ext.enableNestedListenerRemoval) ? Ext.EventManager.purgeElement(n) : Ext.EventManager.removeAll(n);
                    d = d || document.createElement('div');
                    d.appendChild(n);
                    d.innerHTML = '';
                    delete Ext.cache[n.id];
                }
            };
        }() : function(n) {
            if (n && n.parentNode && n.tagName != 'BODY') {
                (Ext.enableNestedListenerRemoval) ? Ext.EventManager.purgeElement(n) : Ext.EventManager.removeAll(n);
                n.parentNode.removeChild(n);
                delete Ext.cache[n.id];
            }
        },

        isStrict: isStrict,

        isIEQuirks: isIE && !isStrict,

        /**
         * True if the detected browser is Opera.
         * @type Boolean
         */
        isOpera : isOpera,

        /**
         * True if the detected browser is Opera 10.5x.
         * @type Boolean
         */
        isOpera10_5 : isOpera10_5,

        /**
         * True if the detected browser uses WebKit.
         * @type Boolean
         */
        isWebKit : isWebKit,

        /**
         * True if the detected browser is Chrome.
         * @type Boolean
         */
        isChrome : isChrome,

        /**
         * True if the detected browser is Safari.
         * @type Boolean
         */
        isSafari : isSafari,

        /**
         * True if the detected browser is Safari 3.x.
         * @type Boolean
         */
        isSafari3 : isSafari3,

        /**
         * True if the detected browser is Safari 4.x.
         * @type Boolean
         */
        isSafari4 : isSafari4,

        /**
         * True if the detected browser is Safari 5.x.
         * @type Boolean
         */
        isSafari5 : isSafari5,

        /**
         * True if the detected browser is Safari 2.x.
         * @type Boolean
         */
        isSafari2 : isSafari2,

        /**
         * True if the detected browser is Internet Explorer.
         * @type Boolean
         */
        isIE : isIE,

        /**
         * True if the detected browser is Internet Explorer 6.x.
         * @type Boolean
         */
        isIE6 : isIE6,

        /**
         * True if the detected browser is Internet Explorer 7.x.
         * @type Boolean
         */
        isIE7 : isIE7,

        /**
         * True if the detected browser is Internet Explorer 8.x.
         * @type Boolean
         */
        isIE8 : isIE8,

        /**
         * True if the detected browser is Internet Explorer 9.x.
         * @type Boolean
         */
        isIE9 : isIE9,

        /**
         * True if the detected browser uses the Gecko layout engine (e.g. Mozilla, Firefox).
         * @type Boolean
         */
        isGecko : isGecko,

        /**
         * True if the detected browser uses a Gecko 1.9+ layout engine (e.g. Firefox 3.x).
         * @type Boolean
         */
        isGecko3 : isGecko3,

        /**
         * True if the detected browser uses a Gecko 2.0+ layout engine (e.g. Firefox 4.x).
         * @type Boolean
         */
        isGecko4 : isGecko4,

        /**
         * True if the detected browser uses a Gecko 5.0+ layout engine (e.g. Firefox 5.x).
         * @type Boolean
         */
        isGecko5 : isGecko5,

        /**
         * True if the detected browser uses FireFox 3.0
         * @type Boolean
         */
        isFF3_0 : isFF3_0,

        /**
         * True if the detected browser uses FireFox 3.5
         * @type Boolean
         */
        isFF3_5 : isFF3_5,

        /**
         * True if the detected browser uses FireFox 3.6
         * @type Boolean
         */
        isFF3_6 : isFF3_6,

        /**
         * True if the detected browser uses FireFox 4
         * @type Boolean
         */
        isFF4 : 4 <= firefoxVersion && firefoxVersion < 5,

        /**
         * True if the detected browser uses FireFox 5
         * @type Boolean
         */
        isFF5 : 5 <= firefoxVersion && firefoxVersion < 6,

        /**
         * True if the detected platform is Linux.
         * @type Boolean
         */
        isLinux : isLinux,

        /**
         * True if the detected platform is Windows.
         * @type Boolean
         */
        isWindows : isWindows,

        /**
         * True if the detected platform is Mac OS.
         * @type Boolean
         */
        isMac : isMac,

        /**
         * The current version of Chrome (0 if the browser is not Chrome).
         * @type Number
         */
        chromeVersion: chromeVersion,

        /**
         * The current version of Firefox (0 if the browser is not Firefox).
         * @type Number
         */
        firefoxVersion: firefoxVersion,

        /**
         * The current version of IE (0 if the browser is not IE). This does not account
         * for the documentMode of the current page, which is factored into {@link #isIE7},
         * {@link #isIE8} and {@link #isIE9}. Thus this is not always true:
         *
         *      Ext.isIE8 == (Ext.ieVersion == 8)
         *
         * @type Number
         * @markdown
         */
        ieVersion: ieVersion,

        /**
         * The current version of Opera (0 if the browser is not Opera).
         * @type Number
         */
        operaVersion: operaVersion,

        /**
         * The current version of Safari (0 if the browser is not Safari).
         * @type Number
         */
        safariVersion: safariVersion,

        /**
         * The current version of WebKit (0 if the browser does not use WebKit).
         * @type Number
         */
        webKitVersion: webKitVersion,

        /**
         * True if the page is running over SSL
         * @type Boolean
         */
        isSecure: isSecure,

        /**
         * URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
         * In older versions of IE, this defaults to "http://sencha.com/s.gif" and you should change this to a URL on your server.
         * For other browsers it uses an inline data URL.
         * @type String
         */
        BLANK_IMAGE_URL : (isIE6 || isIE7) ? '/' + '/www.sencha.com/s.gif' : 'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==',

        /**
         *
Utility method for returning a default value if the passed value is empty.

         *
The value is deemed to be empty if it is

         *
null

         *
undefined

         *
an empty array

         *
a zero length string (Unless the <tt>allowBlank</tt> parameter is <tt>true</tt>)

         *

         * @param {Object} value The value to test
         * @param {Object} defaultValue The value to return if the original value is empty
         * @param {Boolean} allowBlank (optional) true to allow zero length strings to qualify as non-empty (defaults to false)
         * @return {Object} value, if non-empty, else defaultValue
         * @deprecated 4.0.0 Use {@link Ext#valueFrom} instead
         */
        value : function(v, defaultValue, allowBlank){
            return Ext.isEmpty(v, allowBlank) ? defaultValue : v;
        },

        /**
         * Escapes the passed string for use in a regular expression
         * @param {String} str
         * @return {String}
         * @deprecated 4.0.0 Use {@link Ext.String#escapeRegex} instead
         */
        escapeRe : function(s) {
            return s.replace(/([-.*+?^${}()|[\]\/\\])/g, "\\$1");
        },

        /**
         * Applies event listeners to elements by selectors when the document is ready.
         * The event name is specified with an <tt>@</tt> suffix.
         *

Ext.addBehaviors({
    // add a listener for click on all anchors in element with id foo
    '#foo a@click' : function(e, t){
        // do something
    },

    // add the same listener to multiple selectors (separated by comma BEFORE the @)
    '#foo a, #bar span.some-class@mouseover' : function(){
        // do something
    }
});
         *

         * @param {Object} obj The list of behaviors to apply
         */
        addBehaviors : function(o){
            if(!Ext.isReady){
                Ext.onReady(function(){
                    Ext.addBehaviors(o);
                });
            } else {
                var cache = {}, // simple cache for applying multiple behaviors to same selector does query multiple times
                    parts,
                    b,
                    s;
                for (b in o) {
                    if ((parts = b.split('@'))[1]) { // for Object prototype breakers
                        s = parts[0];
                        if(!cache[s]){
                            cache[s] = Ext.select(s);
                        }
                        cache[s].on(parts[1], o[b]);
                    }
                }
                cache = null;
            }
        },

        /**
         * Returns the size of the browser scrollbars. This can differ depending on
         * operating system settings, such as the theme or font size.
         * @param {Boolean} force (optional) true to force a recalculation of the value.
         * @return {Object} An object containing the width of a vertical scrollbar and the
         * height of a horizontal scrollbar.
         */
        getScrollbarSize: function (force) {
            if(!Ext.isReady){
                return 0;
            }

            if(force === true || scrollbarSize === null){
                // BrowserBug: IE9
                // When IE9 positions an element offscreen via offsets, the offsetWidth is
                // inaccurately reported. For IE9 only, we render on screen before removing.
                var cssClass = Ext.isIE9 ? '' : Ext.baseCSSPrefix + 'hide-offsets',
                    // Append our div, do our calculation and then remove it
                    div = Ext.getBody().createChild('

'),
                    child = div.child('div', true),
                    w1 = child.offsetWidth;

                div.setStyle('overflow', (Ext.isWebKit || Ext.isGecko) ? 'auto' : 'scroll');

                var w2 = child.offsetWidth, width = w1 - w2;
                div.remove();

                // We assume width == height for now. TODO: is this always true?
                scrollbarSize = { width: width, height: width };
            }

            return scrollbarSize;
        },

        /**
         * Utility method for getting the width of the browser's vertical scrollbar. This
         * can differ depending on operating system settings, such as the theme or font size.
         *
         * This method is deprected in favor of {@link #getScrollbarSize}.
         *
         * @param {Boolean} force (optional) true to force a recalculation of the value.
         * @return {Number} The width of a vertical scrollbar.
         * @deprecated
         */
        getScrollBarWidth: function(force){
            var size = Ext.getScrollbarSize(force);
            return size.width + 2; // legacy fudge factor
        },

        /**
         * Copies a set of named properties fom the source object to the destination object.
         *
         * Example:
         *
         *     ImageComponent = Ext.extend(Ext.Component, {
         *         initComponent: function() {
         *             this.autoEl = { tag: 'img' };
         *             MyComponent.superclass.initComponent.apply(this, arguments);
         *             this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height');
         *         }
         *     });
         *
         * Important note: To borrow class prototype methods, use {@link Ext.Base#borrow} instead.
         *
         * @param {Object} dest The destination object.
         * @param {Object} source The source object.
         * @param {String/String[]} names Either an Array of property names, or a comma-delimited list
         * of property names to copy.
         * @param {Boolean} usePrototypeKeys (Optional) Defaults to false. Pass true to copy keys off of the prototype as well as the instance.
         * @return {Object} The modified object.
         */
        copyTo : function(dest, source, names, usePrototypeKeys){
            if(typeof names == 'string'){
                names = names.split(/[,;\s]/);
            }
            Ext.each(names, function(name){
                if(usePrototypeKeys || source.hasOwnProperty(name)){
                    dest[name] = source[name];
                }
            }, this);
            return dest;
        },

        /**
         * Attempts to destroy and then remove a set of named properties of the passed object.
         * @param {Object} o The object (most likely a Component) who's properties you wish to destroy.
         * @param {String...} args One or more names of the properties to destroy and remove from the object.
         */
        destroyMembers : function(o){
            for (var i = 1, a = arguments, len = a.length; i < len; i++) {
                Ext.destroy(o[a[i]]);
                delete o[a[i]];
            }
        },

        /**
         * Logs a message. If a console is present it will be used. On Opera, the method
         * "opera.postError" is called. In other cases, the message is logged to an array
         * "Ext.log.out". An attached debugger can watch this array and view the log. The
         * log buffer is limited to a maximum of "Ext.log.max" entries (defaults to 250).
         * The `Ext.log.out` array can also be written to a popup window by entering the
         * following in the URL bar (a "bookmarklet"):
         *
         *    javascript:void(Ext.log.show());
         *
         * If additional parameters are passed, they are joined and appended to the message.
         * A technique for tracing entry and exit of a function is this:
         *
         *      function foo () {
         *          Ext.log({ indent: 1 }, '>> foo');
         *
         *          // log statements in here or methods called from here will be indented
         *          // by one step
         *
         *          Ext.log({ outdent: 1 }, '<< foo');
         *      }
         *
         * This method does nothing in a release build.
         *
         * @param {String/Object} message The message to log or an options object with any
         * of the following properties:
         *
         *  - `msg`: The message to log (required).
         *  - `level`: One of: "error", "warn", "info" or "log" (the default is "log").
         *  - `dump`: An object to dump to the log as part of the message.
         *  - `stack`: True to include a stack trace in the log.
         *  - `indent`: Cause subsequent log statements to be indented one step.
         *  - `outdent`: Cause this and following statements to be one step less indented.
         * @markdown
         */
        log :
            //<debug>
            log ||
            //</debug>
            Ext.emptyFn,

        /**
         * Partitions the set into two sets: a true set and a false set.
         * Example:
         * Example2:
         *

// Example 1:
Ext.partition([true, false, true, true, false]); // [[true, true, true], [false, false]]

// Example 2:
Ext.partition(
    Ext.query("p"),
    function(val){
        return val.className == "class1"
    }
);
// true are those paragraph elements with a className of "class1",
// false set are those that do not have that className.
         *

         * @param {Array/NodeList} arr The array to partition
         * @param {Function} truth (optional) a function to determine truth.  If this is omitted the element
         * itself must be able to be evaluated for its truthfulness.
         * @return {Array} [array of truish values, array of falsy values]
         * @deprecated 4.0.0 Will be removed in the next major version
         */
        partition : function(arr, truth){
            var ret = [[],[]];
            Ext.each(arr, function(v, i, a) {
                ret[ (truth && truth(v, i, a)) || (!truth && v) ? 0 : 1].push(v);
            });
            return ret;
        },

        /**
         * Invokes a method on each item in an Array.
         *

// Example:
Ext.invoke(Ext.query("p"), "getAttribute", "id");
// [el1.getAttribute("id"), el2.getAttribute("id"), ..., elN.getAttribute("id")]
         *

         * @param {Array/NodeList} arr The Array of items to invoke the method on.
         * @param {String} methodName The method name to invoke.
         * @param {Object...} args Arguments to send into the method invocation.
         * @return {Array} The results of invoking the method on each item in the array.
         * @deprecated 4.0.0 Will be removed in the next major version
         */
        invoke : function(arr, methodName){
            var ret = [],
                args = Array.prototype.slice.call(arguments, 2);
            Ext.each(arr, function(v,i) {
                if (v && typeof v[methodName] == 'function') {
                    ret.push(v[methodName].apply(v, args));
                } else {
                    ret.push(undefined);
                }
            });
            return ret;
        },

        /**
         *
Zips N sets together.

         *

// Example 1:
Ext.zip([1,2,3],[4,5,6]); // [[1,4],[2,5],[3,6]]
// Example 2:
Ext.zip(
    [ "+", "-", "+"],
    [  12,  10,  22],
    [  43,  15,  96],
    function(a, b, c){
        return "$" + a + "" + b + "." + c
    }
); // ["$+12.43", "$-10.15", "$+22.96"]
         *

         * @param {Array/NodeList...} arr This argument may be repeated. Array(s) to contribute values.
         * @param {Function} zipper (optional) The last item in the argument list. This will drive how the items are zipped together.
         * @return {Array} The zipped set.
         * @deprecated 4.0.0 Will be removed in the next major version
         */
        zip : function(){
            var parts = Ext.partition(arguments, function( val ){ return typeof val != 'function'; }),
                arrs = parts[0],
                fn = parts[1][0],
                len = Ext.max(Ext.pluck(arrs, "length")),
                ret = [];

            for (var i = 0; i < len; i++) {
                ret[i] = [];
                if(fn){
                    ret[i] = fn.apply(fn, Ext.pluck(arrs, i));
                }else{
                    for (var j = 0, aLen = arrs.length; j < aLen; j++){
                        ret[i].push( arrs[j][i] );
                    }
                }
            }
            return ret;
        },

        /**
         * Turns an array into a sentence, joined by a specified connector - e.g.:
         * Ext.toSentence(['Adama', 'Tigh', 'Roslin']); //'Adama, Tigh and Roslin'
         * Ext.toSentence(['Adama', 'Tigh', 'Roslin'], 'or'); //'Adama, Tigh or Roslin'
         * @param {String[]} items The array to create a sentence from
         * @param {String} connector The string to use to connect the last two words. Usually 'and' or 'or' - defaults to 'and'.
         * @return {String} The sentence string
         * @deprecated 4.0.0 Will be removed in the next major version
         */
        toSentence: function(items, connector) {
            var length = items.length;

            if (length <= 1) {
                return items[0];
            } else {
                var head = items.slice(0, length - 1),
                    tail = items[length - 1];

                return Ext.util.Format.format("{0} {1} {2}", head.join(", "), connector || 'and', tail);
            }
        },

        /**
         * By default, Ext intelligently decides whether floating elements should be shimmed. If you are using flash,
         * you may want to set this to true.
         * @type Boolean
         */
        useShims: isIE6
    });
})();

/**
 * Loads Ext.app.Application class and starts it up with given configuration after the page is ready.
 *
 * See Ext.app.Application for details.
 *
 * @param {Object} config
 */
Ext.application = function(config) {
    Ext.require('Ext.app.Application');

    Ext.onReady(function() {
        Ext.create('Ext.app.Application', config);
    });
};

redpajama_set_name: RedPajamaGithub


Russia has begun allowing some ships to enter Ukrainian ports on the Sea of Azov in what could signal an easing of tensions in the flashpoint area.
Ukraine has accused Moscow of blocking merchant vessels from entering and leaving the ports.
According to Ukraine's Infrastructure Minister Volodymyr Omelyan, the Berdyansk and Mariupol Ports have been partially unblocked.
India and the UAE signed two agreements, including one on currency swap, as External Affairs Minister Sushma Swaraj held exhaustive discussions with her counterpart Abdullah bin Zayed to step up bilateral cooperation in areas like security, defence, counter-terrorism, trade and energy.
B. K. Birla group company Kesoram Industries Ltd. (KIL) will de-merge its tyre business into a separate company.
Post-merger, the resulting company, Birla Tyres Ltd. will be listed on the BSE and the NSE.
KIL is now engaged in the manufacture of cement (Birla Shakti brand) and automotive tyres and tubes (Birla Tyres brand).
Private sector lender Yes Bank's wholly-owned subsidiary 'Yes Asset Management' had received SEBI's approval to launch two mutual fund schemes.
Yes Asset Management (India) is the latest Indian company to enter the mutual fund segment. The asset management company will launch two schemes, Yes Liquid Fund and Yes Ultra Short Term Fund.
As per reports, a woman in Brazil who received a womb transplanted from a deceased donor has given birth to a baby girl in the first successful case of its kind.
It comes after 10 previously known cases of uterus transplants from deceased donors, in the United States, the Czech Republic and Turkey, failed to produce a live birth.
Dani Ejzenberg, a doctor at Brazil's Sao Paulo University hospital who led the research, said that the transplant carried out in September 2016 when the recipient was 32, shows the technique is feasible and could offer women with uterine infertility access to a larger pool of potential donors.
India's heaviest satellite GSAT 11 was successfully launched by the European commercial launch provider Arianespace from Kourou space centre, French Guiana.
GSAT 11 is an advanced communication satellite. It is the largest and heaviest satellite built by ISRO. It will fulfil most needs of providing broadband connectivity to rural and inaccessible gram panchayats under the "BharatNet project."
The satellite is the third of the four satellites that will give high-speed broadband connectivity to all parts of India, bridging the rural and urban divide. Two satellites, the GSAT 19 and 29, have already been launched and the fourth GSAT 20 will be launched later next year.
Scientists have discovered a cache over 100 new exoplanets using data from NASA's Kepler Space telescope as well as ground-based observatories.
The diverse planets are expected to play a large role in developing the research field of exoplanets and life in the universe.
Exoplanets, which revolve around stars other than the sun, have been actively researched in recent years.
Former India opener Gautam Gambhir announced his retirement from all forms of cricket.
In a career that spanned 58 Tests, 147 ODIs and 37 T20 internationals for the Indian cricket team, Gambhir went on to win two global titles.
He was the top scorer for India in both the 2007 ICC WT20 final as well as the 2011 ICC World Cup final.
Gambhir is the only Indian and one of four international cricketers to have scored hundreds in five consecutive Test matches.
He was conferred the Arjuna Award, India's second highest sporting award, in the year 2008 by the President of India.
In 2009, he was the number one ranked batsman in ICC Test rankings. The same year, he was the recipient of the ICC Test Player of the Year award.
India has decided to allow extension of business visa for up to 15 years and conversion of a regular visa into medical category in an emergency for a foreigner.
As per Union Home Secretary Rajiv Gauba, the number of e-visas issued has seen a tremendous growth during the last four years from 5.17 lakh in 2015 to 21 lakh till November 30 this year.
The government has rejected a long-standing demand of the armed forces for higher Military Service Pay (MSP) for around one lakh personnel including Junior Commissioned Officers.
The MSP was introduced to the services recognising their unique service conditions and hardships.
At present, the MSP has two categories, one for officers and another for JCOs and jawans.
Union Minister and Bharatiya Janata Party (BJP) leader Uma Bharti has declared that she will not contest the 2019 Lok Sabha elections.
The former Madhya Pradesh leader, however, clarified that she would not retire from active politics.
She said that she would take a break from active politics to focus on the issue of Ram temple and cleanliness of river Ganga.
Navy Day in India is celebrated on 4th December every year to celebrate the achievements and role of the naval force to the country.
The Indian Navy is the marine branch of the Indian Armed Forces and is led by the President of India as Commander-in-Chief.
The Maratha Emperor, Chhatarpati Shivaji Bhosle of the 17th century is considered as "Father of the Indian Navy".
Navy Day in India is celebrated to commemorate the courageous attack on the Karachi harbour during the Indo-Pakistan war (on 4th December 1971) by the Indian Naval Missile boats as well as to reverence all the martyrs of that war.
It is celebrated using a particular theme (like "Safe Seas and Secure Coasts for a strong Nation") of the year for making it more powerful and potent.
The first book known to be written about a stock exchange went on sale at Sotheby's Rare Books and Manuscripts online auction, carrying an estimate of $200,000 to $300,000.
Written by Joseph Penso de la Vega in 1688, the Confusion of Confusions is a primer for the Amsterdam stock exchange, which was set up by the Dutch East India Company in 1602.
The book remained relatively obscure until the late 19th century, when a series of economists, first German, then Dutch, began to draw on the text; the first translation appeared in English in 1959. Today a copy is available in hardcover for less than $30.


The College Campus Store is established to serve the needs of the College community for required and supplemental textbooks and supplies. In addition, the Campus Store seeks to serve the College community with a complete line of school supplies and a variety of convenience items including school rings, paperbacks, crested items, soft goods, etc.
Visit the Campus Bookstore page for more information.
There is a Campus Store to serve South Campus and Chatham Campus, in person and online.
St. Clair College provides students and staff with a full range of food and beverage options. For more information, be sure to check out the Food and Beverage Services page.
LOCKERS ARE NOW RENTED ONLINE THROUGH SELF-SERVICE!
NO Lines... NO Cash... NO PROBLEM!
Select the semesters that you would like to rent the assigned locker* & click "Confirm Locker"
For a full explanation of locker services and policies, please download our Locker Information Brochure (PDF).
Traffic and Parking enforcement rules and regulations for St. Clair College are authorized by the President of St. Clair College and the Board of Governors.
All students, staff and visitors are required to pay for parking at St. Clair College's South and Chatham Campus.
Click to view all the information on Parking Services.
Security is located in the Main Lobby at all St. Clair College campuses.
Emergencies shall be reported to Security at all Windsor campuses (South, St. Clair College Centre for the Arts and MediaPlex) via 4911.
Emergencies shall be reported to 911 at the Chatham campus, with a follow up to Security at 3911.
Personal articles are the responsibility of the owner. College loaned items are the responsibility of the signing person and are subject to replacement value assessment if misplaced.


fag nn3021k/w33 ntn nn3021k nachi nn3021k nachi nn3021 nsk nn3021k koyo nn3021k koyo nn3021 ntn nn3021 nsk nn3021 If you have just landed here, this product NSK NN3021 Cylindrical Roller Bearings 105 mm x 160 mm x 41mm is offered online by OKB Industrial Co.,Ltd.
7320DF Koyo NUP218EM NSK NN4921 NTN 7320BDF Koyo NN3021 NTN 7320CDF Koyo NN4922 NTN NJ414 NSK 7920CDT Koyo We cooperate with UPS,TNT,FEDEX,EMS,DHL,etc.They guarantee to meet your needs in terms of time and money,even if you need your NN3021 bearing tomorrow morning (aka overnight or next day air) on your desk, 2, 3 days or more.Note to international customers, YES, we ship worldwide.
KOYO NN3021 Double Row Cylindrical Roller Bearings Koyo is a well-known manufacturer of Cylindrical Roller Bearings .Cylindrical roller bearings are used in a variety of applications. Examples include mining, petroleum production, power generation, power transmission, cement processing, aggregate crushing, and metal recycling.
cheap NTN NN3021 bearing hot sales Combined with the cheap NTN NN3021 bearing hot sales , cheap NTN NN3021 bearing hot sales has the most complete product outline in rolling bearing industry .cheap NTN NN3021 bearing hot sales provide customers with a series of comprehensive and perfect service and technical support.
Bearing a is a leading online supplier and distributor of over 1,000,000 bearings and ancillary products, from some of the world's most trusted brands including SKF, FAG, NTN, NSK, Timken, INA, IKO cheap NSK NN3021 bearings for sale.
We cooperate with UPS,TNT,FEDEX,EMS,DHL,etc.They guarantee to meet your needs in terms of time and money,even if you need your NN3021 bearing tomorrow morning (aka overnight or next day air) on your desk, 2, 3 days or more.Note to international customers, YES, we ship worldwide.
Roller bearing NN3021-KOYO , dim : Ø int. 105 x Ø ext. 160 x th. 41 mm. SAME DAY SHIPPING. The specialist at your service for over 10 years.
nn3021 We export high quantities NTN NN3021 Bearing and relative products, we have huge stocks for NTN NN3021 Bearing and relative items, we supply high quality NTN NN3021 Bearing with reasonbable price or we produce the bearings along with the technical data or relative drawings, It's priority to us to supply best service to our clients.
Wholesale brand KOYO NN3021 Bearing Spherical Roller Bearings, cheap KOYO NN3021 Bearing price agent, sizes, supplier; Supplies KOYO NN3021 Bearing ball bearings trader; We are the professional exporter and distributor of KOYO NN3021 Bearing dealer, factory, cost.


Passenger traffic reached 79,704 at Sanya Phoenix International Airport on Sunday and Monday, the first two days of the 40-day Spring Festival travel rush.
The railway station and airport in Sanya are seeing a passenger upsurge after the 40-day 2012 Spring Festival travel rush kicked off on Sunday, reports hinews.cn.
Passenger traffic reached 79,704 at Sanya Phoenix International Airport on Sunday and Monday, with 594 flights taking off and landing at the airport.
The first travel peak of the airport is expected to occur on 22nd Jan, the day before the 2012 Chinese Lunar New Year. The second travel peak is expected on 27th Jan and last till 4th Feb.
According to the Sanya Railway Station, the station is expected to receive 12,000 daily passengers during the travel rush period, up 20% compared to last year's. The travel peak is expected to occur on 19th and 20th Jan.


text:
/*
	This is Arduino library for controlling seven-segments indicator blocks and LED matrixes based on MAX7219. Perhaps it works with other devices.

	1.0

	http://github.com/Finesse/Segment7Display
*/

#ifndef Segment7Display_h
#define Segment7Display_h

#if defined(ARDUINO) && ARDUINO >= 100
  #include <Arduino.h>
#else
  #include <WProgram.h>
#endif

class Segment7Display {
	public:

		/*
			Static constants used in to point text alignment in methods printString and printFloat.
		*/
		// Text string alignes to left side. Excess symbols are cut from right side.
		static const byte ALIGN_LEFT = 0;
		// Text string alignes to right side. Excess symbols are cut from left side.
		static const byte ALIGN_RIGHT = 1;

		/*
 			Constructor

			Parameters:
				int pData — Number of data pin (DIN)
				int pClock — Number of clock pin (CLK)
				int pStrobe — Number of strobing pin (CS)
		*/
		Segment7Display(int pData, int pClock, int pStrobe);

		/*
			Reset all chip parameters to normal state. This method should be called in or after executing of Arduino setup function. Otherwise there is great possibility of indicators incorrect behaviour.

			Parameters:
				float brightness — LEDs brightness. From 0 to 1. Default: maximum.
		*/
		void reset(float brightness = 1);

		/*
			Turns on/off segments test mode. In test mode each LED legment is turned on with maximum brightness.

			Parameters:
				boolean on — true — on, false — off
		*/
		void setTest(boolean on);

		/*
			Sets amount of used indicators (digits).

			Parameters:
				amount — Amount of indicators. From 1 (only right one) to 8 (all).
		*/
		void setDigitsAmount(int amount);

		/*
			Turns on/off chip decode mode.

			In decode mode symbols numbers are transfered (not LEDs state). Number is set by 4 right bits. Symbols are: `0 1 2 3 4 5 6 7 8 9 - E H L P (empty)`. 8th right bit sets state of decimal point.

			With decode mode off LEDs state is set by 8 right bits. Each bit matches it's segment (LED). Segments are set in this order: DP A B C D E F G.

			Parameters:
				boolean on — true — on, false — off
		*/
		void setDecode(boolean on);

		/*
			Turns on/off sleep mode.

			Parameters:
				boolean on — true — on, false — off
		*/
		void setShutdown(boolean on);

		/*
			Set LEDs brightness.

			Parameters:
				float brightness — LEDs brightness. From 0 to 1.
		*/
		void setBrightness(float brightness);

		/*
			Turns all LEDs off.
		*/
		void clear();

		/*
			Sets indicator state. Which segments (LEDs) are turned on depends on whether decode mode is on.

			With decode mode off LEDs state is set by bits. Each bit matches it's segment (LED). Segments are set in this order: DP A B C D E F G.

			In decode mode symbols numbers are transfered (not LEDs state). Number is set by 4 right bits. Symbols are: `0 1 2 3 4 5 6 7 8 9 - E H L P (empty)`. 8th right bit sets state of decimal point.

			Parameters:
				byte digit — Indicator number. From 0 (right) to 7 (left).
				byte data — State. With decode mode off 0 means clear.
		*/
		void printByte(byte digit, byte data);

		/*
			Prints symbol in segment. Only symbols listed in char2byte method documentation are displayed, other are replaced by space. On exetuting of this method decode mode is turned off.

			Parameters:
				byte digit — Indicator number. From 0 (right) to 7 (left).
				char symbol — Symbol to print
				boolean decimalPoint — Whether to print decimal point. Default: no.
		*/
		void printChar(byte digit, char symbol, boolean decimalPoint = false);

		/*
			Prints text string. Only symbols listed in char2byte method documentation are displayed, other are replaced by space. On exetuting of this method decode mode is turned off.

			Parameters:
				String str — String to print
				byte align — String align. Possible variants are listen in static constants ALIGN_* of this class. Default: right side.
				boolean clearExcess — Whether to clear indicators not participating in printing of current text string. Default: yes.
				int offset — Offset from alinging side. Measures in amount of indicators. Default: no offset.
				int maxLength — Maximum text string length. If below 0 there is no constraint. Default: no constraint.
		*/
		void printString(String str, byte align = ALIGN_RIGHT, boolean clearExcess = true, int offset = 0, int maxLength = -1);

		/*
			Prints float number. On exetuting of this method decode mode is turned off.

			Parameters:
				float num — Number to print
				unsigned char precision — Amount of digits after decimal point. Negative values are allowed. Default: 2.
				boolean E — true — print in exponent form; false — print in usual form. Default: usual.
				byte align — String align. Possible variants are listen in static constants ALIGN_* of this class. Default: right side.
				boolean clearExcess — Whether to clear indicators not participating in printing of current text string. Default: yes.
				int offset — Offset from alinging side. Measures in amount of indicators. Default: no offset.
				int maxLength — Maximum text string length. If below 0 there is no constraint. Default: no constraint.
		*/
		void printFloat(float num, unsigned char precision = 2, boolean E = false, byte align = ALIGN_RIGHT, boolean clearExcess = true, int offset = 0, int maxLength = -1);

	protected:
		/*
			Переменные для запоминания пинов. Какие за что отвечают, смотрите в описании Segment7Display.
		*/
		/*
			Pins numbers. What is responsible for what watch in constructor documentation.
		*/
		int pinData, pinClock, pinStrobe;

		// Whether decode mod is on
		boolean decodeModeOn;

		// Table of ASCII symbols matching to 7-segments indicator states
		static const byte charTable[];

		/*
			Prepares package for sending to chip.

			Parameters:
				byte command — Code of command (only 4 right bits are used).
				byte data — Concomitating data.

			Returns: (word) Prepared package.
		*/
		static word preparePackage(byte command, byte data);

		/*
			Sends packages to chip.

			Parameters:
				package — Sended package.
		*/
		void sendPackage(word package);

		/*
			Proportionally converts number (value) from one range (fromMin .. fromMax) to other range (toMin .. toMax). Like Arduino map function but float-firendly.
		*/
		static int mapNormal(float value, int fromMin, int fromMax, int toMin, int toMax);

		/*
			Encodes symbol to indicator state byte. Any symbol can be passed but only those will by encoded: 0 1 2 3 4 5 6 7 8 9 A b C c d E F G H h I i J j L l n O o p q r S t U u Y y Z . -. Letters that are not in that list but available in other case are replaced by other case. Space symbol turns indicator off.

			Parameters:
				char symbol — Symbol to encode.
				boolean decimalPoint — Whether to add decimal point. Default: no.

			Returns: (byte) Encoded byte.
		*/
		static byte char2byte(char symbol, boolean decimalPoint = false);

		/*
			Encodes text string to bytes array for printing on 7-segments indicators. Only symbols listed in char2byte method documentation are displayed, other are replaced by space.

			Parameters:
				String str — String to encode.
				byte* output — Pointer to output buffer for encoded bytes.
				int maxLength — Maximum text string length. If below 0 there is no constraint.
				byte align — String align. Possible variants are listen in static constants ALIGN_* of this class. Default: right side.

			Returns: (unsigned int) Amount of encoded bytes written to output buffer.
		*/
		static unsigned int string2bytes(String str, byte* output, int maxLength, byte align = ALIGN_RIGHT);
};

#endif


text:
Told through the perspective of an underground rapper named Reese, Max Bemis' gripping story explores a scenario in which we watch modern society gradually evolve (or is it devolve?) into an evil empire.
comiXology Unlimited15
Collected Editions3
Issues12
From the mind of SAY ANYTHING frontman Max Bemis comes POLARITY, a manic-depressive spin on the superhero genre. Timothy Woods is a bipolar artist stuck in the world of hipsters, meaningless sex, and vain art -- better known as Brooklyn. But after he survives a near fatal car accident, Timothy discovers that his mental instability is more than just a disorder, and that his bipolar medication hasn'
Oh Killstrike
What's to Love: Say Anything frontman Max Bemis writes a love letter to 1990s superhero comics in this tongue-in-cheek homage to the era, featuring the art stylings of Logan Faerber-reminiscent of works by Chip Zdarsky and Jeff Lemire. Much like Polarity, Oh, Killstrike is very personal to Bemis: It's about a new dad who loves comics from his youth. Part twisted buddy comedy, part profound coming-
Waking up in a fleabag motel with bandaged arms and a revolver on his desk, Sam doesn't remember a thing - not how he got here, where here is, or who he is. But the armed men knocking on his door do and Sam will have to use every trick from his forgotten repertoire to outrun and outsmart his way through a hardboiled wonderland of gang wars, femme fatales and big secrets.
WHY BOOM! LOVES IT: You know all those conspiracy theories you hear about? Like how the Jonestown Massacre was a failed MKULTRA experiment by the government, or how Lee Harvey Oswald was trained and brainwashed to be an assassin? Well, what if some of those were true? DEEP STATE is a dream (nightmare?) come true for conspiracy theory nuts like us here at BOOM! WHY YOU'LL LOVE IT: With LUTHER S

redpajama_set_name: RedPajamaCommonCrawl


text:
coronavirus, music, coronavirus
In a bid to contain COVID-19 pubs, clubs and restaurants were advised to close by the PM on Sunday night leaving the music industry decimated. The announcement has forced the shut down of the entire Peel live entertainment industry. Bleeding Ear Music and Special Events manager Dave Feenstra said in just one week every Peel gig has been cancelled. "It is a bit of panic stations here at the moment. "I had bookings for the whole year ahead and now there is not a single gig available." The music industry is scrambling to find other means to make an income. "A lot of artists are counted as small sole traders rather than employees so unfortunately they are falling through the gaps. "We are now looking at ways to live stream gigs and getting fans to pay per view. "That is pretty much the only way our artists are going to make money now," Mr Feenstra said. In a bid to help the Peel music industry the City of Mandurah has offered 50 per cent of the Crab Fest performance fee to the artists. The City of Mandurah says it is working on other means to keep the Peel arts community afloat.
/images/transform/v1/crop/frm/claire.sadler/96545786-2d76-4c2b-9e2a-924f2b6cf31e.jpg/r34_2_913_499_w1200_h678_fmax.jpg
March 23 2020 - 8:47AM
Coronavirus leaves Peel music industry devastated
Claire Sadler
Peel music industry completely shut down following the closure of pubs, clubs and restaurants. Photo: Supplied
In a bid to contain COVID-19 pubs, clubs and restaurants were advised to close by the PM on Sunday night leaving the music industry decimated.
The announcement has forced the shut down of the entire Peel live entertainment industry.
I had bookings for the whole year ahead and now there is not a single gig available.
Bleeding Ear Music and Special Events manager Dave Feenstra
Bleeding Ear Music and Special Events manager Dave Feenstra said in just one week every Peel gig has been cancelled.
"It is a bit of panic stations here at the moment.
"I had bookings for the whole year ahead and now there is not a single gig available."
The music industry is scrambling to find other means to make an income.
"A lot of artists are counted as small sole traders rather than employees so unfortunately they are falling through the gaps.
"We are now looking at ways to live stream gigs and getting fans to pay per view.
"That is pretty much the only way our artists are going to make money now," Mr Feenstra said.
In a bid to help the Peel music industry the City of Mandurah has offered 50 per cent of the Crab Fest performance fee to the artists.
The City of Mandurah says it is working on other means to keep the Peel arts community afloat.


Saw the abstract of a new security paper via Scheier.
In short - strong passwords do not really do a better job of security accounts as you might think. This is because they do not do anything to prevent phishing and related social network attacks (not to mention good ol' sniffing of the network for passwords sent in the clear). And that the 3-strikes rule on most sites is sufficiently good enough security to prevent brute force attacks (I've long argued that most attacks do not go directly against the password database, but through the app and this seems to prove my hypothesis).
If a larger credential space is needed it appears better to increase the strength of the user ID's rather than the passwords.
Oracle Identity and Access Management products can help you implement both passwords as well as increase the strength of identities via Oracle Adaptive Access Manager. With the improved reporting in 11g Fusion Middleware it is also possible to track all password requests from the application they were entered through the directory services layer. Thus customers can be more aware of when password failures occur and why.
Thus can help create policies to help improve their security.
Because as they used to say on the old G.I. Joe cartoon - "knowledge is half of the battle".


We'll do this in sections (maybe) 'cuz I tend to let my ADD have creative control. Mostly because I'm unaware until I laugh out loud at myself. Ha-ha!
OMG that baby is SO cute! And has more real teeth than I do… (LOL) Oh wait, that's my cue.
No guilt on me – I blame my health!


We can print in one-, and two- color on a variety of paper sizes and stocks, including cardstock and all sizes of envelopes. We can print purchase orders, invoices, estimate sheets, work orders, labels, carbonless multi-part forms, business cards, letterhead, newsletters, brochures, posters, and anything else you may need. Just bring us your ideas, originals, or camera-ready art, and we can print your document.


Here you can download templates for IDEA League PowerPoints, promotion material and merchandise to adapt for your own IDEA League projects.
If you cannot find a design template suitable for your project or are experiencing trouble adepting the templates, please contact the IDEA League Office at office@idealeague.org to discuss further possibilities.
Please note that some documents require Adobe InDesign or Adobe Photoshop to open.
Please contact the IDEA League Office for assistance with Doctoral School promotion material.


You've probably seen the viral videos. You know the ones. A veterinarian uses forceps to gently pull a wriggling critter from under the skin of a kitten. To a lay person, the sight is both enthralling and grotesque. To a veterinarian, it is wholly gratifying. What did the veterinarian actually remove? A larvae of Cuterebra spp. that causes cuterebriasis. This week's post sheds more light on this relatively common infestation. Happy reading!
Cuterebriasis – What is it?
infected when they sniff in and around rabbit and rodent burrows.
Cuterebriasis – What does it look like?
vision loss, seizures, body temperature fluctuations, and paralysis – may result.
migrate through the upper respiratory tract.
Cuterebriasis – How is it diagnosed?
Cuterebriasis – How is it treated?
whose central nervous systems are involved have poorer outcomes.
so effective therapy can be initiated quickly.


Lakeview rarely available 4 bedrooms 3 full bathrooms duplex down condo that lives like a single family house! Walk in to this recently remodeled light filled home with 10 ft ceilings on both levels! Kitchen boasts 42'' white cabinets, marble backsplash, generous counter space, stainless steel appliances & wine rack. Entertain in this awesome living room space with natural stone fireplace & true front balcony listening to Pearl Jam or the game day sounds from historic Wrigley Field. Master bedroom has his & hers closet along with Juliette balcony. Masterbath redone with spa-like finishes that has a whirlpool tub & separate shower. Lower level has new carpeting throughout, massive family room leading out to huge private patio. 3rd bath remodeled w/modern tiles. RARE 2 parking spaces (1 garage & 1 exterior). In unit washer/dryer. Low taxes. Large additional storage space. Live-in & be part of Chicago's most vibrant and evolving neighborhood featuring the family friendly Gallagher Way.


text:
Shuttle Astronauts Get Extra Sleep After Late Work Night in Orbit
By Denise Chow published 27 February 11
NASA's space shuttle Discovery is shown docked to the International Space Station shortly after arriving on Feb. 26, 2011. The gold spacecraft at the bottom of this view is Japan's HTV-2 spacecraft. (Image credit: NASA TV)
This story was updated at 12:45 p.m. ET.
HOUSTON – Astronauts on the shuttle Discovery have a busy day of unpacking ahead as they dig into a big delivery job at the International Space Station. But first, they got a chance to catch up on their sleep.
Discovery arrived at the space station yesterday (Feb. 26) to kick off a weeklong stay at the orbiting laboratory. But their entry into the space station was delayed, pushing them behind schedule for another chore: installing a big spare parts platform they'll use later in their mission.
So the six shuttle astronauts and six station crewmembers opted to work late to finish the complex robotic arm operations needed to move the cargo platform from Discovery's cargo bay to a point the station's backbone-like truss where astronauts can reach it during the mission's two spacewalks.
Because of the delays after docking, the astronauts ran more than an hour behind schedule with the chore. Mission Control gave the two space crews an extra half hour of sleep to make up for the late work night. [Photos: Space Shuttle Discovery's Final Mission]
"The crew elected to stay up about an hour and a half or so late into their work day to finish up," said NASA's flight director David Korth during a briefing today. "We let the crew sleep in this morning, 30 minutes or so, to make up for the time spent last night to get that accomplished."
The astronauts were roused from their slumber at 7:23 a.m. EST (1223 GMT) this morning. Discovery is delivering supplies, spare parts, an extra storage module and a dextrous humanoid robot assistant named Robonaut 2 to the space station.
Checking for damage
Meanwhile, engineers on the ground are evaluating 302 photos of Discovery's backside taken by astronauts onboard the station before the orbiter docked yesterday.
The photos show high-resolution imagery of the shuttle's heat shield tiles that must be analyzed to make sure the tiles didn't sustain damage from falling debris during Discovery's liftoff.
The images are still being studied, but mission managers think the heat shield is in good shape and no further inspection will be needed.
"Everything is going really well with the orbiter," Korth said. "The orbiter crew is doing well. From a station side, all things are nominal."
Time to unpack
Today, Discovery's six shuttle astronauts and the station's own six-person crew will spend most of their time transferring cargo and supplies from the shuttle to the orbiting laboratory.
The day's chores will primarily consist of unpacking, moving, and allowing the crew time to get situated on the station, shuttle flight director Bryan Lunney told reporters yesterday.
Two of the spaceflyers, mission specialists Steve Bowen and Alvin Drew, will also spend part of today reviewing procedures for their first of two spacewalks on Monday (Feb. 28).
Bowen was a late-addition to Discovery's crew. He replaced astronaut Tim Kopra as the mission's chief spacewalker following a bicycle accident that sidelined Kopra.
Discovery's 11-day mission, the STS-133 spaceflight, is Discovery's final flight before NASA retires its space shuttle program later this year.
Only two other shuttle flights remain after this one, so NASA wants to load the space station up with as many spare parts as possible to prepare it for its looming life without the shuttle fleet's support.
You can follow SPACE.com Staff Writer Denise Chow on Twitter @denisechow as she covers Discovery's final space voyage from NASA's Johnson Space Center in Houston. Visit SPACE.com for complete coverage of Discovery's final mission STS-133.
Denise Chow
Denise was an intern at the New York Daily News and GQ magazine. She has a masters degree in journalism from New York University and a bachelor's degree from the University of Toronto.
NASA's gamma-ray observatory is in safe mode after a possible wheel failure
The Nearest Stars to Earth (Infographic)
NASA's James Webb Space Telescope mission: Live updates
Bad weather delays SpaceX Dragon's departure from space station to Saturday
Astronaut spots ash clouds from Tonga volcano eruption from space (photos)


text:
Royal commission quizzes AustralianSuper on Pacific Hydro
8 August 2018By Florence Chong
Australia's royal commission into its financial services industry today quizzed AustralianSuper on its investment in a renewable energy company, which had been one of the superannuation fund's single largest infrastructure investments.
In a surprise move away from its previous focus on fees and misconduct, the royal commission turned its focus to Pacific Hydro, a renewable energy company owned by AustralianSuper and other superannuation funds.
The company, which has operations in Australia, Chile and Brazil, had to be bailed out by investors in 2014.
The AUD140bn (€89.4bn) AustralianSuper was the first industry superannuation fund to appear before Royal Commissioner Kenneth Hayne, who had called for internal reports on Pacific Hydro ahead of meeting.
The questions were put to Jason Peasley, head of mid-risk assets at AustralianSuper, who oversaw infrastructure investments from 2011 to 2016.
He said the investment in Pacific Hydro – which was made through the Australian Infrastructure Fund (AIF), managed by IFM Investors – represented 3.55% of AustralianSuper's entire investment portfolio by the middle of 2013.
Counsel assisting the royal commissioner, Albert Dinelli, quizzed Peasley on concerns over the deteriorating performance of Pacific Hydro from 2014, when returns had gone from reasonable to "mediocre".
A report by AustralianSuper's CEO Ian Silk at the time said that, without shareholders' support and a cash injection of AUD200m, Pacific Hydro was technically insolvent.
The inquiry was told the situation at Pacific Hydro came to light following an IFM Investors review of the company.
Peasley said investors in the energy company also had exposure through a subordinated note facility.
He told Dinelli that the concern was over the size of both the current and prospective risk profile and return volatility associated with refinancing of subordinated notes and a restructuring proposal for the business.
"These factors will materially alter the way in which our investment in Pacific Hydro is to be held," he said.
Peasley said the fund had several conversations with IFM Investors to raise its concerns about the fund's performance.
"We don't necessarily sit passively if we have a particular view," he said.
"We had a view that we felt reflected the best interest of our members and we felt a duty to engage with the manager and convey those views accordingly in an attempt to seek some sense of alignment or outcome that we felt was in the best interests of our fund members."
Peasley said the subordinated note refinancing went ahead, but with other providers, and the ownership remained within AIF.
He explained that the investment had devalued because of a deteriorated outlook for electricity prices and issues with output.
He said there were also a number of external factors related to the value of renewable energy certificates which these assets generated and were of value and could be sold on the market.
"There were also changes in Chile to tax policy that had adverse impacts on the owners," he said.
Pacific Hydro had required a funding support package, including a AUD200m cash injection.
The commission heard that AIF successfully disposed of Pacific Hydro in 2016 on terms that delivered pre-tax proceeds to the fund of AUD2.23 billion.
Ian Silk, the CEO of AustralianSuper, is due to take the stand tomorrow as the royal commission continues its fifth round, focusing on Australia's AUD2.6trn superannuation industry.
AustralianSuper,
IFM Investors


We offer a choice of over 81 golfcourses spread out thru Czech Republic. Book green fees and tee times in REAL TIME and get your confirmations immediately.
The course is perfectly nestled into the landscape, its quality after only a year at a very good level and steadily improving.
Only last year the second eighteen hole course in Prague opened. From the white tees, the course measures 6.190 meters. We also offer a driving range, a putting & chipping area. The facility is also equipped with two indoor simulators AboutGolf.
The Golf Course Janov is a natural type of 9-hole course with outstanding scenery surrounding sandstone walls. Campus course directly bordering the National Park Czech Switzerland and is located about four kilometers from the border to Germany HŘENSKO - Schmilka.
Not far away from the Buchlov castle, close to Uherske Hradiste a new golf course has been found on the banks of Ostrozska Nova Ves' ponds. The resort consists of 9-hole golf course, driving range and indoor.
Vela Karlovice golf course is a short public nine in the picturesque countryside. Great Karlovice boasts the title of the second largest municipality in the Czech Republic.
This nine-hole course of wild-type, although situated on the territory of the county town of Zlín, , the course is very embedded in the landscape, is among the shortest, but that does not mean it's easy.
The Marianske Lazne Golf Club course may serve as an example of Scottish and Irish golf architecture from the end of 19th century. The course lies on an upland plain 787 meters above sea level, built under the governance of Scottish professional Duig. It was opened in 1905. Therefore it is the oldest course on our territory.
The original golf club and its 9 holes course were established in 1904. The current 18 holes championship course was built in 1933. This golf course is one of the oldest and the most beautiful in Central Europe, located in the magnificent setting of the "Krusne hory" mountain range, only 120 km from Prague.
The project documentation was drawn up for this championship course by the world-famous Gary Player Design Company.
The 18-hole course with a par of 72 is 6288 m long. The area of the greens is from 500 m to 640 square meters. The whole course (fairways - greens - tees) is irrigated by an automatic irrigation system.
The 18-hole Radecky course offers a fun - and fair - test of your game. There are a few eye-opening holes but for the most part it is a rather forgiving track. The resort was opened first time in the year 2002. It is a slightly hilly and parkland / meadowland course. The courses are situated in a landscape with slight slopes and surrounded by the forest. A characteristic feature is represented especially by the great, modelled greens.


text:
Ongoing coverage of Trump impeachment trial
Nebraska prisons seek crackdown on out-of-control contraband
by: GRANT SCHULTE, Associated Press
Posted: Oct 27, 2019 / 11:57 AM EDT / Updated: Oct 27, 2019 / 05:13 PM EDT
This Friday, Oct. 25, 2019, photo shows a guard tower at the Nebraska State Penitentiary, in Lincoln, Neb. Nebraska officials are making an aggressive new push to remove contraband from the state's largest prisons, but the task is more difficult than it seems. Nebraska's crackdown is the latest example of states trying to clamp down on drugs, weapons and cellphones. (AP Photo/Nati Harnik)
LINCOLN, Neb. (AP) — Authorities have declared war on contraband in Nebraska's largest prisons, repeatedly combing cells in the hunt for cellphones, drugs and weapons, but one top administrator admits the sweeps probably miss dangerous items and characterizes the cleanup as a near-impossible task.
Contraband in prison is nothing new, but experts say fighting the problem has become harder thanks to technology that facilitates smuggling, as well as persistent staffing shortages and a small number of correctional workers and visitors who go to extreme lengths to sneak illegal items inside.
"It's becoming more of a challenge," said Kevin Kempf, executive director of the Association of Correctional Administrators. "A prison is nothing more than a small city with razor wires and fences around it. You have staff and vendors going in and out all of the time and, unfortunately, when there's money involved, it's tough to prevent all contraband from getting in."
Spurred by a string of assaults on guards and an increase in synthetic drugs such as K2, which mimics the effects of marijuana, officials last month placed the Nebraska State Penitentiary on lockdown twice in one week. The surprise shakedowns yielded illegal drugs, shanks and cellphones, but prison officials say they probably didn't get everything. Another search last week by three dozen Nebraska National Guard members uncovered more drugs, homemade weapons and alcohol at the Lincoln Correctional Center, a prison for medium- and maximum-security inmates.
Nebraska Department of Correctional Services Director Scott Frakes said he asked the National Guard, Lincoln police and the Nebraska State Patrol to assist so the searches could be conducted without pulling correctional staffers from other prisons.
A small number of staffers and visitors are responsible for the contraband, including one visitor who hid drugs in the folds of his fat, Frakes said. Frakes said inmates and visitors constantly find creative ways to hide contraband. In his previous prison job in Washington, he said he encountered one inmate who concealed a 10-inch (25-centimeter) piece of sharpened metal in his rectum.
"I've seen the X-rays, and I shake my head," he said.
Earlier this year, a man was arrested for allegedly trying to fly a drone loaded with marijuana and tobacco over the Lincoln Correctional Center.
Cellphones have become so prevalent in prisons — and present such a large security risk — that lawmakers approved new criminal penalties in May to discourage smugglers. Demand behind bars has surged in recent years, with cellphones fetching prices of $500 to $1,000 each.
Nebraska prison officials confiscated more than 250 contraband phones last year. The state's inspector general for corrections described cellphones as a "significant safety concern" because inmates use them to coordinate gang activity and communicate with the outside world.
Kempf said many prison officials would like to use the kind of cellphone jamming technology that was tested in a South Carolina correctional facility in April, but current federal regulations keep them from adopting the technology. A bill pending in Congress seeks to allow prisons to use jammers, but it's opposed by the nation's cellphone service providers, which say the technology could inadvertently block service to people living close to prisons.
The Nebraska State Penitentiary presents the most problems because of the large number of inmates and its location in the middle of Lincoln.
"It's easy to get things in there," said Doug Koebernick, a state inspector general who serves as an independent watchdog over the corrections department.
Koebernick said prison staffing shortages leave many workers tired and less likely to thoroughly pat down visitors and fellow employees entering the prison. He said staff members have complained to him that searches aren't nearly thorough enough.
Frakes said the department is reviewing its search procedures and stressed that most staffers are doing their jobs correctly. But, he said, it's virtually impossible to catch everything. Every shift change brings 50 to 70 employees into the prison and searching each of them thoroughly could take two hours. Employees recognize and know each other, and assume their co-workers aren't doing anything illegal.
On Thursday, Frakes declared a staffing emergency in key prisons and the department unveiled plans to offer $10,000 hiring bonuses to try to address the staffing shortage.
The influx of contraband comes as no surprise to Jason Witmer, a former inmate at three Nebraska prisons who still interacts with prisoners through his work at a nonprofit group.
Witmer said he suspects most cellphones are smuggled inside by staff members, and prisoners want them because they "open up the world to you" at a time when Nebraska's prisons are imposing tighter restrictions on yard time and other privileges.
"It was always there, but I think it's escalating," said Witmer, who was released in 2016.
This article has been updated to correct comments attributed to Nebraska's corrections director about an inmate with a sharpened metal object hidden in a body cavity. A corrections department spokeswoman says Director Scott Frakes was referring to an experience from a previous job in Washington state, and that incident involved an inmate, not a visitor.
Follow Grant Schulte: https://twitter.com/GrantSchulte


text:
Q: push old record from database table to bottom of page and newest entry to top of the page
I want print on the browser, such that 1 remains on the bottom of the page, and the latest entries on top always.
Here is my code:
<?php
$delay=1;
$list= array();
$arr = array();
for($i=0;$i<500;$i++) {
    $arr[] = $i;
}
foreach($arr as $as) {
    $list[] = $as;
}
$sz = count($arr);
$arss = array_reverse($arr);
foreach($arss as $ar) {
    ?>
    <p style="display:none" data-id="<?=$ar?>" id="sort<?=$ar?>" >

   <?php
    echo $ar."
";
    ob_flush();
    flush();
    sleep($delay);
}
?>

redpajama_set_name: RedPajamaStackExchange


Leda and the Swan, after the lost original by Michelangelo, by Cornelis Bos (Flanders). Exact date unknown, prob. 1530-1550.
the name of he who owns me.
begging you to bite from it.
Just come again, my love.
of you pinning me down.
It's nothing but a disguise.
they're all I ever wanted.