From c3ba0404d8a9dc8be2ca7c64225988a4ef94f0e0 Mon Sep 17 00:00:00 2001 From: Mike Hill Date: Thu, 25 Sep 2014 14:42:45 -0500 Subject: [PATCH] Added Ext JS 5.0.1 compatible source and Architect 3.1 package --- .../CFQueryReader/.sencha/package/Boot.js | 1506 +++++++++++++++++ .../.sencha/package/Microloader.js | 244 +++ .../.sencha/package/bootstrap-impl.xml | 62 + .../.sencha/package/build-impl.xml | 361 ++++ .../.sencha/package/build.properties | 8 + .../.sencha/package/codegen.json | 118 ++ .../.sencha/package/defaults.properties | 216 +++ .../.sencha/package/find-cmd-impl.xml | 58 + .../.sencha/package/init-impl.xml | 266 +++ .../CFQueryReader/.sencha/package/js-impl.xml | 71 + .../CFQueryReader/.sencha/package/plugin.xml | 32 + .../.sencha/package/refresh-impl.xml | 11 + .../.sencha/package/resources-impl.xml | 32 + .../.sencha/package/sass-impl.xml | 221 +++ .../CFQueryReader/.sencha/package/sencha.cfg | 60 + .../.sencha/package/slice-impl.xml | 168 ++ .../.sencha/package/sub-builds.xml | 204 +++ .../.sencha/package/testing.properties | 17 + .../architect-3.1/CFQueryReader/Readme.md | 2 + .../architect-lib/package-all.js | 1 + .../data/reader/CFQuery.Definition.js | 21 + .../architect-3.1/CFQueryReader/build.xml | 37 + .../architect-3.1/CFQueryReader/compile.sh | 48 + .../CFQueryReader/docs/package.png | Bin 0 -> 77363 bytes .../docs/screenshots/screenshot-1.png | Bin 0 -> 77363 bytes .../CFQueryReader/examples/Readme.md | 38 + .../CFQueryReader/licenses/Readme.md | 3 + .../CFQueryReader/overrides/Readme.md | 3 + .../architect-3.1/CFQueryReader/package.json | 34 + .../CFQueryReader/resources/Readme.md | 3 + .../CFQueryReader/sass/Readme.md | 7 + .../CFQueryReader/sass/config.rb | 2 + .../CFQueryReader/sass/etc/Readme.md | 4 + .../CFQueryReader/sass/etc/all.scss | 0 .../CFQueryReader/sass/example/custom.js | 12 + .../CFQueryReader/sass/example/render.js | 446 +++++ .../CFQueryReader/sass/example/theme.html | 37 + .../CFQueryReader/sass/src/Readme.md | 4 + .../CFQueryReader/sass/var/Readme.md | 3 + .../ux/CFQueryReader/data/reader/CFQuery.js | 331 ++++ .../architect-3.1/CFQueryReader/src/Readme.md | 4 + .../ux/CFQueryReader/data/reader/CFQuery.js | 331 ++++ js/extjs-5.0.1/src/Readme.md | 4 + 43 files changed, 5030 insertions(+) create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/Boot.js create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/Microloader.js create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/bootstrap-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/build-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/build.properties create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/codegen.json create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/defaults.properties create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/find-cmd-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/init-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/js-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/plugin.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/refresh-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/resources-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sass-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sencha.cfg create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/slice-impl.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sub-builds.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/testing.properties create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/architect-lib/package-all.js create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/architect/Ext/ux/CFQueryReader/data/reader/CFQuery.Definition.js create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/build.xml create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/compile.sh create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/docs/package.png create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/docs/screenshots/screenshot-1.png create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/examples/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/licenses/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/overrides/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/package.json create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/resources/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/config.rb create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/etc/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/etc/all.scss create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/custom.js create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/render.js create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/theme.html create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/src/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/var/Readme.md create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/src/Ext/ux/CFQueryReader/data/reader/CFQuery.js create mode 100755 js/extjs-5.0.1/architect-3.1/CFQueryReader/src/Readme.md create mode 100755 js/extjs-5.0.1/src/Ext/ux/CFQueryReader/data/reader/CFQuery.js create mode 100755 js/extjs-5.0.1/src/Readme.md diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/Boot.js b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/Boot.js new file mode 100755 index 0000000..5cabe9a --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/Boot.js @@ -0,0 +1,1506 @@ +// @tag core +// @define Ext.Boot + +var Ext = Ext || {}; + +// +/* + * @class Ext.Boot + * @singleton + */ +Ext.Boot = Ext.Boot || (function (emptyFn) { + + var doc = document, + apply = function (dest, src, defaults) { + if (defaults) { + apply(dest, defaults); + } + + if (dest && src && typeof src == 'object') { + for (var key in src) { + dest[key] = src[key]; + } + } + return dest; + }, + _config = { + /* + * @cfg {Boolean} [disableCaching=true] + * If `true` current timestamp is added to script URL's to prevent caching. + * In debug builds, adding a "cache" or "disableCacheBuster" query parameter + * to the page's URL will set this to `false`. + */ + disableCaching: (/[?&](?:cache|disableCacheBuster)\b/i.test(location.search) || + !(/http[s]?\:/i.test(location.href)) || + /(^|[ ;])ext-cache=1/.test(doc.cookie)) ? false : + true, + + /* + * @cfg {String} [disableCachingParam="_dc"] + * The query parameter name for the cache buster's timestamp. + */ + disableCachingParam: '_dc', + + /* + * @cfg {Boolean} loadDelay + * Millisecond delay between asynchronous script injection (prevents stack + * overflow on some user agents) 'false' disables delay but potentially + * increases stack load. + */ + loadDelay: false, + + /* + * @cfg {Boolean} preserveScripts + * `false` to remove asynchronously loaded scripts, `true` to retain script + * element for browser debugger compatibility and improved load performance. + */ + preserveScripts: true, + + /* + * @cfg {String} charset + * Optional charset to specify encoding of dynamic content. + */ + charset: undefined + }, + + cssRe = /\.css(?:\?|$)/i, + resolverEl = doc.createElement('a'), + isBrowser = typeof window !== 'undefined', + _environment = { + browser: isBrowser, + node: !isBrowser && (typeof require === 'function'), + phantom: (typeof phantom !== 'undefined' && phantom.fs) + }, + _tags = {}, + + // + _debug = function (message) { + //console.log(message); + }, + // + _apply = function (object, config, defaults) { + if (defaults) { + _apply(object, defaults); + } + if (object && config && typeof config === 'object') { + for (var i in config) { + object[i] = config[i]; + } + } + return object; + }, + /* + * The Boot loader class manages Request objects that contain one or + * more individual urls that need to be loaded. Requests can be performed + * synchronously or asynchronously, but will always evaluate urls in the + * order specified on the request object. + */ + Boot = { + loading: 0, + loaded: 0, + env: _environment, + config: _config, + + // Keyed by absolute URL this object holds "true" if that URL is already loaded + // or an array of callbacks to call once it loads. + scripts: { + /* + Entry objects + + 'http://foo.com/bar/baz/Thing.js': { + done: true, + el: scriptEl || linkEl, + preserve: true, + requests: [ request1, ... ] + } + */ + }, + + /* + * contains the current script name being loaded + * (loadSync or sequential load only) + */ + currentFile: null, + suspendedQueue: [], + currentRequest: null, + + // when loadSync is called, need to cause subsequent load requests to also be loadSync, + // eg, when Ext.require(...) is called + syncMode: false, + + /* + * simple helper method for debugging + */ + // + debug: _debug, + // + + /* + * enables / disables loading scripts via script / link elements rather + * than using ajax / eval + */ + useElements: true, + + listeners: [], + + Request: Request, + + Entry: Entry, + + platformTags: _tags, + + /** + * The defult function that detects various platforms and sets tags + * in the platform map accrodingly. Examples are iOS, android, tablet, etc. + * @param tags the set of tags to populate + */ + detectPlatformTags: function () { + var ua = navigator.userAgent, + isMobile = _tags.isMobile = /Mobile(\/|\s)/.test(ua), + isPhone, isDesktop, isTablet, touchSupported, isIE10, isBlackberry, + element = document.createElement('div'), + uaTagChecks = [ + 'iPhone', + 'iPod', + 'Android', + 'Silk', + 'Android 2', + 'BlackBerry', + 'BB', + 'iPad', + 'RIM Tablet OS', + 'MSIE 10', + 'Trident', + 'Chrome', + 'Tizen', + 'Firefox', + 'Safari', + 'Windows Phone' + ], + isEventSupported = function(name, tag) { + if (tag === undefined) { + tag = window; + } + + var eventName = 'on' + name.toLowerCase(), + isSupported = (eventName in element); + + if (!isSupported) { + if (element.setAttribute && element.removeAttribute) { + element.setAttribute(eventName, ''); + isSupported = typeof element[eventName] === 'function'; + + if (typeof element[eventName] !== 'undefined') { + element[eventName] = undefined; + } + + element.removeAttribute(eventName); + } + } + + return isSupported; + }, + uaTags = {}, + len = uaTagChecks.length, check, c; + + for (c = 0; c < len; c++) { + check = uaTagChecks[c]; + uaTags[check] = new RegExp(check).test(ua); + } + + isPhone = + (uaTags.iPhone || uaTags.iPod) || + (!uaTags.Silk && (uaTags.Android && (uaTags['Android 2'] || isMobile))) || + ((uaTags.BlackBerry || uaTags.BB) && uaTags.isMobile) || + (uaTags['Windows Phone']); + + isTablet = + (!_tags.isPhone) && ( + uaTags.iPad || + uaTags.Android || + uaTags.Silk || + uaTags['RIM Tablet OS'] || + (uaTags['MSIE 10'] && /; Touch/.test(ua)) + ); + + touchSupported = + // if the browser has touch events we can be reasonably sure the device has + // a touch screen + isEventSupported('touchend') || + // browsers that use pointer event have maxTouchPoints > 0 if the + // device supports touch input + // http://www.w3.org/TR/pointerevents/#widl-Navigator-maxTouchPoints + navigator.maxTouchPoints || + // IE10 uses a vendor-prefixed maxTouchPoints property + navigator.msMaxTouchPoints; + + isDesktop = !isPhone && !isTablet; + isIE10 = uaTags['MSIE 10']; + isBlackberry = uaTags.Blackberry || uaTags.BB; + + apply(_tags, Boot.loadPlatformsParam(), { + phone: isPhone, + tablet: isTablet, + desktop: isDesktop, + touch: touchSupported, + ios: (uaTags.iPad || uaTags.iPhone || uaTags.iPod), + android: uaTags.Android || uaTags.Silk, + blackberry: isBlackberry, + safari: uaTags.Safari && isBlackberry, + chrome: uaTags.Chrome, + ie10: isIE10, + windows: isIE10 || uaTags.Trident, + tizen: uaTags.Tizen, + firefox: uaTags.Firefox + }); + }, + + /** + * Extracts user supplied platform tags from the "platformTags" query parameter + * of the form: + * + * ?platformTags=name:state,name:state,... + * + * (each tag defaults to true when state is unspecified) + * + * Example: + * ?platformTags=isTablet,isPhone:false,isDesktop:0,iOS:1,Safari:true, ... + * + * @returns {Object} the platform tags supplied by the query string + */ + loadPlatformsParam: function () { + // Check if the ?platform parameter is set in the URL + var paramsString = window.location.search.substr(1), + paramsArray = paramsString.split("&"), + params = {}, i, + platforms = {}, + tmpArray, tmplen, platform, name, enabled; + + for (i = 0; i < paramsArray.length; i++) { + tmpArray = paramsArray[i].split("="); + params[tmpArray[0]] = tmpArray[1]; + } + + if (params.platformTags) { + tmpArray = params.platform.split(/\W/); + for (tmplen = tmpArray.length, i = 0; i < tmplen; i++) { + platform = tmpArray[i].split(":"); + name = platform[0]; + if (platform.length > 1) { + enabled = platform[1]; + if (enabled === 'false' || enabled === '0') { + enabled = false; + } else { + enabled = true; + } + } + platforms[name] = enabled; + } + } + return platform; + }, + + getPlatformTags: function () { + return Boot.platformTags; + }, + + filterPlatform: function (platform) { + platform = [].concat(platform); + var tags = Boot.getPlatformTags(), + len, p, tag; + + for (len = platform.length, p = 0; p < len; p++) { + tag = platform[p]; + if (tags.hasOwnProperty(tag)) { + return !!tags[tag]; + } + } + return false; + }, + + init: function () { + var scriptEls = doc.getElementsByTagName('script'), + len = scriptEls.length, + re = /\/ext(\-[a-z\-]+)?\.js$/, + entry, script, src, state, baseUrl, key, n, origin; + + // Since we are loading after other scripts, and we needed to gather them + // anyway, we track them in _scripts so we don't have to ask for them all + // repeatedly. + for (n = 0; n < len; n++) { + src = (script = scriptEls[n]).src; + if (!src) { + continue; + } + state = script.readyState || null; + + // If we find a script file called "ext-*.js", then the base path is that file's base path. + if (!baseUrl) { + if (re.test(src)) { + Boot.hasReadyState = ("readyState" in script); + Boot.hasAsync = ("async" in script) || !Boot.hasReadyState; + baseUrl = src; + } + } + + if (!Boot.scripts[key = Boot.canonicalUrl(src)]) { + // + _debug("creating entry " + key + " in Boot.init"); + // + entry = new Entry({ + key: key, + url: src, + done: state === null || // non-IE + state === 'loaded' || state === 'complete', // IE only + el: script, + prop: 'src' + }); + } + } + + if (!baseUrl) { + script = scriptEls[scriptEls.length - 1]; + baseUrl = script.src; + Boot.hasReadyState = ('readyState' in script); + Boot.hasAsync = ("async" in script) || !Boot.hasReadyState; + } + + Boot.baseUrl = baseUrl.substring(0, baseUrl.lastIndexOf('/') + 1); + origin = window.location.origin || + window.location.protocol + + "//" + + window.location.hostnaBoot + + (window.location.port ? ':' + window.location.port: ''); + Boot.origin = origin; + + Boot.detectPlatformTags(); + Ext.filterPlatform = Boot.filterPlatform; + }, + + /* + * This method returns a canonical URL for the given URL. + * + * For example, the following all produce the same canonical URL (which is the + * last one): + * + * http://foo.com/bar/baz/zoo/derp/../../goo/Thing.js?_dc=12345 + * http://foo.com/bar/baz/zoo/derp/../../goo/Thing.js + * http://foo.com/bar/baz/zoo/derp/../jazz/../../goo/Thing.js + * http://foo.com/bar/baz/zoo/../goo/Thing.js + * http://foo.com/bar/baz/goo/Thing.js + * + * @private + */ + canonicalUrl: function (url) { + // @TODO - see if we need this fallback logic + // http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue + resolverEl.href = url; + + var ret = resolverEl.href, + dc = _config.disableCachingParam, + pos = dc ? ret.indexOf(dc + '=') : -1, + c, end; + + // If we have a _dc query parameter we need to remove it from the canonical + // URL. + if (pos > 0 && ((c = ret.charAt(pos - 1)) === '?' || c === '&')) { + end = ret.indexOf('&', pos); + end = (end < 0) ? '' : ret.substring(end); + if (end && c === '?') { + ++pos; // keep the '?' + end = end.substring(1); // remove the '&' + } + ret = ret.substring(0, pos - 1) + end; + } + + return ret; + }, + + /* + * Get the config value corresponding to the specified name. If no name is given, will return the config object + * @param {String} name The config property name + * @return {Object} + */ + getConfig: function (name) { + return name ? Boot.config[name] : Boot.config; + }, + + /* + * Set the configuration. + * @param {Object} config The config object to override the default values. + * @return {Ext.Boot} this + */ + setConfig: function (name, value) { + if (typeof name === 'string') { + Boot.config[name] = value; + } else { + for (var s in name) { + Boot.setConfig(s, name[s]); + } + } + return Boot; + }, + + getHead: function () { + return Boot.docHead || + (Boot.docHead = doc.head || + doc.getElementsByTagName('head')[0]); + }, + + create: function (url, key, cfg) { + var config = cfg || {}; + config.url = url; + config.key = key; + return Boot.scripts[key] = new Entry(config); + }, + + getEntry: function (url, cfg) { + var key = Boot.canonicalUrl(url), + entry = Boot.scripts[key]; + if (!entry) { + entry = Boot.create(url, key, cfg); + } + return entry; + }, + + processRequest: function(request, sync) { + request.loadEntries(sync); + }, + + load: function (request) { + // + _debug("Boot.load called"); + // + var request = new Request(request); + + if (request.sync || Boot.syncMode) { + return Boot.loadSync(request); + } + + // If there is a request in progress, we must + // queue this new request to be fired when the current request completes. + if (Boot.currentRequest) { + // + _debug("current active request, suspending this request"); + // + // trigger assignment of entries now to ensure that overlapping + // entries with currently running requests will synchronize state + // with this pending one as they complete + request.getEntries(); + Boot.suspendedQueue.push(request); + } else { + Boot.currentRequest = request; + Boot.processRequest(request, false); + } + return Boot; + }, + + loadSync: function (request) { + // + _debug("Boot.loadSync called"); + // + var request = new Request(request); + + Boot.syncMode++; + Boot.processRequest(request, true); + Boot.syncMode--; + return Boot; + }, + + loadBasePrefix: function(request) { + request = new Request(request); + request.prependBaseUrl = true; + return Boot.load(request); + }, + + loadSyncBasePrefix: function(request) { + request = new Request(request); + request.prependBaseUrl = true; + return Boot.loadSync(request); + }, + + requestComplete: function(request) { + var next; + + if (Boot.currentRequest === request) { + Boot.currentRequest = null; + while(Boot.suspendedQueue.length > 0) { + next = Boot.suspendedQueue.shift(); + if(!next.done) { + // + _debug("resuming suspended request"); + // + Boot.load(next); + break; + } + } + } + if (!Boot.currentRequest && Boot.suspendedQueue.length == 0) { + Boot.fireListeners(); + } + }, + + isLoading: function () { + return !Boot.currentRequest && Boot.suspendedQueue.length == 0; + }, + + fireListeners: function () { + var listener; + while (Boot.isLoading() && (listener = Boot.listeners.shift())) { + listener(); + } + }, + + onBootReady: function (listener) { + if (!Boot.isLoading()) { + listener(); + } else { + Boot.listeners.push(listener); + } + }, + + /* + * this is a helper function used by Ext.Loader to flush out + * 'uses' arrays for classes + */ + getPathsFromIndexes: function (indexMap, loadOrder) { + return Request.prototype.getPathsFromIndexes(indexMap, loadOrder); + }, + + createLoadOrderMap: function(loadOrder) { + return Request.prototype.createLoadOrderMap(loadOrder); + }, + + fetch: function(url, complete, scope, async) { + async = (async === undefined) ? !!complete : async; + + var xhr = new XMLHttpRequest(), + result, status, content, exception = false, + readyStateChange = function () { + if (xhr && xhr.readyState == 4) { + status = (xhr.status === 1223) ? 204 : + (xhr.status === 0 && ((self.location || {}).protocol === 'file:' || + (self.location || {}).protocol === 'ionp:')) ? 200 : xhr.status; + content = xhr.responseText; + result = { + content: content, + status: status, + exception: exception + }; + if (complete) { + complete.call(scope, result); + } + xhr = null; + } + }; + + if (async) { + xhr.onreadystatechange = readyStateChange; + } + + try { + // + _debug("fetching " + url + " " + (async ? "async" : "sync")); + // + xhr.open('GET', url, async); + xhr.send(null); + } catch (err) { + exception = err; + readyStateChange(); + return result; + } + + if (!async) { + readyStateChange(); + } + + return result; + }, + + notifyAll: function(entry) { + entry.notifyRequests(); + } + }; + + /* + * The request class encapsulates a series of Entry objects + * and provides notification around the completion of all Entries + * in this request. + */ + function Request(cfg) { + if(cfg.$isRequest) { + return cfg; + } + + var cfg = cfg.url ? cfg : {url: cfg}, + url = cfg.url, + urls = url.charAt ? [ url ] : url, + charset = cfg.charset || Boot.config.charset; + + _apply(cfg, { + urls: urls, + charset: charset + }); + _apply(this, cfg); + }; + Request.prototype = { + $isRequest: true, + + /* + * @private + * @param manifest + * @returns {*} + */ + createLoadOrderMap: function (loadOrder) { + var len = loadOrder.length, + loadOrderMap = {}, + i, element; + + for (i = 0; i < len; i++) { + element = loadOrder[i]; + loadOrderMap[element.path] = element; + } + + return loadOrderMap; + }, + + /* + * @private + * @param index + * @param indexMap + * @returns {{}} + */ + getLoadIndexes: function (index, indexMap, loadOrder, includeUses, skipLoaded) { + var item = loadOrder[index], + len, i, reqs, entry, stop, added, idx, ridx, url; + + if (indexMap[index]) { + // prevent cycles + return indexMap; + } + + indexMap[index] = true; + + stop = false; + while (!stop) { + added = false; + + // iterate the requirements for each index and + // accumulate in the index map + for (idx in indexMap) { + if (indexMap.hasOwnProperty(idx)) { + item = loadOrder[idx]; + if (!item) { + continue; + } + url = this.prepareUrl(item.path); + entry = Boot.getEntry(url); + if (!skipLoaded || !entry || !entry.done) { + reqs = item.requires; + if (includeUses && item.uses) { + reqs = reqs.concat(item.uses); + } + for (len = reqs.length, i = 0; i < len; i++) { + ridx = reqs[i]; + // if we find a requirement that wasn't + // already in the index map, + // set the added flag to indicate we need to + // reprocess + if (!indexMap[ridx]) { + indexMap[ridx] = true; + added = true; + } + } + } + } + } + + // if we made a pass through the index map and didn't add anything + // then we can stop + if (!added) { + stop = true; + } + } + + return indexMap; + }, + + getPathsFromIndexes: function (indexMap, loadOrder) { + var indexes = [], + paths = [], + index, len, i; + + for (index in indexMap) { + if (indexMap.hasOwnProperty(index) && indexMap[index]) { + indexes.push(index); + } + } + + indexes.sort(function (a, b) { + return a - b; + }); + + // convert indexes back into load paths + for (len = indexes.length, i = 0; i < len; i++) { + paths.push(loadOrder[indexes[i]].path); + } + + return paths; + }, + + expandUrl: function (url, indexMap, includeUses, skipLoaded) { + if (typeof url == 'string') { + url = [url]; + } + + var me = this, + loadOrder = me.loadOrder, + loadOrderMap = me.loadOrderMap; + + if (loadOrder) { + loadOrderMap = loadOrderMap || me.createLoadOrderMap(loadOrder); + me.loadOrderMap = loadOrderMap; + indexMap = indexMap || {}; + var len = url.length, + unmapped = [], + i, item; + + for (i = 0; i < len; i++) { + item = loadOrderMap[url[i]]; + if (item) { + me.getLoadIndexes(item.idx, indexMap, loadOrder, includeUses, skipLoaded); + } else { + unmapped.push(url[i]); + } + } + + + return me.getPathsFromIndexes(indexMap, loadOrder).concat(unmapped); + } + return url; + }, + + expandUrls: function (urls, includeUses) { + if (typeof urls == "string") { + urls = [urls]; + } + + var expanded = [], + expandMap = {}, + tmpExpanded, + len = urls.length, + i, t, tlen, tUrl; + + for (i = 0; i < len; i++) { + tmpExpanded = this.expandUrl(urls[i], {}, includeUses, true); + for (t = 0, tlen = tmpExpanded.length; t < tlen; t++) { + tUrl = tmpExpanded[t]; + if (!expandMap[tUrl]) { + expandMap[tUrl] = true; + expanded.push(tUrl); + } + } + } + + if (expanded.length == 0) { + expanded = urls; + } + + return expanded; + }, + + expandLoadOrder: function () { + var me = this, + urls = me.urls, + expanded; + + if (!me.expanded) { + expanded = this.expandUrls(urls); + me.expanded = true; + } else { + expanded = urls; + } + + me.urls = expanded; + + // if we added some urls to the request to honor the indicated + // load order, the request needs to be sequential + if (urls.length != expanded.length) { + me.sequential = true; + } + + return me; + }, + + getUrls: function () { + this.expandLoadOrder(); + return this.urls; + }, + + prepareUrl: function(url) { + if(this.prependBaseUrl) { + return Boot.baseUrl + url; + } + return url; + }, + + getEntries: function () { + var me = this, + entries = me.entries, + i, entry, urls, url; + if (!entries) { + entries = []; + urls = me.getUrls(); + for (i = 0; i < urls.length; i++) { + url = me.prepareUrl(urls[i]); + entry = Boot.getEntry(url, { + buster: me.buster, + charset: me.charset + }); + entry.requests.push(me); + entries.push(entry); + } + me.entries = entries; + } + return entries; + }, + + loadEntries: function(sync) { + var me = this, + entries = me.getEntries(), + len = entries.length, + start = me.loadStart || 0, + continueLoad, entry, i; + + if(sync !== undefined) { + me.sync = sync; + } + + me.loaded = me.loaded || 0; + me.loading = me.loading || len; + + for(i = start; i < len; i++) { + entry = entries[i]; + if(!entry.loaded) { + continueLoad = entries[i].load(me.sync); + } else { + continueLoad = true; + } + if(!continueLoad) { + me.loadStart = i; + entry.onDone(function(){ + me.loadEntries(sync); + }); + break; + } + } + me.processLoadedEntries(); + }, + + processLoadedEntries: function () { + var me = this, + entries = me.getEntries(), + len = entries.length, + start = me.startIndex || 0, + i, entry; + + if (!me.done) { + for (i = start; i < len; i++) { + entry = entries[i]; + + if (!entry.loaded) { + me.startIndex = i; + return; + } + + if (!entry.evaluated) { + entry.evaluate(); + } + + if (entry.error) { + me.error = true; + } + } + me.notify(); + } + }, + + notify: function () { + var me = this; + if (!me.done) { + var error = me.error, + fn = me[error ? 'failure' : 'success'], + delay = ('delay' in me) + ? me.delay + : (error ? 1 : Boot.config.chainDelay), + scope = me.scope || me; + me.done = true; + if (fn) { + if (delay === 0 || delay > 0) { + // Free the stack (and defer the next script) + setTimeout(function () { + fn.call(scope, me); + }, delay); + } else { + fn.call(scope, me); + } + } + me.fireListeners(); + Boot.requestComplete(me); + } + }, + + onDone: function(listener) { + var me = this, + listeners = me.listeners || (me.listeners = []); + if(me.done) { + listener(me); + } else { + listeners.push(listener); + } + }, + + fireListeners: function() { + var listeners = this.listeners, + listener; + if(listeners) { + // + _debug("firing request listeners"); + // + while((listener = listeners.shift())) { + listener(this); + } + } + } + }; + + /* + * The Entry class is a token to manage the load and evaluation + * state of a particular url. It is used to notify all Requests + * interested in this url that the content is available. + */ + function Entry(cfg) { + if(cfg.$isEntry) { + return cfg; + } + + // + _debug("creating entry for " + cfg.url); + // + + var charset = cfg.charset || Boot.config.charset, + manifest = Ext.manifest, + loader = manifest && manifest.loader, + cache = (cfg.cache !== undefined) ? cfg.cache : (loader && loader.cache), + buster, busterParam; + + if(cache === undefined) { + cache = !Boot.config.disableCaching; + } + + if(cache === false) { + buster = +new Date(); + } else if(cache !== true) { + buster = cache; + } + + if(buster) { + busterParam = (loader && loader.cacheParam) || Boot.config.disableCachingParam; + buster = busterParam + "=" + buster; + }; + + _apply(cfg, { + charset: charset, + buster: buster, + requests: [] + }); + _apply(this, cfg); + }; + Entry.prototype = { + $isEntry: true, + done: false, + evaluated: false, + loaded: false, + + isCrossDomain: function() { + var me = this; + if(me.crossDomain === undefined) { + // + _debug("checking " + me.getLoadUrl() + " for prefix " + Boot.origin); + // + me.crossDomain = (me.getLoadUrl().indexOf(Boot.origin) !== 0); + } + return me.crossDomain; + }, + + isCss: function () { + var me = this; + if (me.css === undefined) { + me.css = me.url && cssRe.test(me.url); + } + return this.css; + }, + + getElement: function (tag) { + var me = this, + el = me.el; + if (!el) { + // + _debug("creating element for " + me.url); + // + if (me.isCss()) { + tag = tag || "link"; + el = doc.createElement(tag); + if(tag == "link") { + el.rel = 'stylesheet'; + me.prop = 'href'; + } else { + me.prop="textContent"; + } + el.type = "text/css"; + } else { + tag = tag || "script"; + el = doc.createElement(tag); + el.type = 'text/javascript'; + me.prop = 'src'; + if (Boot.hasAsync) { + el.async = false; + } + } + me.el = el; + } + return el; + }, + + getLoadUrl: function () { + var me = this, + url = Boot.canonicalUrl(me.url); + if (!me.loadUrl) { + me.loadUrl = !!me.buster + ? (url + (url.indexOf('?') === -1 ? '?' : '&') + me.buster) + : url; + } + return me.loadUrl; + }, + + fetch: function (req) { + var url = this.getLoadUrl(), + async = !!req.async, + complete = req.complete; + + Boot.fetch(url, complete, this, async); + }, + + onContentLoaded: function (response) { + var me = this, + status = response.status, + content = response.content, + exception = response.exception, + url = this.getLoadUrl(); + me.loaded = true; + if ((exception || status === 0) && !_environment.phantom) { + me.error = + // + ("Failed loading synchronously via XHR: '" + url + + "'. It's likely that the file is either being loaded from a " + + "different domain or from the local file system where cross " + + "origin requests are not allowed for security reasons. Try " + + "asynchronous loading instead.") || + // + true; + me.evaluated = true; + } + else if ((status >= 200 && status < 300) || status === 304 + || _environment.phantom + || (status === 0 && content.length > 0) + ) { + me.content = content; + } + else { + me.error = + // + ("Failed loading synchronously via XHR: '" + url + + "'. Please verify that the file exists. XHR status code: " + + status) || + // + true; + me.evaluated = true; + } + }, + + createLoadElement: function(callback) { + var me = this, + el = me.getElement(), + readyStateChange = function(){ + if (this.readyState === 'loaded' || this.readyState === 'complete') { + if(callback) { + callback(); + } + } + }, + errorFn = function() { + me.error = true; + if(callback) { + callback(); + } + }; + me.preserve = true; + el.onerror = errorFn; + if(Boot.hasReadyState) { + el.onreadystatechange = readyStateChange; + } else { + el.onload = callback; + } + // IE starts loading here + el[me.prop] = me.getLoadUrl(); + }, + + onLoadElementReady: function() { + Boot.getHead().appendChild(this.getElement()); + this.evaluated = true; + }, + + inject: function (content, asset) { + // + _debug("injecting content for " + this.url); + // + var me = this, + head = Boot.getHead(), + url = me.url, + key = me.key, + base, el, ieMode, basePath; + + if (me.isCss()) { + me.preserve = true; + basePath = key.substring(0, key.lastIndexOf("/") + 1); + base = doc.createElement('base'); + base.href = basePath; + if(head.firstChild) { + head.insertBefore(base, head.firstChild); + } else { + head.appendChild(base); + } + // reset the href attribute to cuase IE to pick up the change + base.href = base.href; + + if (url) { + content += "\n/*# sourceURL=" + key + " */"; + } + + // create element after setting base + el = me.getElement("style"); + + ieMode = ('styleSheet' in el); + + head.appendChild(base); + if(ieMode) { + head.appendChild(el); + el.styleSheet.cssText = content; + } else { + el.textContent = content; + head.appendChild(el); + } + head.removeChild(base); + + } else { + // Debugger friendly, file names are still shown even though they're + // eval'ed code. Breakpoints work on both Firebug and Chrome's Web + // Inspector. + if (url) { + content += "\n//# sourceURL=" + key; + } + Ext.globalEval(content); + } + return me; + }, + + loadCrossDomain: function() { + var me = this, + complete = function(){ + me.loaded = me.evaluated = me.done = true; + me.notifyRequests(); + }; + if(me.isCss()) { + me.createLoadElement(); + me.evaluateLoadElement(); + complete(); + } else { + me.createLoadElement(function(){ + complete(); + }); + me.evaluateLoadElement(); + // at this point, we need sequential evaluation, + // which means we can't advance the load until + // this entry has fully completed + return false; + } + return true; + }, + + loadElement: function() { + var me = this, + complete = function(){ + me.loaded = me.evaluated = me.done = true; + me.notifyRequests(); + }; + if(me.isCss()) { + return me.loadCrossDomain(); + } else { + me.createLoadElement(function(){ + complete(); + }); + me.evaluateLoadElement(); + } + return true; + }, + + loadSync: function() { + var me = this; + me.fetch({ + async: false, + complete: function (response) { + me.onContentLoaded(response); + } + }); + me.evaluate(); + me.notifyRequests(); + }, + + load: function (sync) { + var me = this; + if (!me.loaded) { + if(me.loading) { + // if we're calling back through load and we're loading but haven't + // yet loaded, then we should be in a sequential, cross domain + // load scenario which means we can't continue the load on the + // request until this entry has fully evaluated, which will mean + // loaded = evaluated = done = true in one step. For css files, this + // will happen immediately upon element creation / insertion, + // but + + + + + + + + + + Switch package version to ${build.version} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/js-impl.xml b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/js-impl.xml new file mode 100755 index 0000000..2604b5b --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/js-impl.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/plugin.xml b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/plugin.xml new file mode 100755 index 0000000..d57eba8 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/plugin.xml @@ -0,0 +1,32 @@ + + + + + + diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/refresh-impl.xml b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/refresh-impl.xml new file mode 100755 index 0000000..960f24f --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/refresh-impl.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/resources-impl.xml b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/resources-impl.xml new file mode 100755 index 0000000..1ae1dc1 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/resources-impl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + Merging resources from base package ${base.path} + + + + + + + + + + + + + + + + Merging resources from current package ${package.resources.dir} + + + + + \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sass-impl.xml b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sass-impl.xml new file mode 100755 index 0000000..068e17f --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sass-impl.xml @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + require '${build.all.ruby}' + cache_path = '${compass.cache.dir}' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sencha.cfg b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sencha.cfg new file mode 100755 index 0000000..b236ac9 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sencha.cfg @@ -0,0 +1,60 @@ +# The name of the package - should match the "name" property in ./package.json +# +package.name=CFQueryReader + +# The namespace to which this package's SASS corresponds. The default value of +# "Ext" means that the files in ./sass/src (and ./sass/var) match classes in +# the Ext" root namespace. In other words, "Ext.panel.Panel" maps to +# ./sass/src/panel/Panel.scss. +# +# To style classes from any namespace, set this to blank. If this is blank, +# then to style "Ext.panel.Panel" you would put SASS in +# ./sass/src/Ext/panel/Panel.scss. +# +package.sass.namespace=Ext + +# This is the comma-separated list of folders where classes reside. These +# classes must be explicitly required to be included in the build. +# +package.classpath=${package.dir}/src + +# This is the comma-separated list of folders of overrides. All files in this +# path will be given a tag of "packageOverrides" which is automatically +# required in generated apps by the presence of this line in app.js: +# +# //@require @packageOverrides +# +package.overrides=${package.dir}/overrides + +# This is the folder where SASS "src" resides. This is searched for SCSS +# files that match the JavaScript classes used by the application. +# +package.sass.srcpath=${package.dir}/sass/src + +# This is the folder where SASS "vars" resides. This is searched for SCSS +# files that match the JavaScript classes used by the application. +# +package.sass.varpath=${package.dir}/sass/var + +# This file is automatically imported into the SASS build before "vars". +# +package.sass.etcpath=${package.dir}/sass/etc/all.scss + +# This is the folder in which to place "sencha packaage build" output. +# +package.build.dir=${package.dir}/build + +# The folder that contains example application(s) for this package. +# +package.examples.dir=${package.dir}/examples + +# The folder that contains sub-packages of this package. Only valid for "framework" +# package type. +# +package.subpkgs.dir=${package.dir}/packages + +#============================================================================== +# Custom Properties - Place customizations below this line to avoid merge +# conflicts with newer versions + +package.cmd.version=5.0.3.276 diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/slice-impl.xml b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/slice-impl.xml new file mode 100755 index 0000000..5024cf4 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/slice-impl.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* + * This file is generated by Sencha Cmd and should NOT be edited. It redirects + * to the most recently built CSS file for the application to allow theme.html + * to load properly for image slicing (required to support non-CSS3 browsers + * such as IE9 and below). + */ +@import '${package.example.css.path}'; + + + + + + Capture theme image to ${build.dir}/theme-capture.png + + + + + + + Slicing theme images to ${build.resources.dir} + + + + + + + + + + \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sub-builds.xml b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sub-builds.xml new file mode 100755 index 0000000..a2ae676 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/sub-builds.xml @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + package + build + + + + + + package + build + + + + + + + + + + + + + + + + + + + + + package + upgrade + + + + + + + + + + Building example in @{example-dir} + + app + build + + + + + + + + + Upgrading example in @{example-dir} + + + app + upgrade + + + + + + + + + + Cleaning example in @{example-dir} + + + + + \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/testing.properties b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/testing.properties new file mode 100755 index 0000000..60749a3 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/.sencha/package/testing.properties @@ -0,0 +1,17 @@ +# =========================================== +# This file defines properties used by +# build-impl.xml, which is the base impl +# of an applications build process. The +# properties from this file correspond to the +# 'testing' build environment, specified +# by 'sencha app build testing'. These will +# take precedence over defaults provided by +# build.properties. +# =========================================== + +# =========================================== +# compression option used to generate '-all' +# js output file. this value disables +# compression for testing builds +# =========================================== +build.compile.js.compress= diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/Readme.md new file mode 100755 index 0000000..38b7aba --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/Readme.md @@ -0,0 +1,2 @@ +# CFQueryReader - Read Me + diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/architect-lib/package-all.js b/js/extjs-5.0.1/architect-3.1/CFQueryReader/architect-lib/package-all.js new file mode 100755 index 0000000..0698c90 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/architect-lib/package-all.js @@ -0,0 +1 @@ +Ext.define("Ext.ux.CFQueryReader.data.reader.CFQuery",{extend:Ext.data.reader.Array,alias:"reader.cfquery",config:{queryProperty:"QUERY",totalProperty:"TOTALROWCOUNT",idProperty:null},readRecords:function(d){var k;var e,h,l,g,f,a;var m;var c;var j;var n;k=this;n=true;if(d.DATA&&d.COLUMNS){d={QUERY:d}}if(d.metaData){k.onMetaChange(d.metaData);if(d.metaData.fields){n=false}}if(n){c=k.getQuery(d);try{if(Ext.isObject(c)===false){throw"The 'query' is not properly mapped to the response."}else{if((c.DATA&&Ext.isArray(c.DATA))===false||(c.COLUMNS&&Ext.isArray(c.COLUMNS))===false){throw"A 'query' is not defined in the server output."}}f=k.getModel();g=Ext.Array.clone(f.prototype.fields);h=c.COLUMNS.length;for(e=0;e=0){g[e].mapping=l}}m=k.getIdProperty();if(m){f.idProperty=m}f.replaceFields(g,true);k.setModel(f,true)}catch(b){j=new Ext.data.ResultSet({total:0,count:0,records:[],success:false,message:b});k.fireEvent("exception",k,d,j);Ext.Logger.warn(b);return j}}k.rawData=d;return k.callParent([d])},buildExtractors:function(){var d=this;var c;var e;var b;var a;c=d.getConfig();b=c.queryProperty;a=c.rootProperty;if(b&&!a){c.rootProperty=a=b}if(!a){Ext.Error.raise({message:"Unable to determine the value for this reader. Has been unset?"})}e=a.replace(/(^|\.)DATA$/,"");b=e;a=(e.length)?e+".DATA":"DATA";c.queryProperty=b;c.rootProperty=a;d.getQuery=d.createAccessor(b);d.getRoot=d.createAccessor(a);d.callParent(arguments)}}); \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/architect/Ext/ux/CFQueryReader/data/reader/CFQuery.Definition.js b/js/extjs-5.0.1/architect-3.1/CFQueryReader/architect/Ext/ux/CFQueryReader/data/reader/CFQuery.Definition.js new file mode 100755 index 0000000..75bc926 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/architect/Ext/ux/CFQueryReader/data/reader/CFQuery.Definition.js @@ -0,0 +1,21 @@ +{ + "classAlias": "reader.cfquery", + "className": "Ext.ux.CFQueryReader.data.reader.CFQuery", + "inherits": "Ext.data.reader.Array", + "autoName": "MyCFQueryReader", + "helpText": "Reader for CFQuery component responses.", + + "toolbox": { + "name": "CF Query Reader", + "category": "Data Readers", + "groups": ["Data"] + }, + + "configs": [{ + "name": "idProperty", + "type": "string" + }], + + "hideConfigs": [ + ] +} \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/build.xml b/js/extjs-5.0.1/architect-3.1/CFQueryReader/build.xml new file mode 100755 index 0000000..5467efe --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/build.xml @@ -0,0 +1,37 @@ + + + + + + + + diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/compile.sh b/js/extjs-5.0.1/architect-3.1/CFQueryReader/compile.sh new file mode 100755 index 0000000..c78c9cb --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/compile.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# +# Author: Mike Hill +# +# Compile all package JavaScript files into a single file. In order for Sencha +# Architect to render items correctly, this must be performed after each change +# to package source files. + +# Line explanations: +# +# sencha: +# Run Sencha CMD program. +# +# -d: +# Run in debug mode (verbose output). +# +# -s=../../ext/src/: +# Use given path as SDK path for ExtJS source. +# +# +# compile --classpath=src/: +# Compile the code within the given classpath. +# +# +# exclude -namespace=Ext: +# Exclude the Ext namespace from the compiled code. Only required Ext classes +# will be included in the final result. +# +# and: +# Append an additional subcategory command to the category command (compile). +# +# +# concat -yui -ou=architect-lib/package-all.js: +# Concatenate the compiled code into a single file and export this file as +# the given -ou path using the YUI JavaScript compiler. The Closure JavaScript +# compiler may be used instead by replacing -yui with -closure. + +# Determine package name +PACKAGE=${PWD##*/} + +# Compile package +sencha.sh \ + -d \ + -s=../../ext/src/ \ + compile --classpath=src/ \ + exclude -not -namespace=Ext.ux.${PACKAGE} \ + and \ + concat -yui -ou=architect-lib/package-all.js diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/docs/package.png b/js/extjs-5.0.1/architect-3.1/CFQueryReader/docs/package.png new file mode 100755 index 0000000000000000000000000000000000000000..622a18c79decdbaa827bc9bddc729258e05ef7b6 GIT binary patch literal 77363 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 literal 0 HcmV?d00001 diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/docs/screenshots/screenshot-1.png b/js/extjs-5.0.1/architect-3.1/CFQueryReader/docs/screenshots/screenshot-1.png new file mode 100755 index 0000000000000000000000000000000000000000..622a18c79decdbaa827bc9bddc729258e05ef7b6 GIT binary patch literal 77363 zcmc$FWm}ui6E09F5L^PqifeEwT3myBfHUOdUQxw1REBlpbC%oD4pqecXv1z=!c5NW6@8(?5ydZV9YJS_AtGUI_u z=r2qk12sjA`f2(@^Z?sYL0bU>qbZ31VT*$v<9n(@eK0VHzy5nLM?9+RF)&c&8p;Yr z{#Hki?^@hegV*2Ih#`x`%$~SnXWEaYI*g6O*?1*KHC_xqO;Z+But~EQe!rXVQxU>) zK!_9EfTzNvh^fNs9mR6M1(Z|@n!YPsJ@xlF?w;x7Jh?e3JZ<~C5B*Trxldn`g#6Ph z*t3fYlqxjatj0lq)V1|xbuD~)X?gU&VKokNh7%G%i>=Fd_8rTk6Q|H-k5By9{NDfl zzs=qoLYdY+LxQe7D*v#I_O)W&tPjqimH!5nLg*RjX_@Am_$EKS!(}Z`{SoG9qwM{k_)> zk1nV+xtp0sSRo^7QtomF(TqBhduTv@LjC^VJk&Xw*h3%eVFTHYxxZ3-$jI7pK>irGfINLUl0VN93GiziPiXHpz3#z{Np#k*= zb^ni)4{BHLP8Yd@x|KsFAwQyi$z3ENSWz)@+ex0=MX>FnTTbK~*h&bNnN1;npBy7w2_8;d^|J%Ct^+fQpz+-vu)w}zG z;L43ZH}~DhWVv0EyB%bQ+==d^A?mx_&djZd{L_v*O=N2CuE3)v>RT^D05yRc@4aY1 zxFBi6)a7UcRSo-HG@uszb>mDNK@=Rm zvDyCU23y^DxIuQKisgQhfTiwUA+zN;4zYFdO>D-kuc#kY1aVX`C~Yte^)hV7MId)a z=w}su28I}fCG241Z#%LM_Q_{4Sv=_50V)wSvT^Q#%tP(t^IJFmcjLR`fwup~3)QI` ziCzRFG8)A^^_LnEW_?Bg+Y&(V!6r6@qXw|@Zww5KQRu zpd|zYyiX$EuWb{}%7w{jGXzt%Zd4q9>(2-~zk_X}87PtDoWp6m=arcJF31#3s^0we z*aCL4C4C%E&mZ&@8}YgKq~W1CcyVUHFt~l=_}#-KNzgD%d0B3gLg#Oc!V+>KX8AG*EAqcfhK+LuxzmHku8rUA_jNXL zPmJ##gL^lU?w*+3CgsS*Ocq^nK5D@3i;$IH(~U9)&9YO=QVX#RQ;jx_*w|Nbl|mV) zHU z?ri}lNZRg2)?Cn=_^0E7a^zyU^)m!<(j}0wXhg)*LpH&V82e$W-svua=$cvfc}%|EH_EqtVb(iKw_-iVt3Ch8PaMuOukaB# z+3~fdLh?vrTso_u1K=i}*jC=+83H3on>{0Aa;N_BDgf7E2rqHtg)TA;Rc6ZQ8Ma?6 zr+7h?`hoM{o>cqcD(|%HpC%QE{`u1J>nJ7wau(Bo7;iuaQDu6T+s!gZeVgX zXu~-U{<4t>F}IQJ6+VSyP_2MvnFavenT-a5$g35CTA54CbrKMDjj$Fbdw~)KE?{0V zF}xW8Lc^PP)bH+illPzZUpf7Ax`f?l;G1N7X-`|b#-N^kmmXD5K+d%|@;}(C)MJm! zRm2P4;;L~G+r4Pn%LjyPFNruQK@1%iq|*Tukkt=PX>G|cXT>wOowmo;uAV~B7~hSc z9U8qc+0vguOl=kc*_|Q@f~qjyhN~7`#(TwoUjGj3Pj{aR?X>P=wcOtkL^k8)B@8(e z&7HV$B>phy``*G@#u_jc>8UV81HNbW6hxjrV$wHWT_+gkZtLLcFn8Y>+6YYHuC$`7 zZ43%a65NZ(XdJfgkE5u??Ldg5reGf}1pMa5rwWCbn8#FsyVO&}^eJLl?!ggu z^A2`%6SQ$tUU$YHp0Tmre#@8cl-mX;U8SE?Sp<<$#9|j zgkZ-ZLyXYx_BwVPlc<}!l9oC;L*0jn?0H7Y+S^a?RWd43Tt{2oEd^%@3%rRPr_;(W z{vZE^#^TOBH6gTE);bIa{jVo)|JqBY(7i8fkRUQhRIkn6CU4NHmq4q*R- z&7PJRc4Y9m4coPS*xOO_12epll!7JB?rax8wVdod81@X`OL&qzvlLyw9O9-*v`%k^J zx$;yBpstBE`JuWHU_>MtW$mEJQ_x*Dfn|#GDDn8nB;Gb57U*Wdykun`pS<1<`H>Da zjdm$q@j=UU5i7s7&0+FXEqkKzyW89%g`HYZmMj9m)(tS$H`Id8PQ<28g%Gy@Ns)#EQrx zpC3XHyX}9mK}B6tKbOU)fBZKk+8f2n#9@73ZVdpJ@@!nb+(;u+b}Xqo!`8qnT^YwO zUDlj7esvdL?ANm$kf1WG3jCDvGJV>|*uXoADqw`~HR=bgg*n_-P+ z*`-wg))*XY3q)F;q%LXOzzCs9M7=t}IL#n2OM^Or9d3$gO_H`%wekxHb3^)gU}(k> z(`YJ#GE(r4ESX3Bq=N#_^_g z@JGq_ikb-SY0d^^h=Ci<&=liU6T_872j3c%tu5|3ZXG~wKv?%OveAflx}_2wqKI8( zG5S|dg?T00IDrJK6qno8(5fo&OkwTE5mRe*Vc_JczgBnUgdEzdIsY<62<$GCWl`@#8#&J0z#<1VnNB>m${R% zC~N@*578=CpMACvrLGd$`oLiwJotYRPq~auZIDa~!cUaf^kahlj7=fpc6L)>NBAbs zO>r(w>pFhi5NCU6E+jN`0II+INYSN30W5!a0Fz` zu0`2Ltae6B|LV9PA$VmA=$B~0A`KygPS7h|5UMOHQXnF|?4Kz0Kjg>>V)@zc`(m@d zXnsI zYQ`2k^vFytehC#gA$vPHUl%y=&xh*%usKEU_=uo5QDd-y{H>>0AWX3B15TYi(bN?0 z+6$PTc?$blTt~P4a~9qlMOI$7s}i$;mQ}YIt)7=I9O+@|j?f(QYt3hvYGDa_PYM*| z5eH>NQDNC732AJ=5Ccn1*P)?+l){AKcXES2?*z~;OWI@G6cvg+F_u{dP(P;#9?-=z z(OGqz198HQ*la@)$>o&H<>b4fraYko2&TT^tEdS72w?e8RLZ-$shnmxyU>>O_7=W$v$A1bCU^Z0nO^xU z*I(y$_UGTNG(4`@IHVraPZE57`2^yhYY3S}n~Wd%1S7nxF@MFaV%E>Fj#l#nzVVCD zSEC$f5;!g~9#y;t3-iJH2GTJB!S?GB0*xH}^K)`VwsQg~UafOW>US71_dBw>K0~Du zXTr51v~1p*XZ0U0XWG~UQrPa69Xsc)UU|b)`BDE;T|cv?z9-4z>~zI~@@`8G>1}&TDO3B^NrYmwIb%v5L%^#@x)B(tXsd z?>Ja;yAKMdUi%N-+hUjf>P_D3VGX0GxOE@J5uVPGn^*0|5%Ucq_v>gnAuS@e+c6g^ zn8l8+DGUdhCN9C6coJei#{B{GSZs$s$AGslHx%W%yzC#}`Tct+TO+xjKqAT5Pm zGh@N8B;};zB>&Lc3#dOgZ{NJ=Q2k1Mw2oG4*59B1^QK^82kzWfc-(Vn?Upy9gGW;y zO!yiP@6fueNF;HC9!tD+LNg(B^5B@uNa$EXb8$8y(X})sGFx*~_ySJh;dlE?F9e*x z-5ZAKCFp|9?1wQl%^X86AYr$6Z9^~mrn!ZArL&w&YgzTmwTNE#_?abE=n~HDe&_{9 zaC-k=w&k9ooPY9a651Fj*YmBw-TF!>9*t8N__zdnENJwOS}o*OjJJi7Wl}&pB9up3 z^PE`-rUz)Hnn@45dmu`_nSn~76J?ow4q|)WiU)kTUf2#&?<>DL20q(4v)qjV8n%%^ z=F(%LxNNED`Dh{>;_uc4*-MSqqtYrHeZAj2p;QpvBa#@`B(E{uqvqC}E+Hw2c2M4! zB9csVWum7q#@QMo_cTlNMl_W6V_UkNcNXy964uy)uBNQk z7fau@7r|;Uz^iJuJ%Z^AnW~M3nZ10m?-h!ij-5;sDsDNO zl_`=XwptT{Z?aFfKhnRcynNf4JZfsE#7@zYqn{#t3|#k{+Y`5A&pIw`r;-0cozZX9 z*6#=H5(wNk4s)`4>lt_+e1fh4xNXoz9$@+Bo)cME;fpAz=So`i#k|p4In&)#G;I8n zJ%Hy3IgaIUEY*{odedIX-Eu4ocoo}hv|IhG^IN1hp`|n2f^w~EdWV-f+{wVbJ}0@H z_1pn9c^1k|EKJmLFNTiO?_wo2&PFbssiBEe^k?w%9?9KtAu_2V6@r~mM;GZZd1z9 zD*1g;l;KX0Y|f@R3jc3Bu7^*nz5|)ezM&`nV#McpX{e?-E3w5lg@LRRLi%O765SB; z4NR*|eD>IE8?M=iHY{s9{w+;Qhv~{A!7y)55!g1j19ND`WYO<^Vv}JL7G6PzknJ_; zK;6E`DV6iTe^-5fbJ_NOx`08$rBT`KMbad`r_ZYtUO0W(Zj0i z8OT~}QL=}f6a6D5brKr9R zQY*|#{1Iwe{8j8SE%=)*%bKuTh>D$Cz+}7XEX_MQcuUD|n)e?RGTV?`*$x1Hmn!v6 z@Yoh_YzK&ox_#Ww97~_QSn7g`$POU6jHwq`AqdsmYnKm+G9kb+r>WQ^2%W&w;mP#*)8<1#N{0{xnUV_F=fdcaXyVpmO zmO-coUHsGTv9VPYbeoSW}Gw7s?0*H2%Ro? z5OCHsIKieSk>0}zJHm7Cx_5cXWW)|^jvcUG{7;MPfh7!>Y%41g=t{WP_lrB1h>l{@^t z4xB={vAoQhcT<|myWT&MH3WTiW!GRXqe|iMDu2oRa_rKR-rNk4c!PLFnxrF7VldAR zd9_CFxsYBY`}z0p37*)h80ZZ(4_fp^-+*#8ZSf8L{5jRVQ~bc6?A(op=IUpX*(>2o z2(<6s#KXqqvU+C&YI?@0p1ee$5g;7-JX;dIeSDie!pP5TscShc9ON7JJGSS}Rw@Qk z1L+DHM(k9iwZ7k89PKkJ?2e#r8GApcLFJV*qk)+sS1<1T5=)XJ1EuZtGb6+D6e60_ zQy|YyVtE}%T9@@Q&1#+NSxD!%0x+XZXPygr6|Sdu9sq+oiASG_?r_kL4SXxK9Vd~S zhe|0@MeI>oC{jfW?9-Lj$Y-`>gl&8?xxmz}X7DVl!RBX}j^;%u*GH+oR2TzIXQKV@ zP}KYLrc{@i(`U}@z+tVYDQ30L+mt@PHqlL0P7|aL*u;aLVa3b9S-BGZCVcYk&C`z+ zclamE+JPzNFOR#XeKUtP6*CD-V>{xV$CO$OIzas5ruxJeT3wOXz?v_P zr{|V&a3!MZm()_~9j!nb`>h!LDDM|!gJZk^s2%^%j;fW#U^|cFa&T>81Q55-pm_Wc zBiCM9UNVJ!YDjwFQO7<2tQ~lmkH+Mz7jx^3651uQLY`aiG3ZTh({+&DEnk(|m%<9(v`rI1A4=J$ob6L8DCYbqH!w2Ny&wD|?FU zVynX5t8k@ zAO0qjjV5vOw?_Q>;1{NeI-K1n`!%0JfuD!p1s}X?`?}>8+R>D;D)--aEyuAvdid^h z^6>cPHCp9)ulRG=Q+`JFmlPI&G0P*1hhfe?#7-eG2N#sF!aqlRySzp2BtspUFPyiv z>#?}D-J3`vA~C}T2%)8XhUVm6Q$EFpoAh=prcS{QY&e1P0JZ_SGzt6csWu9}9nsbE@W>r;V^DymtAR^Gaw$`x|#9t34$)i!{1EK@HJpJFDmf zK3^r;(B&UjmvZTeb(wg-=C%j*iM)D3d*B%*SBImsbT%n`+{uZz2M6=Sm zC=as^s#sMie%+Rt`VSsqX$AP`)WBiR2Cg{R#e5th>0?X-7UULj&fGsX-hx@f1f)hK zrDK>B4MMpgQFiSJFL{8X*DFwS=~{k#Wl2J#7W^fU3Kq$2waRdqSrxo3bTx#GM3+MB zUv{aywg17?Ru%UkJf-z4tyiMG{F*YV2#CR8V1Fuoy>zu=Gh{m@AWCfIiND2QtjX0q z+fN&!KIe%%ZG#pDR#JksM$a0M z0Bw4+*cS=(O@=xJ+cG3hn>g{qySUg)!yr!u^N@)*6bhMVnIrL(c8QiZ-4dytp6wl)Eg4QF5ZyTI zV&yX%=-hK%WxKcLy|q}}ZFndleWFdcdHE%aDSuScnzYb@3$hsP!Gju@+wsSbPx0m|MAV$&_ETEyrz-sPy!be@`8G(+ z$l}u=Y%a^WnUjKk$8gWS;vwUv$;4Amvx3njx1`P+oiA`V7MWzpZ+P&)5Q)b zG`!Z5b^Wn^qCHRFs1w%}hq}z8Do)ulyzrtOH;>2|CC&@;`-82a0NP!@nrA1K?kAgs zdEIaCZ4y|0timdxu2r`3X3M}#4l^$m@f@S|t~J|p=El36(HP`4^PjL#xhvTs*o+y9 z5Vn#&Pb6WR>WE=1eebjdV4AG&I!nK={~1a>6|jvLi|r%Sv^CUBU&Y#9c9oLlc1wUZ@-1b z7J`fp%RQ_}^EP;-&~1nO!m;$h+xz-AHvUb%lT=lqvb*QdKx$8P4vt-TkD@6f=vg2H zg-;cEJV3dZLg_eohaZaDwPsb{g zQ)SLZlW0wJx;hFj-<1xVbj2mKK7Zexuuf3Cw*5U;+B`nla~}Aql0i_FC)Haj=}A_i zX>@|=-R`zRzR}j0ZdM`d({@EpXIAb3u3<{*#=iZ(eXGWjm|%ocp;e+KTxmKGa)GWKX=I#}P`5^Tm@)(K zpcb<)xdt|$`+d@F^nUYAjR^E*>8*M5quu`Pvm?R61VVyDCmjB#TCLi)Jj437&tU^% zPX4MT4t$QgPhRMoUOWH5heyy7GB)S38~D@ZwC(P|le_nU!PO%N#>Kk`tx^G)UW$Mr zY#k%S&{d&3^%_{)2;z*PBJHtVOrhhgLvVZIa-_b6{k48HMZpCggs=6nv=vW%*RnNx z4u*F4{|1~Rx8k3`@EtIspQOZ2NOT=O(P5ephh2(?KeNn%sll|}UZ(7|aJc_RjaN#c z?LUJ91q>f&r_;f2f!$hGe=E(y9VT>@CZd_sIe3t6SZk;z+(saZSN=i*b{F{ZPUx%Wm*7S zUQ|3rj4O$%|D4}jhs$2vmQ`Y7YVLOW`^a*~Sjbwx*2^{!bgB7I{H}1D+Z(5bnn=%v zih1J!DCD)c)NO8jGT_LTTY8N+n zD1>`~>zR^J`wU_y^(0PHX6GcjePS9oWcuSUM=YW<{Uv3G#D#p(W~u{a0KPT3wbZt-)un-S;H`Ae zj&vY-?`*~|wz#dpOV}10^8`CLf~|4~>wQr$HkQ0<{*VxfXvpZm1&E6-gsEVSJM1Xz zN1O*#PUmeKcB$2;5{6o%Ap@PAAi6o2^PD{i5(fiRS?>1Z&_Cb$45&IaXER+X)*^1~ z^i4nLx-IAjhjE6J_zlAJjYCxU443t2V6k$`mkxcd%>D$i^GRE_A${%eUt{ona;J|Z z)T9CCjRq3=8``$a)&75V+aq8B2J(kwdKu5_oLLug+t2ouZ0~_)``9jc1urYEzb9B| z%H6A>oDewU@)V7!+D1UG&D7$F5u;I9P8<_!%vPp125rMw_p~iQodqZoHb6GD>Q?+L z&CF+;vWg0B(biGa?_Dp%^zF%eeqBnpP_b%0jn4W*hJXax{+a)v7QQX~Crd$^Nt{#r z=dp!G`&2KCjrteH@onBX|1d;;N&cfN(jfzYbOI%&TOBxJ3-@(_QlYQsnfR8Fl628z z-(?HILhXB&(l+|^ygSL|=>a|@xsWQM^y>m|yXR7GC@$FW)8_w%nyO5i%%YRdxLB)J zDdB;oNkq-1awpivw(|~{{o1-q6#eN2M>6X89UKXF`IGqKQ{98pYczOa0bw^OMzB5W zJ5%I^0O}%8DP!d|i)2GRmM2Y5NOsL`Shk&2v4*!6&aY%jDk^?_g|(13Z{nh`QsVbv zI{Dssm771S1CF&hPnIbTCGyK{UMyV^b78WubKUb<&V0uKoRs`p4gHR83Vj+#rmmtD zmhmiZ>7?s3z-%G3F`X@l{I{-1qDA4OeqY=N+HV^)hW2l;7@>zUSz~~T_sin1P5$E0_=vSfBp6Vnr^49aF^Wx^o|ex0{DGXt4Sp1NxDU|O1eX=k${PSf8b^*`Fd91Se70{0UyGR zQ++1+v-GT->2pYhn^G~p)J~r@;_wr?(tpT(kLT|eIYSkWB}ED7$SHkIAcqefhVow= zsQ>wSW9y{&lKa2e42AIcFSYUEK)&R#{XxgBQ%;$E$>HqoT0t1Cai=TuZee`br_Weg z{i(%mq4tyZVshNANn|GcnEH-#cNCxdmu!S~wUfz(8=XdQoBdE~3ZK@NE9~17at6KM z+pTh+qqm8IJQZ?Q*bpVwCoy^&9bg>5rcWnoMltz${dIwfhuM=aHpEM{blG8LWi`({ zqjE9Tz9pTr2rtM-(DIu@n_CDQx635jNg}zarFJqU+L+!@kp}#-!&EVbhrp$?pH>JJ z+R;+~!qf);n0R_lobxf=?)TFdBSKdo1fUmd1xt)a)fA`NJ2BJGsEWUqYoaU1V_Xi$Xv%>9 zr7AM($Mg`6XCaUsdxp@L`>kfn$UH%O`)yIB3VR2bfhyaZpcmZ^?yEb zaD1-Hw}wxivOl3b-NmT+mA~PwK+^Ftk8@eZi%R>P%f?~g#-Q9IAF_0+?N-8k}Y{zYyTK>p2#nzq9!O}jN#*g}J`ZIYnzrRKerqvR z-NF79I1nn9#iv%;8*ExN;fOtTGAZ)yv=0Ld9ZB&COEMeS|Dhiq=o{m)~7pfmZ+4A37?CaK?(&ztGaiwH#XBR-QyCUN~a%(eAlL ze(t8U(1CcF#! zfgZtj2foQ?R6%U#BUA0#YF>TDs}b+-n;5b#M~EI)oWEM|0c62A&^7z~avo3WtjmGj z*Dk)^=XCE?UGOId5)h)#E3-=I75}VH2Him5F@a~Ll#;US3S_9UQ1+n zf%#u$Eg`w63F4|^QN~Engg_w+)d|>`ya$D3r-Cwp zKb>N;<&!UGyB_Bs+rj<3$Ma>MMdEG@KdtwevT`kcKFSNrZQF;KD{IXfjs~ZK!A;Z{ zHP=by@Z&cLD~GK&{o{vE!RBw~JsRz}o>7^IP_CD^QT)Iq^!}jY9|sb9+M6CnDbBo@oi>+`-&1MUL;@mNr06+UGY0kP1ey&nT4X{ zp{r@yu)pQJ4h>U>=IVGC5~TF-uEr?Y73NXhcG`883Bpoj8N*t3rtLum;7M(2RO+V# zZyttfgN7V~JBy4eqFWf?iOOo{lr(`|xPIyi4O`zt=2_Ho{FR;$;iG(j%P zchB;}+9GV1c!MzOxD4D^JWZ{t!7H9wk)0=ez5cZ0iCEl^l~XTqAl!3@h7;hE4`(D8 zAa@6=uTloMtlSZOaZg)?1lultHZ&fE%8Gk+gCfuald>*eA$K!xd zra2foQlOHMu*U~bcT&R}qxOl50`tVKO1~q0roEpw=Z^~aY?d{e8m_yU>)4pkj9I?e z&J^uDzsw`Pshxcx-<;B3}dK(MEUVLj;%?o8-RT38A_t7L=_L9cOge(of3XDi* z&7Kn9Obet&8RoVD(RB8v;=`w?ApAb`)wR}T?%`)Bw_YEsQDLT-5tGHD-l4iCEmKDy zWlPn|Nd$Kqk?~mAiQK6K2GxZFQ|pZF2)c*w8AP&s^lg`^mVpIFyCO{!JeUVhnL%b5 z>|VUsC!^r-1lVp6wN>EC&gc`LfHT5$X)8RHx%m2&H9BK(g~bIFKKo+7()#WNye*+8 zLvNzjCp3duv(ex`NaJ=qSCWg_R=mANwmgeohVw@SY|XIQgU(&fhK{WeRY#ze5#!+r z^TZgmF9_gXqc@t$L=G?8w2Eua*9qacmK-J&tV!nJxhHlU+ei<2IRNKXYs7)B#4fyB z$3Nl{WhPh&n9ES5jA83vGw}{cHT~J%=G_$f*flqHs${@T*2cn66}N*0s%*0(6>u+) zD9%uZNLc(O{pFXqIBXLsKe~czz$nvoOyQL|&XkUAq#UKT8V2LQEJ$g^3C~vaX;?GJ zcmvYUuo((m6f=G@Y7dds=d^@I!^w(Kyu}p7)VW#&N_?wD;%X8Q;Nq zTB!+HB5*}#et?n$ULVgK4ZOuct;RFoVc@JvFE6L{C?il$kw!Ei6B8x#eW=(j&d$6Y z8-cEkiPz>^2;HrZQdEouKwk%$zf|XSU5cSmaP=pCz2)h8JFuVw*&2~K8H7)t%@P%!$Fs0S}I6S06&n5WWqmqORLQ^51T(i1E zP!*?nXD6izRk6C{hu#r96`2~O+N%PeJulW8DG;NC%MX()P=|aO{G-Xcks9S4H}gk^ z+8QdWY{2_m7kR>1L+Isj_Aor z@A$Uio{v~9H_UVF&Wj@}$6YrCray-)i5@r>bCd5fd_4Hz*AW>5-Bk4kbw|SP`zHZg zxRQbLmmoD&-cz8w^SeR@{y$Z(!DJ54FtJz$s(ho1?VUAAj3F2A14B|#&2hYBfIVBoiN(J3)VfS5dnsh0!0SR(6lT-9deYg-3^18!%c2M}ej zP$;M(5CSxnfIZ?H$|khI?aI%Mor`#;yfx0!qixGQJGfL|eHS&av28@RZ<|Y3%>r@T z1~l!61*>%+%jv;#nffQknZCUcJSfFCxtCc>c)4;wOo+Xkkwb|Cr*S7=c%x^AXi8+C z<&SZT36*{a%$&&#wLdJ(>Q~tD+~f7GtPKnB2+AK05knvm5jFD|Nqgq#0$cAr2xV=y zm=R_T&R@P3RB5wOE9?W$nt1t*tjRW9u(WR7hj5Q+;y;GzZEpTm9i<$_U_7kM4>)>& zwyVb4xf&M20d!aX*FJDBt@Kd+>Wgf{&Qv?L)rTJdNC`n$Mt~=85KxtC_61~azTGcb z<@FndVg4tp1I@KVX%enAy)GX(x$xC;qaS?>xob! zFWz9rS|i$e+xLsA9qASt=C%MDmZ;i4*-igFyuRhe?Q(%=gg}^}l+~>TuZCE^7+(&a z0loKMJ*V&u=3SI+01sh-lekV^{aofPh78j*!dgRQK%sA>eTwYd?AP8`{aLdjJw)Z_G+fVv%P3e9VX07Yx#YkuZSK&*T zRSxdnT@rL?9H3xxA5s;OQ4r2vm043aer7ve+#iQ&Mt)hnVxrr7|6}-1bFswdV*!+F zO3I=iEB>?o>f!r0L~d8ThW6EzU+rT6?mKq7Y~q=xRAgtj?!vfy+V@)Z(1Os4jU4E_ zt7N=N!|>w)K8O+L$Qm6Bx{S95SxXpfwZ6Fj6A`rg7{3L^&51*d7A0= zf^oiWW8W7T{fM@!O7ULW0uaL{AnIEggMNUJd-Zi@>bwU_p|b7X?s&FRz( zLx|X5LxnZCN3r0|Tvy*0u3`KD6DOG2Lws4u0o5Pq4BxE9nx`@$A5XShVoCf&z`lm+ zcq^3U2Pa*69Z*p#a<2w(X0l2Gp zxLc*=2`^aud--ZFgjPGUI;V++|G>k|9y3Q|q^rgsE^+tXxGN=1@zcM>Zo9O5*Phq2(+96X?>OJoTCVNMglvXN!pk-lea3Z;qAv_FPw z?xo@y*&h#@Ifb!C@Z$8EFiBxo)4m!iE!OC9Yq<0JAs|b5YOw5x%=feQc;7++1*=Vp zw+Qyety`u>@jSGs=Zk2yIeSw`XVUlD4=5y<@Vs(jG1AB`7pR5Ykf(&;)Gm=N++b;O z2ClseR-CE)jp!bT%XFw_S-?}@@D2W9&;}$ z-UX(4E^vOLq_*Ye!}}^uTq`3nKskR{aoSG|&Lz@A#I`iJ%rDzm9}Ve{X52xymIQ_Ph+gC+Z!V zesktW3xFE9#XWWXsB*kx;I`8(NYy(bv&4{6Odzy8Bxj80eeku%6jDt$>62}zh9@Dc z6)NB+N>NMMTjXrMK4w#Xfp=%II{Wck+Oh(tt%mIw@q4PdD}C<9->J_)nF^-E)Y}|B zkh1mQ(vPQw$N~wN`;H-beQEiO$R9k_v&29Bq~dV=q6%=&Goflc%ik3TJosEm8khgo z$I`MbQe{e6`lQ*v5dejg<{tHaBbeahU5@tOl7fmeY^ke!GkIR;jkz_Nvy*ooreXYD zHSNQ&(KT<+S&K1q@p%F}QC-9U%}Or=?Tqq4#O@(4@ZQP^mAogag_W)yG8zw@ek=2F ziK#V6=e2ox^KJI8Y)UF?`wq-y>4R@+cbEMwz)!fj$&KDZVPP3KD`r%qAp41<;tK~| znBFMd(|pu>d71TJ3w4fJiL25^aSIjA#_YJf_?5Z7F5l)tio^XMt{DykYFEJ9ff%KJ zjA;B?I<43+J0cg}uZ=I5>n=OA{xa66i}rdq4IJxv(LwVdvn$dNZn3*b)92>g9c^9q z)}sAPlqT>2r%#r?VWZ=TPLn)3>2zCV|FK|#g{i&_H@6suIa*84{2u^SL8`t7r%kL4 zT4U*mh4!CipDHDDv4-aGx?sVQhA#VoT!0{CfkC*B2CrtqI7?o$RNJ-zX!j4_DwyS| zXw$=t?7gxTw_A~CY$6HZszQu5tcSu9$_&wSJG*9Z7UYHeaPD0&@e5W zDPMzW$@m8=mU`w@Y&^R07A>F?p9s3^U~;y#1*&ouF5;BAfXHy9)VmTRK*=*Sd9GoV zFac1?T7nmz+Ouoq=-a$P6U)y;=hf&fY3STj?belkyF22!SNvsDp=LsyVj>IFfGG?; zjbGljraSYGax+DO!jyQ>lRNnVWO?7PV)77B#Oxy`ZMAvYLA=hXwq*vLcFTDBf4+DSdLr&VpZ>In!l}nnk#%KW2iV zZ1RJHmfQ-Xl&j)!4?dZnYrA$Zmo~==*k8a{J7YW$uChF!)BMQ-TEM>PO=gj}Mj%22}&mx8#u|?nl^eqPXSGLdO+u=)`#mAP8cqR>1(c&zB zx6uC7sKv8fN+?uT^42z)l-mhbq6-Qsj<}I;%aek$sv??!4@ir1HUxAoGE$ zLR(oB+(lkd8zFh6ptzz}<`2rhkZ{|)UHO&mnp#406mT+pN&%SKC@W%YQIO^&1(vhB0c{+=D})M>Reg;;#~xd3HPkp*;?Yh)3u z5NuyRckQ_Nl~0*=^(9ADs;<(0U69TMuAb|Kj3iFE4gW!qfrxw4u%HCVf(4bNZo?+W zw#4>02up$d+V+%JdM9M@$dGjDh$T8#jkw}0r=oQ32Xb3N!Q{WM0`9HO!u8YcWnCxv zHf`H=vV+PJN@t0-JRSG7!24z^Rx_?;o8V>jT-ZvPLF}N4IT3D8J1D|JxTUa^c9@}& zc6-LK6dgBb^F?7XC8};~**D1z+)N?I6x>e)E9Zx|Ajf^&Fx$-yn7xQJMu2Y@rP{0r zPzo?3uOKOIrcH~YD%JIvUwJhIibm@qF`bn`D86eBpc7U~ez{PULf~A)y_v&pSsjR6 zm`M6J1R035kBY;s7U&EL9l$;JTxvR{)1xgv=#qO?<7=^YzrApl{9jEm5d)Ugfr>Qy8p< zsX>Y9xF&QcL;90q$~-}>x&aDHjk|{!$*hQ^6p&gHP0_3QallI94wlJ+D!uMJgVR+FdkU+t0&(q&-WZ}Ed#~i~5$li9>#H{JuPA0(Dq!qp>yf}3!WLenG ztRamSOqWqT%65kK6It`)3u=0k7#Zo4l+F5}yDExa9qgeLv7R|nG3E2M}i z_`1h2S54Z=Ai$KAg)E>#PS4!J!OCr9?QJ2rld6;l)Q+eHHT!@5gBpfe*8)E zragrVo*l?~1p)385*6+o3{5zP3zY=TCWYzVaRnNgcB|S`*pvl2C4M^%<#Mjj%+e9J z*}y4XFHA13@xp}pXg`o!1@{D$uqNgLaP^3m$pH^p5SBPgrC281y5^Io`4&UpE3D`_ z%NiqSdM$9dXe)sWJ4jqy3QNV}$~-KV|0FCGVaXI~m%_lsWN?(+TtvUY-In96oF;9F zh?OZdZ;e#{L>V}q5F#T!WJxYL@g-e0b16(A`nZ#F=c{iBEQ(kwR<$VAb5Gy4w z6YH;4?Z4e~dLG(>Zec8Gw~_E%LS|_Ozp-vm8j)y%32BwiSg;V8 zZ_b@qrc3}M9y7`&a+GtNy)z*o8t(>RkY8l{6Fv&us9X><2~gU~x7Rk@1SQ2{U`gHw zZC3BZ+MKLsZsDaA_Gtm-S3YAmURtv@3n;&GHT0eEvuITaVlr3Xvj8?E#mxW_=;od^ zPS(M>N}H2Ngcb-yl3*O2l&IB~X%6ocM&!*im?ikGc^5k52DXP;Hq?tf%s%@pinr~- z3gNj_z%8_Yjv<}9^7{FSFM%g#gj>lz4qvB*WlyDi=L560oOWyBwd$Iv=7tezAe!o_af?b= ztoIhKhK1D|I=DE?E1utokDGK3BFQMGpRpcB5JAiq$dZ}UCYv4GYO^piujM^@1uIMj zKe7O4qa=Q(BX1Hz1;|D8%lHW?_E1 zT1Cl^a>f5rhUn>WeJz%Y++2f$n&z~`Vw%=#*_$Cu~n$pgurF{ zW*WFIh!eTEAA%;>JHR4*02C9l;IT?5n@e7^ZYp!RJrxsie7LNcBF(&Gs+d}CII2<^ zgvuJ_18U~1W^J2k6+md zVP$qunBuiqeux>SjCX(x?OB!LahB7^U*=bJi!-KX4Q+SCgr|oSofq0)M_0A~Qs1CQ z^O!xp4;Ty}yP@*TEA$*z(r$wlALx8r0Dn56xWoFWcKH+215~wJBW_i2a7jRCxXN}EC2#~Q zRcsnnNmV&ZVV_ArVa>|xH&rS_>)B`EG^0l8=Zn2viUBcV<(}Pbw$H?r@stdoRFyn# z`Qyr{a9(I);fN(V2Pjimri<&)_Atxk9Gjb)tgP-?L+6gpx4R=QOzx62bTMQWlVUKG zU%s+6+0GFbqa|dy#NB?H!R5WO6%B2Y|Gb~~^Th9yPVUod2Qd}UUeN6s9hY|dOl0|} z6bmDQ%mGjgP!rXpEx)#62&I#(f?;{X8*r2Q8!p-2sgh2-8etZ8C}8*|h_r8JJDfp^ zFr_S*e)>d^%C&biugnUrlZ1wxwN)O$^9$1eJyDfPVJ~7mOsST_SqN_7Dyyy%Lpck< zO{@i``IQT(xo-koBFFmJfX1`9XQ+|?xEPc3$O6jtIbo$|uXbNCM8MaxTO@Ker?5=E zP0jUYQPk(Ys|%Cc?ucg<&T_9(wO6&j;%|2b;9lBc?q~0V4EB_xK>p%xhb%?M#dA-x zb2itf3T56mtXN}-CO_q;{1j2P6qdBx``AjRP%$jiZYeBGA+WMAmXO8dEELU(XRaD> zt!5ReUzo$RiBf)7yr-zA2ulH!Mp7Y|En@!K1~G7|&@3~*j63fKEB_kr*G-yT_#65vXg|&l{faa_R$WH9%7AAM@ zj#$yWM5r^lVKr;DQfPZ0X9){VOgXI~*U4VqR`YR|6;BuzpG5Cdg()8PeZz|W;3t+A zRFdHXv9`k+0F<-2IxI|~GMkAkWi}I83`d?6%bnq9VjHh9g5|%SahcmvXa0gJ$c8LS zBm*lYfTYH0EY#Y74zPMP8H(JsbQ|S~3mN}`NK&PBdqJzkn7K~D>{)FE>@Tvmvfis% z8&x@XK3^GxRoGv3m0Pj4tmTzKs1O`fs$$c;Ja-QLOB8AU^u^-qHFCC34C2&N&g!3c zQWfnMeT&MK;;0=g422!0v&=oTlkGH=&QdnUnT~iHG#ELZwOCZaLQx>X#TvR`$^gRH zsG8?e5Kn*eMBD+>nsitAl;F#Ig_RoDh*TZUW`?K=8%M9CK zTj3P~G1v-WuaI+NecN$HSSnL;RzF&}_oc#EV`U0U$l}gnqCxEXl_^SRDSZZx#6ha| zG7u^It{Ahz^NQ0$=1Z$fN?=WF*N%y`%PqW9tlh31mBKy)_QS`SKWA=X^+ejY5dF~t z4-fQH%I(~8tq0BRe8xo^b_6k}?USA|Rb}Q+n9?SJ+Ayw%20{m|fqSN{e7rL@B{w10suZlesQld~)xvA$jaVVcxx=-pP6TU6wI$a2ya4N|3xP${Wp&Sod& zI-g&8m3IDO`pkQUmD(Bwpo0jCD;)0O=#}#W^EbCe8NyP4oL7X!G;VRL$XF?JOHr!~ z62fvC-VL<~%XZZ{SD}SzZdxKnNdNXq2tz;u<#6QO9dRKovxc@Gi0dayW%jm1TWa^Y zhuK>1mb2XIENhDSn+tVe0WHK1vSbJ4Z!V1GteNn|1R1aLEbkRo+)&73HY#UJRe7nl za={()Esle;&~6gFUcAKZUMXZ5h z**A-TNE)ppOQ&E^2A8$bHBDNpS@D;1qnsza&&LoRIj@WSpvofMQI*A~TzE?E!DxMNa8Kyv!YUMtw;Q!grp_VR4zFnA{Ud|c6csW*N z0l4)-(CqqWJ-y0wA}li`3s7Ft(B#`C4OI~Pj0ybM;r#rp{`DC~kfkVRbCPZ9Z=AFN z)0lacMgIKEYkcLC{=~cc{CkC!HL)f$6r?h*p3}poP~PagLXc&g1*S+xWJ(xYXXtnI zI7u(TqPk7&kz!b;uvD?_jA2=+!R?sYKuKOH`4tl}jv<2U6H^?_I&&afsRD&_OP>(a z2y;{j&I~E~!+a<(Yy^JM=oO|U15Fw@HyAs2?N~Zo?$0VVT`VBqbt!YqpU&a#md>c+ z%?F<`$2^)AF3={A&&8d5iKe~J{5dh@7FLQv4q2R(x2=WQl~vCwXt2UJEg`X(?KIS` zvLy|<$Yo>M+uhpku!f#jY#KU*s^<(p|JivJo|13p3`)T*^y#w3+)n1pXHKH@?q>cw zz4H5pm58^_VC(V+3AYvPHq^ND9zWhpi%5hxrpG4HZ` zWd{`k5*vRJOP674#@aW81+_=n)a&e0=NwP8sCWC3&8he() zzSM%gg_TQW?Z>%=pARdEwNVulDV(}9AjQ3%OLPmeC)J)6j;m(Pov>0gZGf`y{Gw^6 zs*I=H$yQES$r@r&`gJr!L{c@M0++?hEf}}LfC*~uBy)1s(2BE6{GNh4WWoE2U0O)w z5;!iz;quRCoaMRUSs>*i`u&p~JyYnyeQsy<7c@P&JkI-um9-swF%`e*o4%>&l>y4b zB5r>LD;4N>;?=5!`&^P=^Au!tFC25S#U&g*@8j(4Sn)Gtc}{LC*fXjUxUiU7E&YVp z8R)Qlq5>I=&h)yunh3BpvtFCesDz<;l@s8etU<#!w=0ybKoF_ zsLZc?8~JvI(%u)PGQ(%CpQT@3gcY!YxV5X969+P)oq>o(%h8qvv@p4RY8Al(f8#7e zmZgU2^jn>!Ah%WRzwC~9nd%qIC<8g)&}H5B$%-c=xSZDI#W;GH6TMTL<*i@*y~0YQ z`fN>OLRF_+LM!0(DzM@+Xp0K|{6WT9gKTzCw)Yekb0CvDKg-gBZ(Tyw87QrJQJ5!T z$zW~?0wSf$XYfy>qs$P!Df)6b+KkiDd#ah7TJy8h14{tM|?ho-f~ zMjd#HW_MYgs892n=ym!pD6B9R zibwPL+1N9)lUjVS_21VGH9nvUdK+!UzZili-YvA?jnmud-TL_?-fVU&5Aa|t!VdKOf|cr7q@;SUMDt07j^ zpA=jsQYGe!tSww6N7dxy?OQmaep?11Az&%X=dK-@KWAj^qTt-E74l?@&bRPp*n7t_ zY8Ipbpe&#^Xm$iKw?X>B%CdgiiX=Vd^e6`?r&Bq$a%%)Zfy!=s*xj@4FiY8<8gQA- zttA7OD&S`Sy3c@VNkfInUCLrv7>YA2Ffzz4Fmj=8^ETY)7;+KCI>g#kz@Z$D;-}(z ztB+TDYPz*U(-o=UR>PM9Cckix4+bk|lLiy;op{HAt;ho~ zjC3S>WZTW0i&zVVuGOgvV@+Y1xlw3bPTUlhjjc1!HMSD0ES%p8Q#IybWkPQO-8q}% zEGDfVwUn6y-BppbSwNRvJ1%K*XCb)ljFk~|DK2?hKz?GYjY>x7E-xSQfUg^snIsupS?aS=kz%rt9l-u0+r0kOtw?@_Q;h1=dg^|cjh>VCY=q2@j*_w8fZmPwJ3%(0lAzFuTti3`E2 zhpje{cR)Eb)B*;8o~@hqb0?zBXnlm?ypIA_%s{+@e9K!*XSprHlJXLi%vA(^U zm*zmG^#W}hWZt<{6)UYdYGBoh8f-%^3(jd~R~L3m)?g*CP@Kh^tP+zpIcC+ElUK?u zT9SyHscx&~v_fYUi$23uiZ{;tA#0n@ zEGSp){-6D`f3}D?eYtvtp-BM_8ANjlC1lK%n@gy|KTYE^G%mtY3`-tIq+`j4!HVAX z>SMIt)vt`RB+6t!Iq^vsrwb%Bt_(tvwQVrG%8BQ`g|mRpo!c+_7GBCAac5Cd(0*pxa4Cb`kYR4>;c9^na*LS*pE&;XoMbm~Un_81>H_iNtX;wANO{X&} z2l`u1n3MV)h-4Gx8=8CQ+z+H6;1`)3&t>~L1kbWh=`7oKwP-_~nA<+0TG_znwp#-I z_Jj~wQ=WPoPPYwPR;1sJ#~FBID7m`ydu7ro)BaIpmB83I`^InlM%A-VktIyY4$3~NK1-wqi&0$?jEs(az0aolM~U+-xuyzHz%5S_BmlC*Uz0n z`j-%u0A*Aqk58|DJ>44gd&eU*Fiu0D`P@7DtL>r?6Zmq;b)Kte;Y-c%=Js|eB)p>ri*1kAxtJz;X||wL0F8Y@bTx&GsqcF%`+fw)H|4)Z;1b(9lSz z26G#~Xj=fJ>qCkKE1a170YT*Urym8ZY@q0jZ}^69_!&RrXB2vy$pcCvCMRuiUf{ov zK_byBfWyFAjlvZ8U?uS-OItUeo|nw*wy;_~$~$-S&8R7?J8fkn-nlt!^5X?yrIh&v zRvD3|f!FezpwKqjW+}LWF$|6IZDz6``oHc7-T3sbrfrgHWwe9zO4#!($@zd_j zl4}|u@C#9y5tN>CXKmU`EtLl%-%eODwM?+cTF7F>b}2uhF{dd!Fk##?movN4tX?|e zskRg*S2Aar9A}PLDV-H0J$FYepm_nf3y&-)sqhmGs7asklplH)0bH1G!>n=*Q5C;v zyal)g{^srS$Q4>HQmI{E+HGnZOBtE%Fhvw&D*;4{%@Wftl=BHz?r4FHa>M$^|M(yO zGk@mKge-};<0;XW?OV1iAs@h5%ve2&51-Xf^A2om6@qEWn(0yEiJog8!W_C0mV$1V zJAc`{DkEsfV!$=|5uA3|G#2wWmwn@hj6b)RMV455-i9%hId+MxZG2z0SU$_^U-Ffs zDn-hH6*pswdOEi^n|!T3BH%OHstEnU-p=y0n<2r<^Rm1zg7hcTj;g$h>*w?<7oXB$ z=2+oPo;wwUQ)ZruX<<+pFy~s)E5-QlC`|55bS@onp$5et4$zadPGqU1UT#4Ro6Mo7 zq|TFRGr%nsiNvVNvga?ZpAyr0*zpttV+_S@7y}_o(GT#h1L`r6T*2!?1e!?a3h_w5 z9}<# z=TXi9WP+9cmT{c6Nz^g11rXFGcGKk3_3Tt-mgg?k9b+GAC$+cU2 zNnzPWGcRoH=Y9dpg;BMVvAG+g31P$wm(X+5y2=^>$~cRAwv-k7PzAPB)f~DeHVL58 zAx2)ib`-E*#>$yY0NTKcuap28X<8w;i&%SGTBRf)N2-eZAsLiga4v2`7LTJT&?qyl zn73kT^8po~vf#Iqq+EE)5`Rv=&n4w&!6|csL{+ke%yz8-wJ$61eI)B#job`tsMzJ% zzl)Gu0B&J&m#FLIVVSg--4S&`OGS;TwcQL{Q1J(lRW{6EV*$+p1XD_M2!#hL)u{?r zJf^iIp3;U>an87XvI5#|Q8tf&@pQU`&eEp~V6l89-{!|{ z2v%b$zG~j0Dn_9}zohDZ{j9xuZpya+Eyl~8m~zo;M^%+Cm z**K6yYFhQ>ie9l@`b`g>t3Th-|#Ds$OxLX9OLy*lT$%S z=k6!hm3(ytAsBBRcY@=8UEu$+~|wjt>@ubRS=0TMvu z--)m+pgXTnoZO$HIR(`DB3@%Sx*0cC!J*38=8ZZFf^650OLdjlO3-#Gum2+Y?s?39 zumV1Ul`Nog3ysS&D*PNVW)4g-4YbC5$>%2R!A&#drOAXBOc_ZjPXXnL;@L1@}B* zCAKnH$p;i$ss2l_(jzCV%%eP5$p{KoI`rM;=zYlITdoQ67MZyjbWx_>5F=jW>yH9f zZf*YA(wfXXEOpgbahRXnwAG#FU+mQ~B_2t2ThuffoTqs{=Cs>fLJPXRue?)^#t2Jt zX)0{h5(-6GrJp)=U5l#tE{b82_@YNMP~25ixu4F>S!C_PRW2sjYSx|`jJ*o1xX+cs zcJnR^=1%ixD;O>VbFJPmWl{O5D*hSDoZg=)wHLOse8M|nB{acSE>S8`mC}?kBaQav zODis^_YDTG4S*4r^tF?-%v8xA=Qb);i9wj&`QymvX0@&a+0-$nx1ngr8GhpNAoAD> zSedYLhU(7<0vo_C# z@4_ZmE==>Bv=J+KZQ{8Z)1Y|J5tfpbThC9PvaLDpj8eHxP+pGmCRJ#%d}Sxv#Ek0p zUV9p>T2hXD0k1$@?>F;XX&MRPOPnRIvj@x?ib@odW_m{)vS)pl8E)y)m6kCBjOX#q zVI^%P<7=1_SL!%1r6>WI;%E_a6!wD2W({5F-X)0cHF(GCedSTW$|=#EpzD3pRexI? ztn;QNo>^q{!rqO8rFh`0CbJo$<6Eg#Enx|-RZB3V&cyjZYV|0qPFQ5rd;xi3@-l9B zm=jsDgY>I=V95BcPr4;_u&WPZH7hkf3#cuYb8lB{bu4LO?OCy@(kk--y@tvT*=C&x{ODH%bjl>?MwH~fm% zMd-gCVL9iLr_)f{9I})d6qKZ`t|-q!nUcCvc1rkkhbFnH4qVDS#84R8FvYlH0kzLJ z3&^?^1-4d=t>j(4Xe;*_K@Y=4(Z4I;VlM-r5*3!5pGt>t|7L$r`6vZ%D0XG%UKC2~6=2-ar zwty(ewQ|bk4M$i)mQ10R$^}sSE9wMLyl*NJYu$z)4a*jcx4jmNP$+v~PN;q~_4f>c zTe+qStelaxW`Zxeg6Xl)%=NvtwG>-#mjV}#J2V6h-FP`Dc zb61FSu;sg`R?5g`#cK@i2G52NNJT3^K!F7yzyMfyK(cbTPZFeg+hZyG>THy%8*6BT3AXCsWf3D zsgqW!TSw!WfmYD%vV;n_EXQxjgr|1v&I6YS3+n^T@f9ni3G6mjpP~KtjNQzx2g)Es zRTc#kRT-?DuI1^q9af+OR{W@RZ{52&EYUCuf;EIeYU?SXmkU`@BCV zRT*1}syxG#&wZ{cN1k!E&ud#i=dv`n2vBHSZmUbG${BszO0z;=ReQ)d)jRG@*P{}u z`EUyedqY)7HZY}YCfS}w(6W~AgB4d!W(rjYD|vzpgH)9q$yq>mvK3HbWX5fcQgGw* zzV4oN`ekkYRKv<An6j=z7OXY( zG^OKAJ}iPDJE#KMi*vnfvbh>R6=8{9#aWOVlmQ=UKMEAdZO`l~TzzWJnL>SrtDI4A ziM3Z)d0t+Bfp7)aRtCWcGe9-Pg#!3M$|A@(qg1BRE;}w^C0KECr&IYXq;jcyaEYUB zIxR}YhyA*?os_l-@P^=WF0iH?IDi61j$SBwC4AW$vjq2KuS`_))@xx6cIHJ`uobW( zG)Aa23rM%ZlnbnsWcV;!sT~#$x8*P$Crp{^XG-m91O+R}$zJna`U-erQ%C*ob2+~@ z`}m|^d=zZuft$t%bd|o>X9+7U`?`ODl4tQ0umTJ4f8Wymd6yeTV=l%P!m@J8rnP6NIe{LYudqyUm|l1?N{@8H5$A zUB0rDoKvYP?y3#O+$Z(gNG*J;=8aE5WJZD3%h)-iX)lt>)bZ83u8jVrIMXT9p7}l} ztYr8sLf=0jtY`nEgY`8&ZyARy2xD%+mCo3ZfHh2^21A|!L&$k?3?iZI`HiiB6*0B! zAh44EQ6dt~l6aQ}yc#R{m{t#=PLBuWZz>!v3#cNPp~*y(Y@gnly_2w#9Tc+cuRiGt zu8iZH-sKOausn8Hu^#KK0%XIKY9J3*=BABhq@v^b7%V?@8#6~(dY$ii<(*E#qQ6t- z(>v}|SS~wkZr`Z|uoN1H&QCskP$xJw;uuu}Z~d_V=u zFoIl@SUb0O6u_`H0g{bN`B~ym8f`M|nM^pPc9Cxn6nwkD%G6oIJqfI}+V!mjiy?Ro zuz1C_46MYwU3_d2-_Ra|_0g&P9g4V_S%|_tK1Yfbm-qyz+ zJFHlQby!~E$t%n2sjk{~EM5);X~T-Gv#l+&gBn%yH?LYkGEFfo@rZLAP?P3sEo`E8Bh zmtKciYM!%S%G{aCR?Vkqi{;1YGWqe5@BGg1lri28a&k& z5B04;sto3wK^2-@jB>8DSYCEwZtN15jaa?U@@2G^`|hZmg#`w_fR7kT#Kh|ZuwqS3 zyDb6Ywav+wHt9=0@YrF+)G`$E-7J;s%oeMv0E!V?VN=xfy2p}OrJtp=Zkfs^I;$m| zxo4}EfcUIh!b-HYr|RmkR4@UcwB1L(QqCYhYVeiYT4wNzG6)|bS4z-n0U1fFA(RD_ zS9_6ow*mVTYs*(Q932o!Qy5!0)Z7oCDe}!@7WuXy{oDFXOZ+K9^b(@-qW2o1J%ZT_2ZM6dgQSnE_Hb4O@%7e-M z@g{lYPFV59jG#;WzV1E=OFpIwBMerIu{;bgMaLOM%P-Sq!kw%iZ9y4l8LXTxp@p$5 zz#mjWa7$n_|3e|mV}}*K$A+3KzYv&<>y*1@<0bIc0t0biX1=fr~Nd!W)A-ZE?~uu zF{!q{?3evA#?-T_`k(nsY=ybx3c*w1jw=m!$qcHj?Fk;gI*({ZtyF9OVfQzLC zhs`FM@^bQ*)ZAdDEN254xQwv8pQgUt{9}g|)1y3&6IQCn^P;f8N3gQRKOo>BG#k-x zghk(<;{RafEbnwlmcL{bpDD#>arS4yBhRDbf|XKljAM6LrPT=0{8ok76nD2maH~o; zLbOc9(*bnBlz7S+u2RifEe2joaa`mZ01Z3x%`b>{_4J1+d4KLJdJwGKXZxHHv}f3x zr`8dE-BZ^-dwp~4c=!q_IPE21{_Bq9Tigweg$qUzEco8<{a%>D_Mz1B{y5q;6S9C6 z@(Nh_!5{oVup)GYWz7?`(3Qz6*+B;C?4TlpYSI;*3|7p15CAe(vabiZpa2#V{anyW zI1)pV+%6TM7MUxyut!=R+~ zYR3r6w2x?NRUj{Ws?JDRh*~A!+VjEDJ`5xnLzaiT8XOgZ+pZn+D{qVCbKk;MQO%h> zsg`co)zUO=t2z#)4+ZmRp#)QEp+SurKvf zw{PK8;Z&89fO2M!n+#S?s#2H?(Z{_RUhb`NsS!N&yvT8r{u#J9H{qiymx6CeDrXwu zeUWdssmULkKhGS?p9`wA(&_DfKdWfJ;??ZcrD*_Z@Zz{AC zRutb*XG2yYwxUEKw({ZWQ83bajLAFYll|iV`K?o9INmUuj_;sJ$PC)L^P^)SQ>?`{z zFVFTlT|VKhJ9%Z_PMP-3!nF7ClpLsqsI)9=Oh4pV7U+08)&s#if#$yV1B(a#8pP|D zQo3~+kTpCEj5IPm=uV(8*UyjpaX${Mpe_8$*a{=4%7kDAVL9a$&Y)*@&~teO3(g;u zm7Q;)C2*Srof(@2usj2td`Jj%{c{4{>F#iHSF5ju6^p_DapXOtCH5r=?GQ|_Rj(;1TMdFp5r_7mGd`O zTBT{@3NEF^EW#r9!H0H>o|N_ypbSYT? zT@^+U!XkPFvXEC)a!Fo!W<&kZXV^g{2W1Bpy#iJi7dOI^9aPlPYH^tPhJjnUz{)KU zctGIji9Ad6^%er-N}X?HCxf3Oa>%#-sLLgT=EQ8i?k?!9L#7% zHB$^VldbNLszh5BAm`j@D0sJ&vnp4w`o^lvx~vO2w)vrPnV!-L?A%V1*InP@x^H&{n`o^2+R>g5n6b z)(^Vxat`wcEt~nWt6?p?L^jKe`)p%|6HRVe7z*qr@vH!4WfKa|4O1L=ibbV$s}%VR z^Y?!|c33eqk<2m-3x~4^T&$Jl>}k{LQ0T3ymKa<51K1-t2Eou|xgnWCXSDT#Clw(s1t{O z##7LciM5N_KYc*Sx~|}GDKiQ}nbJk*=ZP=i?JTEqr}=Ydai(Sc%iFAy zzSh&c?$8+c@-P2#!L>{w5R;FYyn?WR6|uJ2K?qB3=Io#pmc_;8V7e$QZQh<6ZrN4M zdFC*TaG%S4zrg6MMaz|^@R$*k6G{dsr4+%G7%?N%!hpEFe@yuT&{hm0 zio6(AP%L$}0i6-l$pUI8)27s(^{&svpVOUuAt{$wmC^`(29$WBrqH%1AEw+!l%KG& zb2vh)@{FD?ks(Jds~GbnYu)Yif{4J`w8b+#_Z zJIhhmYXmT=1!5(R7dw4?^ncY=z^n}bJjlffWG2EBtXx~b5HvcWzzHiWF|BXTRNzdN zocSeIWU5pOzbb9U!O)~gmSwVzu(ZOPTG>Hnh{d0?S$7(saLRN7AJ#7Rwn1jes$#B@ zlqD5BE#K_4t8>uiWh|P*4;9zoar~V5QxuFD<+e=#D0YgqMZx)Ni)|rrV5q&y3@pF9 z?S3H30#yQ(lc!vwY0D%$C6yUIk(B!~2|v&8^Bh@R#BI2-3q3g%mQ%QOUeR9wp@oy% zi&D?5YcJ}_PjR{hA_pP~Qc2x`$O4p8zDs>b0v|^EO50TO@BG*w`(wF;s*bD%J7fVX zR9iuDqWJlPisHA56vbZvi@^X{3gi!2Mp&lZt^!NW=0dtNiglSGdTXtWxwtovV=x=r z6HqdCymnNwA4qjr3)>6Pn;%48dDKP_$Gd5uw+1T+OY3mOkb;%e&|sx3tX#Ggug8at zRDA<(suc(VGJ?tv>L}mLI4H5bjyFBb8U0jQCU{|BF}b}ORo199;ANUE*{oc?cyEE* z%VEtCknND2WnppRSxjA@_t%s>1Hw9XNiSTqzUh&Z+xl$GHS63nq71`SSC)FY7WU z0tj|2Trit)d?XM_nVKtYrHE5xo*~OeknOItyok7O`Ic{~3_E8KJBTx=DE{oAQ@CXZ zrLZ6@kR`&BTVO7s#={xIQgmFSqB57}KMIC(xu07I(16B(zb34}AV|@+haLN;QOd*E z{;Cy-@)K6X4=iOg3+3aK{bEH8<* z<0+#pF^);XkP8G}QGh^j1xMN_bGz`ivp0Nk zcqmV2in@8Uh2ed1Ew|(%^UbbsGjYKWr9HWaUIEG~>EA}^pQR)h`Ih(R0xKt5xjXFb zIZx3Y7G%9J<_StXLKcl>c}XsrGt1;$NpPK&EE4;uF7M7GBNqh8v>6{c{qcqToTVgQ zH0F;y3t}vk(bwHA`h%+cgrD#e+Rj1r%C^%KYnvUkxVY?~3AcHgS?gztP}*%yhO&g} zl-TQnZWCEpH;~lRq16Ky<3Ed7=b|cwx*6wVB?A}l0F>?7T;27G-4$>Bo{vWjE1K9` zrGSF`oI#U6R^7S)v!&Q<#Vf{SnR~#+BB^5xg|_UCs`R?}Ys!m3Koc<)O(eZ&8~_x{ z7lu-;4VaStzi5SpDs1!JDHr(^i&l71cI3Ic&%=se!m=H3N&dHq40V{M}H92_EE!%zBglaQf#F%Ik|!Ftl?CJl!`@K z6}OFUegO-nvCcb#vR))x7LdbIgLhPirC2-C3GaZ#sv@Rd(`C<)?Mh6+yB4KX(xz_G zZ!3RPC9!6eceklsAua6}(}vzyk~d9Y6F!4tw58Bn^R4PCF=SscS6#W}hDZu}vbqPm ztBXh39bSUp7M~InPMXb3bFAWIQqhvgi%532MOeU*WRZm?2OP<(@sViAMH9J@k09!$%zSNU!97Cex`Sz-xcX+ckDb8!% z3RY6M-t+OOVZ{Kd5b0p0g2vTwGFMk@rG%iuVGCQBabCazCTU^RxZ1sH2?g&r0?L$+ zwipd&GNdr7cn9!aA=}m3i1eZ=E40y~w6b8O!#8LyRW_n33BcQYcSFSep9XWwQHHb| zHuDXXVzE;SnvI^TJTyn)UMBWDnkA$(h@&d=L&c$>Nhi0ip9n~HkYCSFG*hl@$uh7s zb-R~nVK$CI48-Fj?ky=~C%JeXh44*VofR`C5|mux0B~;6`U;p*(Y{w2N+_r3HgykaKE=8!qPUkKkDJ(;lR-M9FPWiUA=Y@g%e0VG! zzcFxf5Q|Xzt8O)dBmJj4_SZ1QrCb(W#o6C8raX2Bvk_^k>l?6A@P4qe^kuM8)uq7- zx_ApKt&Q-7RAG%mOyEK?ZFW#6i7a};DkP5EsNzs`r2JPNIaQ@JkW=$NiZ)4>wZ|VUlf1 zZ6lcB6XeaK9B@QH!kXYFs#T>3cMIc4A^Fz|-irg4aL}<}vuH?6J`lO^k!+dMs2LME z$;cH)?t+b1N0WUUthjQog$uY7Y(*P_4{>oqSGbwkLBeedU||O#ESHGeQiP`6wk=te zC>vClFqV*Ily=KccwOpd;oal2!x1NjO$*ZA3}X7P52Vl;Dh}5)Sxko~SoypbumDzF ztw@mc)MSE$^ao(2N^3^HabNUm1KkgpqGFjqLw=m7O0)%X@g}0dMpBHo5q4`{HVMNTs`fGMj zB*m+?8myec3e+gH#A`TM@;(rB1@}|>%(j9KK^AEi`&+cg*pn76R3x5KMBk1nBV}Em zWF#r%4nFeST6yu`E3%PS`PfJD%I<+a3R##l+{{=iw!#j|&0JjE8F71hnyoi8g_eAn zcDpc^Q+dd4&iEA(P~ZH`-@F7f77#1C>@u)Y zkU}-VPQUVCW%V`AMEHCtKtX>uEF!V#DJQ1%2!%W?BD=IE9mVyNO+JN6Eov zG9b`saKtTTj-{a0n7LG)q!jVBnM$Iy? zr;Lmy+#!p+iZb#lz~M6|Bz^w*@GDp;?9klPP}s`1ecQLOgGxI@T8oQ|u$-ReGpCtl zU6#<9);wfMWXaj=$WX02;w)kM0ufes;u*etbfom>Kn!Ab%&TaOm5`Mx=eM5N$`w*g z5;B+>qCYZ%oD{j=x>`U{I|L0@3Vdjp4OT|Qjd&y5&uDQgj9!N(Xp2`pjqVCtX!KMT z3|ldD%7r&>PL^A0879^36_tOM?MdfPtepikSh-M@=t)$?Yq7#X44{N8{mBU);c7l_ zCYavs+ED_YM}s(cnbyd6wn*P%;WV1>YB3)uXz<+W8A!p7KqPMBh?2~ZIm1=QL>4VF zGSXb_pYAie<~qsmoA#ebD+w%akLT})9k)mEgx%F%J(_``*?-bc`bp#!Y(?53!m>IE zx1n*DS<$#(#gE$Pg#`>;NqR67AM$* zKY5lSR!uI@Q~fHdpCRkjP|JClYb*t1#!LR`n8+Ernk-U_O<28EST`q6AI-Bl{(SK- zDx{Oovu+;b8n2<1ytv*+d}KIsI-bw-#oA_zxx?6&HuOqQsZv~Nhq;6h7Q*dqEPp|_ zWeMT4d4X9(r&=mk=~aPW`GJU5WN84_7>jXk8^ zZ;{)cVC7j0ENs~%(KiLc_^IxCDU_$^s3VWqsXHk~@lmrhtI*eMIBNRa8ZW3Y1rIQv3ty!JDJE3q#Mo zc`ab_fE9gk!pfPxeD1$7SOL$Ah06$923koX(Ou1rvf`qoS*sI6+PDELf)s)kvRtsT z`WpAa$~f)mU2aU=2`kfUPgu$6gI0tcLz7h)++I`uqK;yi> z&YjnWYDU5ntbASzSl9Kn!Q*j8g|*@9zV7Q(x23Hxg-SkT8RZpPmQb(~VX1)jwmm#W zmXbVj3@uEqiW!AFMRga?a+?c!5nPI9E~ID)7R4DwQmkjWmfA_ilRm-9ixwzB-fCR2 zl`NoO1)^)USBI6@eiN+VR0Gs2Jp%ezmww_;{D}q)qFcRnlCAKB%9j>QS#gcrKzABJ zw`^s?ey|b(E@)-2k{f7xZFMwGBd7xFRTbIE)Ld9oWLk*O4B6yK90@Pxpc#%d6)!k4 zm(9rw-ZB|EQRxPu?&Bjt$r&tn0^)tFWb~xvenhUIy33drrsSHm>&@7Jou%|o;Z=`-J=WUitXcbtKa1rxBOD1gS^Q(=UUQMIb2u$EDZC9Z~(c0Xa|+;lQ8 z$q6glEzDplT6`*91+1L8stu9T2wML8;t>{?T?AT@2xpY- zJVC|6v49o=w8QpnWXTk2yN^|PTJ5;#Z86z7hEA7r#k5zJWwmb?Jh3p`>h)C6?^4R|gc$4V4(~Vc z3QgkN@LPu21BE-^9gBHf;c#mLC)N#|ux*2bl>#wfO~qEKiqJk`#k}7KD;6sYnqg;X zmU(43vVCw}Qoqqt*&Yj#v2tq!O|o6w%B8GE{=$aB2`d(pg7=f?SH*JMj}_-ujhHmo z@ZvlYR<>j2gxj1%p4y3~a8exli`V&dpX0>6(W@uc+~CeDCEDCYNgiza!ax3*Dm}Oq)BIQnlr~s%clP<>J6eyrE%jm3XzL@C%rJ(9c0sElvf=|V)q?j=Sc$4^Lyxi|8`fnEu0(6#G7Bi&>91385tdTsS%v101pk3c zn#c=s@lkl#15xm=1R@XmeP4x@%&xgOeJ^4DvujR4WOhyFOm6bxZbn8<1c{Q2kDO4V zwL46_j_MBp9ZvxxzTq3bAy_dyqAg6J0_3Xjw3-QN{FO~;Th(-yT+VH-inDAZ#3H=g zv}|fi)^xNb9rwaq!k4p>j*%AJbX5MrQNf)m78Z>2{*TASRy_Y|osvH)wvx6|2!AEl zVk_4FHVKQZm|ct9uj+cmR&p>Kg$8a?KjWGAC#uqLDf@$ic`5MQ8s>~!Nr5{z^e%L= zp>UB`W(O56$q0(Apeh9f0~E`qdn1Tsr<6SiVyeX(F*${mkR?)6IW-DPgvIq;T-7!0 z_9A}dxu>=~U9V=#C(ZQz7(+gvk~|P*b_U2@95nOwUR*OF$SJQ*8Og306B&-2ATkbe ziy$P}lZ=4x5Tu;%DwFC3P_DHdI>nnBirH&~jH*DEjzpHiSjrW;_?s&qXEm~J<#L`i zG@a!vp-{P>be4*8Y_yTBBVLAd7%UiEl5(;x)`SEuRG>;Be;%vZ0fTku! z6pLFqVP#bj1}kS(gi02cn_n_ZRK;slMaO^DSAA80G7n;rlu2=`w0;SPTgJz^KW6L9 zNmwrO%2~sSKbRDPsxWFmp7{v~MpJPOfo*1^KUG;ibv7T+c?2t7<7nms0hlRNwMtF* zF@l_&EQ~Eu9y{A4B8JU;&PPO%9BApLJ?lfvnizcHcCNdf_9Ephx zM}m?-Bpex()W}0>t?jnC{Mg7sSCVW8D-&7r3Qc5L*@RZ3w*ClNW(~zzQgF}c{-l%PgY`%>j|z(xFUQ8vfMh%^E*vQk(^Y-!+t+*MGdQVq9u#4OA>#Q@7GY zOJBagO4>>ZLB*J!>B~l{RyNe|TL(gGl*Dh@%wVOG$a#V;8`-r#W=3*#;TCAST#w8C zn1$OG6!)Tx)AQ}3&3|y<_B`NrayYxhO`87h+^rh@r!(kuGY2=RGcO3s=bptJ6CFj| z##3J8{?8P;2UeabG6x^Ibu(Y$Ru?&P2C!ZN&!&!_n#i59$i$H%_mQkb&-&ww)an>9VTeFF?V(vb1g*oKnk_-H@g1L{kDYGBYbH z<9Sz7=F*=vRvCCp|EjzJTw6h>K;?OC`qAM?li!hA$xSG9C0 zWc6sV*llCDLb7XmUGah3mG{zk&}$1jAYKt zqFJLYbu$q0dhUY(i>tuqFqY6gC>E?(dmzXKQ!A+ ztneIJ?lg$n!73-wmp8I2-(JQlr zE3Z9wU}<9|2T@hA72_CEn8uf0AHM8__-Z}(IJth7f0$U?s++d5?PFY@JPZ_yVF@fA zs0@%_rq@g4yMM+(ZiCG(n#dV=c7~kIsF`VV>!#Uuu@Gd+$Sj&WHIZbIX(Fdr{$kOL zj8qw`n)O}-krjVkX*DKlv4wcC{ocV!Hu42o+EX=T$%i<{P=jaXDXmP=midMj(o(S8 zX%OWhTGI2F3qjYBE4l-AbhPC|uRaqV8LlP{wrgejAl~Ii4J(FD`x!2B|FTW0aQLy6 zGkrNX(6p62k*1cXWzon~<~YnqzR3F#+MGcd$(4rtc)O{OBC<;%TZM#e=zSJmISEUi zW|Ar#v^IJ)Gx@TH+(}!^cF!_c30ayvj(AGo(vEhf4a~KYgCvi92@*N;@rEP!CF9)* zC=Z0L-We@&pE+}Cs}~Rfqf=FH5#+RJ(nOL)LXgv<$*36m5=QL>of39iz;qqurinJ1y+2;A~v>C`f_V#nTJeO6^|wBixjM)5kOgg-Y{wxm!KDEfxO8j_ngU)z6Yt|DRSt6a2{_fF z)u8$ygynG=LFWd&28YH9Rw@Nr`m$NN(#>bFmC~0jba{ddXiH^zhG4~&>ANz3)Dr|E z#zdT@qk72O7bbsU!rPggT4>XPCKtf6UF-^Asiaezex0zw4k|3zl&Jh=8cO)G9sf?_ z2s(HW)2z9)_4#Bgt<_B`YqDvB89|4(b1pw9i{=4$?*mcrXNi{6Q!|TZ^6IqJSu_`I z^-ed1PnUyz2R(`{Uj07Uv%CBt?K%&6|}kP@Pm~Ii-y(>RX(oTf$Gp#|8G=j}8560h>!76iM(unAO4?n(>nemplPdn|rUF%cm#|8JGb+;c z?>piwQ*ck6wpesJmYD|UOHY+LWaiUu)N ze5SD7uw$=_H#?(6&gj)MqqhLoOYr-Bp{vEe-{Qz6T4d=?NzMbxJDJEf0F8$D?}8)Q zGMO{kGQ*K-k%S{9_%182YT;$&mCwNtI%`q zVwZ4x*|(w4xav7rQB4^38WM3Li~DRS)Ea{2e86-qI0aJd*d)xsQ8Kh^R(ab*@)KD= zXZ-uzG`9gG6Gv`E*3(DxKo6tcMHi7W-<7TAKe zOv?QjT%KD-!xs?K5s1W^`+!$uM-Yw2Y}lM@)vWCIDcn95ZRHkLEHC7!d4kMUONuV9 z*ou+V7I21O>C45!ZJX2+Rx~IB!G?9;{_WphqDS=gR<$jJzo59}l}zGt4i|{MotV?r z&WPJ;@fQkNVV+A2OWPYURm>=BJHupgac9TVm{Apz++6i&?MBuNtnAZxibugD8NH`bvpkyH(A8TX&FSbp5oDpOAxQThd~{sgG-)E+WGkbl{c*Br z&Wf!SLp$rCf$aE5VipiVNn$0sU}VH7f+Hb_m7pA)`hQUg%kYL5Qx4grY%I;T$(KXRv8vsET9gqby!?>}Mq<@wy zT{VsJ$BK)4fh^B$;DunHyV#xkHk_riw;jw2Q|O4eb(6d{=OP1Wi23duN}8*=c!G}= zf4a=is7ljPGsf6uvl z?_?rXehxv-8fY_W1|nl3aKTVnNIT#NJ{-k&0)1OvEj9sO0#{ZlvQ5TndjGb4hbSUQT=gG3QYrm5-q|PWlP`cq`RC1@C_z zl4=e{uQdd$tSW-BVsge-F0fLFZISyYti<+R8Zg=X#c(OUb~f`F6qjwhM2`u#MNCFk zt5-0NKvOyWAS4Js`{r6f*{XU`_DXE?RBU{zK!U71v_S{Zv(^=L~rQBiYkbQg0e!ll66 zK};y)wZnP;jNM>8q-AY25IJ$=g8)kC_E=ygOqsmIC@^9yFN=k9Qu?xCX9!x~GJ-0J zG`3PzBuhP5iT_*tU750lt&Fm62|8DpB?oQ8po^z@p>Y+_D29b8H0}1>Kd5AlAkLkT)?#M#_7rhRA$0N#Jl~`7ec; zIzkXFUtkyzp{A2F^?18G@tgR7OA%;1pf-_#Y2C`|G~}42J`Y){DQ$X-Z-Ol4xQ7?L zh8L@G`%7F5r?`gt;W>R&%@9+>RgyS%xDJrxULgTJ~LDa3t&2_IYm_%6&id zC}3sY_2DaJq4cW3ibbg!P8C}@Va0I2g_Vk}fEAHoBH0lQyENoWo@9Fx*M`pN4=ND5 z#pF_~baqf721`CXi&2()>i#Pu7_2mB;w;07gQ-Hm`-QLkb{*VrYE506y}_`lmm+2-F6?))g749OurMd7Z1y zUl{0i*lh!ljy7*T|2v%~^P4Q3)Nh&R*;7?!S;*OK5>2wmt%D}LW}3(>nvX%`qv+LK zyz!BFd2h{`)k#bi$;;a@97$L$AGhL0$s*1*F9<+Ga)0oKpo-qq$naVtpk{pP%FWQ` z9*6|n>gB}Uk}68lqp%c#2@07@<}G9a2O}(o%_~|)Gp;w%0+&@(04`L#)q=8yAuq$1 zC`@IQgP6{}LKZ_*aSsdC8I}H_)Y&`18P8@S3-^RN?1qTRrUNTYXh{fZcQD?~_#lJ^Gh9jdt3tIhn z=kU)yGipXg3OQ?&nlp5Dp&}t^0jxP_3Oq|0nRjNnbKCDi8^UOz%y48yVf_4d&0_D72$*xj#beg2rvzdwsPufmtk=RVxKvwEBuwBwmkQoe8pTB#&Xsu zEvvm6rG{*!?TTcnP+*+p-1=jCN?q{f8N@t4#$v*e9WN&Q^T>_@)y;E11f&Xh0UQWj z2r^}42(oyyq1DHstA|Ci;P>Lq3OSpw>Oma04w}3(fk><~95I2*lsgYSUV2LrUk>NM z1rli!caDnYj92yn1BD|M059;5A8iixij6`XA6PU;!)&QoPPD2{3{c!po}`tr}JR`5eacSVoyRNBriU(msd zl`f~b$m?YZopHCzJw5k=IrrQx3vuZ}(^*P#JGZUdHXs-B621g6AA4sHOC%e_Wbi}2 zi>EB~Ha@bDv)N6-Q}Jf~H!^bBf^)*^9KAVcl0|~c%$Y@<<)fLr+UzYz1c>B+Nnr&g zK*XPX-VeDY3`;+P2Eb8u-nJ`g1G#fI*mi4alj&;2fEfQQF|r!zpa%?{3z&i7HvF_c zax?C&P)6wQp*#+hY=Bu>7)0Wp42;UE7b*9!Wcw>px8HjPvcPl;TownSB zWncc~U(RVz{DHaZlT6diX#mdeMSJ7aDam>EQz>|w(=gboR-mM z{tGMVBQ|kHulufxm>XJ&nKRKhKhZ@N>5FlkOWf)lG%*p}>I@ah(d$>{<;~ISVa?JU zy+yAMM=+7Z(d~R*^*^ZOrx{|p?^zl1AO4YTjT$<%aYCCYRFtc-FBPK;O;)?V?584t zmb>5`SFTukds?C@AVc>-7B^h^`$~nCeO?@ZS4~8s@?7F>Z2}{rvikcEXCYoNWn6g1 z)FNDZCq1}G8N*L>RR_57Nhz{G&HWU34O5cm-B>pMlM(cQMfUNZP>jY-O<0eq%-tDmzcm!z;<^#T6P?$+#uCS3ZNQZv~LINpmTurIwbuK2zw7zCDX4 zIHX%FXwS;9OEgz>rz%-@0dB6PA^E#a~Mh%xdfh_vPkC4x%*5- z-iupxq;}mntN;>-Xbo*rW~O(1#@GE8jKiczU~RNg{W@3xJK7QqU2X4#LWIjd zs6<0mEIYZBl`5%niQ22G3t|EqA8k67nj;o~y3FOLyy)W=G0F7QW_d zzDB|-DHpQ530ryKyGby>1w&CDhzFCyfo_O!wRLAjzpbN?1qszqting-40>E_Wldu~ ztSUl-*l;W%s6evv41LUkT;zTgC&5Zp5sb)IHiQMNSXx!vCwHwX!UKe*el3=NF)T$! z=4?K-+od3`9?y_v)=(ae@|&Yz+gz%(apiBPw#+6Pd8tH5aUY?~8B3Prk)7gdexg=_ zBZ)P)7ELoJizYQ;TUZ4mi+@iO85t>5WR-*pd-t%&S~yZHkI%Fi_;sYoe1Q1SVHwrV z^;GqGi^>a4S`~KaO2|@bbw*7aDhy&Wh<2>zLuk?gyn+>fwYI|uj-(twQ56qZrzGK> zyT<`y&1)L_E+{t=EKxkrQk)Hy%J+Z?Ku~PU>1XVpi+ssleg1Pw@HmTA4Qv4vN{S(; z<2;)7fyHcmNB1_TztJi-r zm&~Hb3q0Ksk;w(qaXMmL5L+qS&TGO=@n(TYWMr~P=1fdv@$WNd7P@NsG3z=OGg7gS zDq8u9E2NBo`_|RvQWWp&ofW&=K8@xHI?&!=#RNObcr0sa*-YavRe=d*hA$DBtfak$ zGUY~iO`riEs7eeAvZSgM53OaiQt^s_8;*?Y0Y~@g%D@_f;3P8njjLF&LFF)P(qCrR zY>$WHq*8y2h3O>b68adTtaX580n?aJLvvM(N|UZybCJ*`!8xY`pe^n#SUH`|A4JN1 zjIg31^rhK&@@?b3{x*NC9$*D{b7zdLTxvKOh|%U?#dsy@SDUA7!-ple5tf|IXNG$P z6XGmY&Dj2R+Zpq$9(Zz=A~Ny~EmE!$3KjlHaG8@RAP5)2mmp@onBJcbQu=>-$J{ha zqREyyEt)>*W{MLDK|0L03LO@`n!LKhLz#`f=$=hKgPu47M{@HQeYaql>fLux!P+pu zUz-@My60XTxA;=-XvZKX`>34k@s~RxrcCaz237HMddjo(m{~xp78+Igc)x__@!Sb{ zMLe6s?uT@0&TAHus&R!`KpFarVTKgLh@nYiDG-@Us1s(6p@^IKmZLBk&MBR)J^dp5 zvVQpWvNW|G+5&mYeJhiz6HV&#URNIM18Odh6jqGXb5nP01*{bI?oS202P@muy^50n zdy88MK~+nl0#aewK^Bv|gD+L`eW2h-<7T^gpB0{NMV7_LT{eQbSVIL6hb$L^Xy8)# zX-D9a%@V{U!CZ1@d?hOeY-zEIp3R(zj}&!g7R{n5>MU6#8d71@)gLR7vSd662>7Z> zkp;R~7$;}y~O~f#+s0Ao${8H5XCe=&~m~H6#fJ zmoen1tsVa4fI%JJfkb5q7+?fD?XOSSj9yEBYqZbauL`G@$==sWfp}4%UV)L0;N-fE zTz@4|^DTYoF~W*R)3rwVX#^S2%QI|PTQ@4UQsjQH66IdS$%>)1dj`ji&erjZAb6?d z27ubaZUqwxQd;P3ku22^tZV{gsUk+TDNhBrdfFEGGoB@>Wgep3&)GyVm&i-US(oT? zo~I@dDOjc?noP)2X$pHU^4*=B2(sNI1|mLevbi69@vNxbM`6ti+n-Y@Rk#S?98X2o zg)AjHRnNgXA9K-V_1bnRS=G2fOlnIqe0Apnn$t=e#9S!Mw3vbnGKZbR6c^#SW4J++ zB34pWDvs0A6;<)n$U^4!o~sI{9nK9uvl<&}CrP)b5j4B5H!!F$v^m2JD}f!HM}{A> zI?Ed8HDK6cmYFmi-IpEepRv?uCfM`9>jKKPo^f8xXW3pgNI=s`cZHgLKzZeH!O9@k z3^}VJSYY+KiDVgBMc9X7rNJ}<8?5Lm4#GNkn%SMmG9nXwtzbe!p~4x4%MwqkmyyVF z-=4ek4P{mgS*imv+5%iw|0yYVYHs+FLpq~oNAGK~g^jpuG4IR7^Sf179upC+T5VK- zQno?v)r#8W{wQkZ3}aa($7JK_4#s^blf6)?!7?P2F&4v`I1B4vOr&-f zD|#Ssxe%GDFsIg=&|BTiPB06x9;T~qf+j&c2=?Il%d@gerzi__xmtkI{a1xAe2h3$ z4>U{M4EGal(8D$31Z#k0-tYb$ZdF^=>3*@WW9PZy>ou^F&{nK~JE^#;rUNUfwjoIC zX!UWt<_3kZK^`RiP{o`c7p$24MIvLQrbIz2MeYw)s;*}Emi4J7q;F5DflE(%QFF^t>?ja^ zN4T?Sw4z9~n5Ih;sVsXHl^sAN71?ycUwqN1MY*%E3YMul!5R5Bt#^?%xxMpz&*5E6 zP4h5h>3}awk1SuYBYZh2%venO3Ir~v1oHrYY0+L?yI9P&1gHWY2Q5?rrn*D3Yoeqs zjh40ruh$OGLM}i1>{&{bPgp5PYBpUdBhf3vuVkys3QXXiB?4$ z8xIL>fxBJ^+#yk;9jFzb6;&ygB4lZAtbj&4_@p~Qpgss^d33O1{*yvXu&N@w6<8?( z3UUjVWCtazyn66;UZG3%Ma?@E2 z{maq&i%j!%mnyHNYgMdbFi7Y>VDFO;#Miv{(A07;vLtw%zzb`0^g^L7vEHH6V4c0 z$;q7s8eyp}j~|+#7*I`U#U-M0Sia z3|x$-ZROprAfqkSg3mJQ_$cG|+5h*?g6n*x1(4dByc)j)5D^MPvoysQ(Q(^1=d+(P zeB=LFSm}i)pq%(}YC75fb57;<&OZ9Qw1ej;bDBsInUV=oVP+zojNpPVQJAT`5t*j( zh|ERnEegg=GZ>H;GZ|IU+F^Q?H#8IixM}PWU`h~~W|Re#NEGlDDs`W+mTxOpdWe&s z*jM}_#7`%N_zRpVi7Zo8hgvG!Pkzq;Zm_cAszZ}G;{(&+6^!~tcdLoYTA0Fc&b3bf z6`$mzj|Em1vEsz4(lS!9mGbn?Vk`PPhuiXLgL zLz|oAOFq1Wz4X_@>ilUXvPu`6`{@Lig}sc+oGvOXCja+xCeO&=q{k&p25_^Irovnx zCM{z`CjQcqJ4wG6{4!tli7#m}0gV9wBUq-ZfiOAA&>EhW$U31k2avl;6>>8}x^bxU zr~CE6T$oa!KewR;qN{p2zgq>UvVbBiIz3ofI7REI0iWMfBjoxSFPrH%H<>>LI)2@q z`{yNk&F+P78JHrv}1vu$5OmIhgQcY#Y46;5!ewsW=SLYdp6s1wM->;eREArH=` zeK9NxdpWbEkqdtOy!x{<-$IcRKV+V6@p(@Fx0o<&!Q5C<~Zw*Z{ zh3lGX%yxK zfBAe0lh(UZcqe(87byz!unIH&(p2Y;aZQ-gWG-4i6=Pww6KjiAIbmhRKr3&W;*$w> zOI0#|!jz<3A7-ArfqFcK(kin1>8|`qpAPIaa<0z;wMwkbuF2AwjIxNH)FrUuwICqp z<_Pd*3dLE@3M8KxFkbBoj{;V9tKo~L(aLAJ$waJ7&1VYMb5nD$vKmeoBPdwO0s<>& zi;GLKM>oVNl^pbmjzTAkWGQdGau{6B=SB_fTqkUy`so*B!C4$_=A#+DjJf16 z%4ZbHbkaNds!PM=lY+loo5l?;;LXLX_a42FLf%+_)As(w`)?i$t2z=Ox|Ckg3w^PvVgQw<@+>aF_y)uxXC8) zyyp3{3Svm94aoKrIe=DFd{kwzHvQFY^claU)61nQ3=fWUGf|aZ-B@V^nWZ^{O7E&@ zS*mR^;ssU`l1{}s$8%wF{`6^tl}Sqa0G2P5tAwDz%B9$fRt{G5>#ep@j=VTXuu`24 z$l_8WARizscLv}tlPF}VCJWB80Nl$~-rN6WJ4>A#VrCFkuV`C&FD7kfQOjBbt^~g` z&99FEBgldf0Ww1;Xr})gl)mU;^KqO+ll|Q4m^w!udY|fvRxWP$`#MD4R^OE<|1*=t#(se1}?LVN(0of^9hNoX^OjWr}EL`|sF0;g1a8Phf zfK@`%q~eRDlKB&$%)y)~q-}L^CQl4ytHn+NnhD7{gNAqRsz6&0e9{)2ovUn73Z;)!AdL1U?oQ*SXotsg~P3)Pdj_) z75yh@O~veoVP%|UXmVzn&Ke3?%5tvCaf!}nMq*OSYRX;q@y`9cVEDBA}i9x^@=C1>8-0e*!MW5Y+`KCPS9f z0(vQ1IX`e(NnLZIPqB7)7WYl!J!5$@j{0wo>hzaj1wb^VO=eSik*r1QM^*fE(c33g z*)A)0I)Lspe=fpGR0SCMbq$*ZlwUapdKy77Q^d1y=Mz?{3Ev)`9xWfUwUe3eHQM5U zDOIZ}%%XS78uzLx&@KUTr*`{lQpqR&)T4lv^RB^)@nPD`yWGNJ-0S}A%;gzsrXmP5 zS)qq%RBY)={*0|S@hjpiD+ppRaTVuj1|L=Wdi4~<)ySxpdcL8>;I`pzAua7JwIaAv zTSi;jMz_GZ?MgBJlKv9VK$%=f4*#q?l2>13iCGgVAaX4IvKA>TYiHb#w0MyLsCW|o9) z($00=EFHLv(VP}jeCO10E}%1g=R#qo!puZkbjchyXF5_947`@Uu*e{{U1H~js?4vP zQkz3yv3X0so&#uTatbSE2q3R%uNxb1@pT#|AF7dJ+81$mK|XUYry z@|?m{bk6&xeTd_I!_?=Y3?77bnLk6527nc51`(uS#rS$Ec-AG4Lnz}jB;eB8VjY>-|4&OKksx@&q^v2vRJ#g zMkRYegW=)lG-low{qA8Cj0y~C(iW|MCKjHXOlAR{e&soU0u;x^_6d5bV&$@W5U!Oj z@X{kMmBAnIX@`|ZC~F_sxf#PAX6Xw(MPady&g9AP=~yBns*;xM(FAaOy29a_657$) zvY?ea*-DOsaL3{vlitaz%LsMJY ztu7t6oh}Q;9c|er-tcAo1;m6h4hRBAD&|tHe_-SsF!^1}TKuB1a@Ggy-1~H;Qc*PK zXg0FlR$iu7K|LLjor~Z#55l$$hgO_x1~gDJ$m5{|s2FSF0wOw9{ zDJjZ1gNmt{mnt7~@=D%M_fYYDoeNpelR)Ioqatz$i?6%4%O)qEkc+(hI!HO2FfK&T;ILB5@27O>nj-iApsdtb?&kEeaRgs-NCz2 zXEg>`*;$%`{#SbIWuMJcSh*n7ILj8S@MZ5uVIaG)%WaGoR9hr(RFSM8-jq&=$zwg0 z_f%nS{Yn=DDk3w88Oi{cn2RnZZ^sd00mc#*un@RQw0^NFrv-Egfh+Z_X}KCbqU>IM7N&T!s8)m3OoJ>Ie_Z3$ z3np9u=;9vALv-%rJr8t#qMXpViXt!BM<51;iNy?S+ViZx##4m(dR`;L16r@Nn}C;>VaCyX*SDC6(F{;99o3~Mw`IXP&3>Uxh zw3SZ$^^DeMf0bBRaLTJ3IfIJUI|ZPXM_`~8p=YSq9q1~UD0g|s(kz`+VK4uboAiuO z=ACXW^ypxP&rIK^t)$v6Puwb3VrBPa*t&xAi%2MGP`C77&aShI*0V{;X6H0bo z37B3h4FfkRzT4yRrAx(YeBe>Q%6Z=?v^FKImZxh7=4CKw1}m#qT%KW#m9VnSWvYy= zkMR`1QEz#jwi0IvSu81r8vT-E2oXrZ9k}Ew%Emc;%xwYlfXW-bB;~g2Wr9nYL~;}h zp93+;x`ny~F<8uAp-I#Rg&_k0KF_Ps1ml$MB%s#VV$m2Y!YD(Qi{|Ypm0Ii|Kr#HHDwSDs9aP0VlrKU&B~p4--+L13EQPbRrGe-T^+ea%AK{HI)B(Fo!U|kQKhya%SCeu zUji5QQI!@P{s~H)cn8Wr7O3Ys9u`Iv^2ghy#Sjn=i?DDFWDS9p3mLhf%qKE!USqv_ z_$%(seS#QIp({=DN87FZ2Rt*i@;pu zg>e*raRNacfQAs`=!7&2l9Y)7G3Ft}^t{VXXtQA~&-*4SWQnlM<=mQfOJ3e}V#u9C z_7=|E26ezFH-S<8V(sz(qL61g(k1>Sq4#tiIfoa%RR(6=eb&~`{Bg~5zmBL%VYOL6 zD}NbVSxMbXKy4yum=dh`u&!|hzs?6#y1)#vm-3W-pk%I0wjkBuZ^H?rnh|8>(7zZ5 zvDP|T9BsVm_83p84mnt1_gR3?A@O$c<*~rZp3t<>4J!>dKV`=73h*Ud4OVn5I=aMg zQ;VsIr&J7ilFDFZ5Hl^UU>2-ZNBVV>|Es_Hs}pgH!5wp%-=|&d?o4-{t#tl%PUzDt z!e83qA@L=wIc+5*h2it1U;3pYRuB`z$nY)c1F`_nRes16f-EzI=5M|X8m)bLaNh2a zdPOwpW8KMmA0XmfribZmi8i&S!c65IxMVAh$ds68km$a)6G%;)K@kt?Gv|(lC#)n} zEL#80x+l?}QaitbMKC zrXLzCU~JX>Qc|`Wbe^`71=J8U2)GaOJyA3m9fh={<3?NXm&-P~5A&2ID4t}esQ>UK z`v{PARByqXu*SKfQ<4na4-G}*7!$@v0hDY#E7h6$1X-+LL>BA+ILqk(-eit7yk}GB z!kF#@pyXsvVg8r~CK5zIU`v*1fk~ZRI(7Jhs+fVgb?JPI{Y$CsGav8Q@w~QvRAmKg zE3Hzr{v}XlexH!Vq&41hHaBT81(0Mcft5%~==O@SaD$cIwtFrp4v*{3UB9}#71?(i z1GO}uDM6u0fYR-?H-H1>@y|0%X#?Y};LBryl|77BNak43O0d#mwW3|3q7|n~Y%JGV{Oe%f1YbKo+mLcowVjdQrL4gJ&PL zlcvj-pyXFrNzeqQP*pssVPpaK)GIF2rZ9QFLKb*RWO-%{J?AVT3uEvB&JtO8D$&|oDU!19K$lw{DIYk^r?@uPAY zvu<|uPV8xaE#$wA4X_pHsbQz4e=);~hxE)ky0H~UYn{=cYte+ND3Ee_c60rd_k1as@G5TU%V$n6b!^C$u_2l1*U}YHbDwfyo^TMR^ngdFYY5rJabPedA z%A1S2h=Jy3JDDsSxcJ@ql?N+ThpGVeC0f6EdmpS65pTSC1uI^CU2K#k&94_B)tyY* zdl*>;E7@)yt&$+^FlP+JHG&4iplVf4dVlr97Zcn`B&8208+mraNkqb@0#+Z?A# zojAX8g<7iER2}R>;7aY82zp^FX)9w5PF$ZBCQgd3Cuqf;0GD&fy$Y=OR#-hE7MuQGC7n2`(nN4(hqbJis zACOVl%UMyuJ2{vF6o2~mZ~t~XjpW#diRdmI@zkE3qEsYk39R|QTBAI8HBA#)hAer7 zXrHHid(O$rG(HWGbI!kO{BDHhI%kV5O=P32aGg zttw_$73VDxETD3KLY7yFZoCDZc*>YdW!YNyAf1o|u3yz~F&7)KVi_`YvW(h^6*{yR zVz}ePD|M!mEGejj{`fjf@lUIqDS?{d>hLsiX9=w5rfY>48!p8GTCsBsnOc`fmP{d> zr2yRfBI4$bc@;_ZHL&1qedWwWI2lmq^lWo@u_|Zv#!;1zqxC;Ov9Pe(iM8z$0#@>> zJPa$jTFh0`o&coH(I|k1{a{hqGRdsu6gi+qv8%9)-(PAj)K*YeoP2`k!E1GMEF=>ZR01gg1e9SVfeAtkI)i;=)R1OUXB1(; zbR1byVpaH?j5*KCNddOf`TSf(%!&gnLoergJDIfX;Xy(Th*0x0pM_$+Xb!Y9Op&?Ly!#Rp3f2Y))oJoK)qE)<1=n1?(d-NR1imI$FL$KjVx5r5Jhl zO!;y@N;>IxtB8?vQTN=oH_O9BPO)-OQmM@h|H@O{xs_625q6Bf?8KiO?YEu9=O@1S z9n2fS)P9P$kDUL#1VJ@fvj$UsoSCezM_4B1hD4KZ<3ST6m=~Poqm8~#(K^mj zh47Fi&a&v+OrdVaA`!{HiIT3VSF2tnP6(hk=VhhCx`$ zOnyobDuIrW>oEQch<*S4)>yOMY4n}XCmT#j-k_(c;v`( z+HR9?u>;0$xU9vD5F??SkIFS=MOMl`2T(bCZQd|gN$j+Y-};p=fpD=EJTYHPRHZg= z3(aQ{&(Br!mKHqGYi$dCqS6L1$ZNZm#R?ZX9Jk6B?w()N27kV{Nrih)+7eO(F586Q zJn=qE34?sn75to`^6m)f;|hnfoSHxRV>%mD}DX6gOX`Zpc#MZCyZvd?QSi4;iIu-$uhAGqrxH+fC_dfE)%TKn8VF@ke@h1 ze!Y3wJ+n=DlddDQIT}lxO}@2eE=F#Nh-Zx4nK5+Q6px&+oNVP}xK)9Rs5**OS#7#G zfL5^ftO7SxqI~5npbJ&GWCMpOE3JYE_)4V+wRVQjVx1Ayl+j3H1i_GSlX^csj^QGt zZL|^yc7Q@hBPFj4{rrZ7^1mFhW*I_c&;W49V7I{i@oIY(*nJMF&*Sz2=E7@EuZjJ_>n zD4oUPx#9_>IA1Vj^Y-1XV=uLIUhxCnp{KwOs9MDt1<=K3qbg@&VN@mI^R`@57SO25 zl-k>{+OmX$m5L1L0z9RTb~Deq{)c}AF?3j6;E0<{99QsgDnxIJKsH$8YXrzIJmdc~%GjgNf*SUD+oYL-_cUiXk2R9yrp zfkFvajO6Wau_@`FD6Ids>kYQwsBeHge1_H>Xmk;20P0qnz2JdO_Quy7e?FvU7n zsnM8o+wN2V9l7w-D~K7g1d&s4iWbeiy^T#EOEY9q=VnD=6cbrs*(tK*7|P|Ge0v77 zTp;G%8Q!lkO#8|Sc3X;Q5Eh{=DwS(0N$<|u`jb2_Rp7#usLG|TO7TI3T=pmDd7yCt z??g+NIiZECP_f!Kw~CefH|C9PYiCtz0lS>m1}uN$NPqr34}dQ_{};swRlfdR1~|B#bHtzB4wAEPL7nz;;(ZI z=>Qm%d2*o=?*d{b+{{XXGHw#G@I4z|p3ZmzF4n8~uyxGbh8=i{v1rKZV7HCABn|iq zJXOCo%nGWaLao4o%N#@J*1Tm%of|yf#`T|xh@}g~S#A>%&v`r2{-|in#FWia*xi0? z>0E`tnX8SK#QxPl$gdp5TWOVql~I*DVI_u=DO5m%wZSKG9N5I<)Ua*xt$7WAJo>rb z%E>y3;kHB2;D$ltHjh<9z4WDJQ6}h~v?XvkVdcesCLd9l@FjZU2z`3>MT;~*bZ_qn zQ(X3a!%9NtMzGE>Efoh)WW<`2leM~DD-c&vuP9<_mR3e+fp<#nC#n_tCU6s)WTfQA zHi#XDwVUx!x~dW8;1OWHA`6w*wb1EHeQcByKE~l|5Kkn2x1ff+q*-ubN+@%BH%|FB zk%fg1os$O2W{9)grZ^`hp7QOT*b$MrbD4d2!||n89;ND@8GyDTh~Jf-7gez!H(Dx! zoz1v{wMm<&s`7wec_gKRCS?ql#pfajP9!CMnlB$uxy6(buC;b+s%tWzb#5*QL%qt) zU^EYb*(+90KEMMBxZ}Nfn3M-f4YfK0&6?H0? z59u&D(^J4iB4`!cvplPf&^8X5)%=7<(>v!(c@xxlmG90lNzgTj-LU)2QZ3WZE5oNP zirQ$gv8dz02ZLytBlVWf)Dqy&%hnj*&WGiQwp3!K!M|;iw$0-# zqd`pg64vyl7Rbessr62Ul@GvH8WYxMZ6s6-rVwbMgF3S9s4|~OwQOtR%%4huX&sp2 z>tYsl2AF@n$dp$Bkq16ws*_amSXswBlo{(V!T^c`e5@EcOsQWPL>o^5%G3>Wo+C-P z6lBR1iV&q5M3fS+%h_Em=(B8i8AB!MHxr7H^Sc#%3ivAcH2Z(@?TIXtZy%4#`JA6_ z6;rSvwFsrxmgHXiGLxaV`!Ic;d?-#;9mxHjnQ!xvQNRP6kOE486PKy|R@a z!)P``B+&?67Z)pviTRT+nfVh^m^`aDQT=g%lC=qjO;I0P>4WzPE1Trqp?kIl_E1%; zrqP6 zkYyX)yU)e-Hxur3426J?$31isB{!^2u^xC0O4|8AGj@QCOTghddq-HNx%5{ytSL}>ZCU%dDOywSqb*}D zfy?cYi+aIz?Z8!B)jMUK?;BPOXzHv485N=B!nA82s$woB*0v^l_!>9&MqvosznHA)?9IB#i7Xk--m-V|?m5UGPlxa&=&XEUJ*za1nXg2_zXDxuf z2(;%DZ99Z@x)0}(aRm=@%0o#lLzZaEX%l4@%`zH)iN!=u+AO6l4Sdp17%IhlpO*Mb zoBfl1;Jw0%4j@d*xPvK_HooNc6=u$`fUNulgT-bew3FYoY2nNo2(CB7<0(z`_k%3C zoOF4UybZvtS74?Eu5Cc*4rETq;x+U7lm;&gk3AYBtXDNk`bb_`Igm1y-YSf}4#it&$Huv|Sar zGW626OPpD(%AFx_m#|u}QXX^F8(m5-qnz3hvZSXtw9>6bd1=WJmcrz`YJVrX&%kcv zClZ~=l4W-%xTNVO>+T3~dOvB#3^K)xOg(a1Veg`Y-W9A|?pssp1H|Mjzw#?(+}R8i zrkFf9Ki)xG!B$v6v6ZSKr`KjGWBb}P8`5W3K+Uc}$=k&gS33=>{@L92n!ACdf>av~ zOlz3ps0R9W*fyUtbW`1@q&(b7Po;6mR8zw(mFITJDe?Af90B%K9kGr;#5vpDGKg311L<1 zr&ubW5_tkQiLE55ly7zGI6Do=Egqqd&qE^L1?~~vQk>h+#uTWGndeH!W#28*;>4G8 z<0Meho+llNGHnS``S+!#eE}Om=dJ60yJRTQ3Q)wSh|~ZpY~$)^wO3P-W`mWQ^4!}+ zD;KB|NjcGEOZppXv0=waf11+$T#i6@Ycd-UMh4WtQ^FK_3jSh2Kog8l9gL3N6UuPQr5M%y}0p z-ksMBolUB?f65?@s%!;XwEkJJcEtp0mJ?Q{s#IF#R#@3Pxr#KepaFL>cXF8WRy1L68OaYq#29MYE2rv{j0u{a-4lltq1kl{ZI| zT_J>;^)Xn<#ana<1o2#!{Zf8Vfbix93TYA>ftEIe&Aj?pZwH7FOmJdZ%mM10dyhHMnL; zPstuExgoK(D1=m%QI#C<+Xm>)8VJSXr>ESyfhw&6fS67$g{Nq!GnDqklv`P9Pn3f^ zOo8JXoB>4~Xk%Y|v&sp{izY%(w*ssuzKpyyK?>~ZwLcY>Q63{q(KtDP-b3HL6IkiK zr%N&NRW@>{MbehTz=a(IQ_LLg2v+E|Gi|iyKsqHne_?@V4W`oq3Ig7u9W;AqBqf_G zSdqnJ#q)qPS|TU~6je!2F(QpTi=^?fUE^wvE%L9@sriXa0}51uJgF)n%WiK{W%BJ= zmL>Ui1)o;&7w}nWb2*!zZHjnqT{bd*=Ym$Beptc+HH?{*HLbCNwR5_ss+9Fx7R-GP zprZB5|Gu*X+#trsiZg`QR5LA5xq~xUIqW#O$>pE3ebRRmWl$BSsJ_tY#udc$TmlPH za08bymu(+hj$&~xQJ69SG=eEp`R59udB;)&Roipi&BNVP!^8&2I1%0AHSH8IdS53WthX)w-~NFAPbV~ZG^$U?p~ok$7Ew=152vn1aZ z1pIMT?T;!{ZX1yMSi=W|6{|Yk(X31DYRZkOYzMMpRhC$oj9rz+B&Wh^2P>D#l4pit zPUW0LsEQ_q0(urGK!-c)*W9wau~DCor}#RC7^bjBb%cMqt76T|+sM)%Z3$e`T#{WX zOB96(XgaE`o%H7Oh7fo?apaw1$~!cIBK!{XAxTB?*S0SIf#(Mc$U#1Uqo)ycO16V! zm;!wl8+L(%=?-rZapFERH%iHgEM(fGr!a-GeGEQBv)p3q|4?Hbc5xIn8p=4T`{jKfgDD1v zS?0s++}RMXvb?=vm%S^t60Fb*g}pg=lx6)ef4~Z{Ha8GVaa02#$+jrl^7qpA^V=IP zR$~@Wz%hHLlXnd(ex=|yJ)QYe{giE~9e*~Tt&ryDmVy&OhO;mA?ag?M?*J*V%V3PN z%;h}iRBKv}q4b61+f~)h6sjyst8QgkJOZkf)lfSzAx zGMHe7%Iv}F3is4YL!H1>2wat=%K$2}_NC>ThAc}g)Nat()l7c3blHIE7GW>%v`9=( z(ZbcuFj}gcf$+Bf5hyQHS!?^RHx;#Dy_`*&kLh>5?9!ekGY1mI8kD}U)P{iQnnmMOn$ zaCswGsVOfB4mG9L*O4|bwuJ>rMbQIngcGQTlIer_{E6}!t zPOxG;Y2vqq8V_8jWSmqC=b1k`%zADxF?{kRXMr1PhBC@+wORkY-EPyE7F$x3CaPR( z^QuQEBgUHx-#C$_0?QRoNLI)()CNOs17bigV`%a%YH+%oFF5$FwcC@iuT?#@wYR6v z3pP=y%3jM?E;4ZCnr8mwSKg+7!OH1ThPG8#X>;Y=L$KIaTvOw?F#r*u+-duq_|j)i z+b2vZeXJ15ihCJIXd`+~c1#v9BifuZaB1)-yTn*E!XhnBgWU(r9bdP2qt9=JeSFf3 zyb-MQWAk*Jzs;6IRlfFXzxEgXqF;okfE6dfitPb|m6NU9!iqs-J|}lmNyk<;o!%Y3 z#IgIKELbN-n8DPJ4J9R)%xWl;2Gdhcmhsk+CHXcQ9QcMN@wFUPpfKyYgzvJw7kyia z`R0|`a=Ufer4H-q>9~`O%oO^h!|tV@KYuRbhBZ)COt4&m>H5~>)oMIz>u>vusVZk3 z>|o{2#KO{lihql(6stm-0mpFG%{&mIvgxqFFic6N1=e^9N>~;J+6z{KFb5nV4tPw+ z!W6pT%aY~_#mHeaL#d)74$WezW*J1T-)Xs~`}*-sVP)OFS=3O|ZFb4A`4$HdSosCN z;1}R57g!lvDR}>6D+Wy-`;_gnt=h8tJ-|w{w5e;BI$>O-)q@p_Jjt_^vs0tJP?fi6 z6g00GmGB}3uAub+>v>+Cnlt+LQu{W|vKTo7x($Ym?+D8_7R28H2aQB}@B`q*Qh*vDVczj(fATjH)~g zj`5U2R6cem|L`-J)}>1Ius#`1I26KyR9bQMFKhQ1i~r1LP&42{B0yeDkoXI5aX9hM zpd=v%uL*Nq!Hh%SF6pcofMgGes?ccdkAtds9jsi8AdOf=T&=TU zgkt22TxJJprY+9zj;HL(vnk+<;Tw5o0~beY*!gD;mjan~On`WcGtH$EWmx0Dw=LEZ zsxz}|nQ@jCPgr@h97Dy(CEuPK3~d+Z&)Z<=d9|lI_lLiQm5^o6{)Pkew&|!#Mo9T$ zbq!dlK*V-CIjg|6u}&dytF513xq39CDyuJf*1?Xdv~oZhzyy+7_7j_4>Y(+RGwdzf zM|-k;DtQaUQ_b~7c}9@JUUWM52Y>JfF?}LE81-M^5_t(?ytWKSXG|O?rPTf6U;K+< z3jg{`@9+)#=;5!wDXg4!(0<7RXy+|k3xEIjf4{xBUVswC}!g25VXz@>AH*bwjiwRrZ;s#laKclnqT=@lVq2%paKxY>k ziXuk|QWdt$Spy*iSwYE)s$~9Tn7|-iPkst1>e-8)c)`I7 zrjTiKCnu?lrxfT^(v}4kuO|+m@JwB%kl7()&S8$!Nfz6u;fggo7oI8 zunZ$@cP0V8BYY_{pg0i|l9;0VfeZT_zL=0O#lW@r^t?5(E^K(ctwsCnxwA@(8>lP` zoDEsZV+aj{t~G^q^nTh5ZpxrDlle0zDu7Vx)=ESnMxvQt2~W|X;mNi1Bnesa=T10gUy&7Vu~+m!f9VV6u)*!#NpV)74GYL@hr+{rI6<%gez zy{%+A&bydwK&Br>by;q$wZbpJO0Lqt1<+JKWcc!o$b9BAVNI*Dzy6$`^K*P&Kh7rI zXnb2h|LWIyJ8b2gONcrX(Wd2GKg=Jh3P8bGyuxE<5m@m74TtP$ugIRJsW!qggGwPQ zrm(6jd-s?%T2>D1j^mCBq<81>n}d_4q9}*#w^7XL`yrp7O&VZ|#yD z?PxO)&F(=Ed6NPt1Sn>Q6Zpcd;c#xIoDk!mv6$l2%`E;_&7zM^fIIK`)e+&XeDbZq z%B&&M1Euz-{?wleM3_HdCBg!ak+fhXc}07f8yZN{RCIE%a@s-W25kjZF@T)E2Rq1w zcLL3u_fuo#w3aP{pjPW?sN{ywWb#v*%Zeu~ zW9Ux#wkcGMTrTILZ>_FH-<}%`om-b(sM!e1`N+3I$tyO9FXCv>jde_SNJ2_PFPh1O zEL(TG|1AkeS+(Wm}BLa2RV64smV+EDMW=OrERsa ziyKie1>9SG%?R*eMieOuHB1oi^v@3G4s<5~DSlEqJ>mhb+xC}#Ik(IQzzqxU=DQdo%?QR$x!xXJlshU*V zHATo$DaI8~2w4(YD$BCs3Dv%xV<^s2B#Wa+mPKvc;>BqSZD_tWtTZtw%?#u!`-Y)~ z9jwA}RHe$2+XywWwsK7gE87NW4xq%^DYa>|72g_LalzB97>wRNRFJw*T5M&Ql1AGO z%`{pU2XkKCxw#Ne0SyGlfCGpGF_6WZ{^=xS@kxh&no3GR`#LI@+xyM2;4NO^jbP=L z4WfJ&7BwY-2te5ZRsaoW5PTK7BG5L~RvTGz*@x_))rc#VIf0<4DZ|CzfUwN2v?pPQ#yLA91sRT47EBm_kX-m1&xVT**!qZ$oChMD#0Z@|J((oO4tT+8>QAX#0J6rke@3%r#Hs#JMn=l&C4ZH1p z^P?(*nCiS1Be%HziqR+E7S~_&?c`f@y-g7V);P=j&9|AmCp~%d=j|CyY&2G17XjEF zFSk|T+KcPHJ=?>SDofrO0yo0ariJjOa6zgHl(}6yZ&AkG7SDpDWczHl+{*D7Hh2oi zHm+EjkOhKRV#%)4P=b}MwYoKK;!X1<0R>5+LIOK7%B>0Z9`NE7f8s5`$~lIhvWNff z@BZ!!tYiuS+T@iogNn7S^knfrRiDfsRBm_?3WaGy7DjbDGnqoPm>A8n$UiBvGy@l> zAAY%-F$y)zC02l=T1{G_kdtq73{AeR4&z0>Ek~iM+Lz)9uM&Ox=JKt{`7B`cd1;k$$Cs$Rf_O#iR|Da! zt$&8Voiz|1-m^Vtb5;^C;;Aio`aCZ5b3A3PpKKox+%^nwnJ0^$Qtp@=z%po#G!b4= z%-vkz7{y$QK6d~Sa|GyEhJDiJeBRNa`m5q$xdoSB_6P~fo5D(1-mAyc8Ok;Nte^F> zv`ADXXV8S(^Xy^=EkCG;+m*Jh{ECIwM1nz)|4#}i`}{&7GJFhQ*SFMg z2PUvVla9cpfdX85r@{zTEisnv+<-Ex`%SclJ8g=!yb~P6;-;0(T%nV>yVsa0y2oPOP|v@OyAX3?8A11Cia&maaGFhOg2opXf7h3M=P?@#NOPZ}^69`1wEo z=TBQ1teo-+oCeb1IWPVEK`TI6;%2d4Ct)e*HkrWm@PVrE=lFOHaGAVf$Yyhq=)elF zh`Zunt=KV_(%6SA6)UOWepW;H(v-Wba<9Fr+$UA+eZOc3lBk+~mv*>B->yRCixlVQ zn_ZkDO95JwZ!?9?;t6N;?Ls-Wy4+erpJ+t(VV8BEwEUv=J;Jb+|sq4*4cz&tLjOBK=G=%71Fao$sUy5_`?J88BB1>DB)fC$l zv0a?+jAS_x@J&`x)6W>NwCGt+q-$1Ne;c9ZS573#0xEQ^5V*4n+-(NXrB+j6wYiqj z3h?ABr+jvKmi~Dgo}cXlkBo%M9XJ5A8^f*Ob%;6W3}V*fGoR0oHN{Sna%+gawBW|8 z463*InKy!!Q$cX98%+4YN<77DN2U4?6&pamM6+#dMO} z-aYM|{(9P;vp}uM2n#q)iKsPBh&hpE^6iTS|084}-&(8FEUTnx3GFE&ESEZR_w6^l z`@D~8Jv@kYtHID}k$bMF$WfJcI4{=;rrcUUm93gsyV5Gb$5{-a_&4w8TK4R&sT0rP zeG4nuK2^^rHm!o>FeQ!F0p{o_IMfAD&VIaw<6Dw)V$kin^2NqhdVWvE-UbKX{LSAy zVI{(n!V+gGE)HQSil1#+Y1>8IZa1>k;*Y~u(eo_AQuWrVY>*79rWLr%AZk*bWhrvI zraL%y*~TtC*c8eVuJnP!NwEgN#bI_?f*RJvXwS_%AwhjR)%n%zSTfz+uXAXTozD!wpUZ8$l7yvu`HlM;1X7*r{q)~ zRS8y@Q6Q;k{Yy6uT)e*!l^0=e&qHZpO6yJAZ)-ic#&>yQ%3CA_kM>e;#8%FgQ!AS= zc(~F{fMYmvft5>K9Kv!cET%+d^2!7+=(f6hWeLp`Y73zRyeiH+%ofw>{8moZfy*YF z3wGta)OfY-2N}(xjtU@PF2k2WO!#s_%C zZqDTw6QSSd@&}QvC14(2!pgZWXdTRG!a#$0X* z3sWeJiY=VQwIVg%X}2?^+WJ2P4C2+ZqzYJdtskE4AOX6<-3}PZLr^M?|rl=L~HAw8tpA+9*3W!jt znv)e17-b7*7uSEOecN8eIfgPKF7oZg8rr6aIfhP%yo}T)`enQt+RJv`* zxbmZyZGZ}a%lv7}j$6O-r3OM_DfMqWWl?bXmAgoR)EC>cN4V%IY+EuDp0ds@Jm1A# z5EIm-+eq-O&)!FS!M6!3+Sg3}#&7(_hhZg`5KnUvwlkB60UGH;!~K*=n)AtPKP-e>z{!JV5cFJJi# zftv&9Qd(st;Ie%>&blf?mV}jR>+9k%!FgnA@OVnwxm1;QJ95;O27s>{E#Qpv-Z*@; zfw1oslHLNW?EZ``Q&;5vN+Mh=pplo8u#_US7?zccThMKUrJR?LC6Q%YF;yb0-63aq zSHsm|LE|jAL`=1N4pZD(XFVwx?A$meh0l>|z?v4sq+$+YVlfk6l3)TCM>}Su!gLaC znY()6k~4B~B4(`NXy67Dw+6*IIk%|xW;Mag6O(iCsX#e_=?rFBehpk+^lfT|^*=Z5 zqHndp;`%d%DkYc5l4I!Hi|bBgx#cW-kjR<~!aJC_h=BsEmjSebwRLEITBUML zXK9rwwP&D;4qaUp9qo|~iRxX{^4(RK5^5Lr)^3CjJjG%F$J;H}Vq=6DJnjlr@u!D% zrFS~FKj6jR6jsh#*W6Y=Y$ZOD_vbW)E-6B1Xk4Wd7Ia&dP+=^YLW{f2ol&At+oQDP zwoRm?y~@gMMM=tk$p@*k9nYY|@m%VwkTO_-G6tgIm`z@+_er5A?49;e5HtP~iy6uk z^8#F^^@c3zFOzr|Za3pRcxuZ;j9`11-lEA_e!;k(cI%TSTk>sz$Yl)8H*`kdw!zS9 z-SaLQmt=Teb)ygY0?RLJKl0+uowxHoG zMW!=_E}R9X7>)$pWxGO_>H}Dr2`fgYbu!;-vR@^|sw#HbTl2QI*zhHZH~-P;LONa4 z1=?jOEyS*se>TzSqHZySM+MsXqIay5#&^z_O@ng`HC?T%W@Z5(IffR@60+nfYWC*7 zUHOtShAM_sigU=4DKyTKDRkD6D`V)+xc(^=cOpx1H+s3+RAopO`nV9dJ7MJvfg9QE zhQpN1*i)cQwao%5Wf?sA@Wp1S8P8DKG+LOF`LnRMDjef?8qmoQf0XA#&F~NMyKe+5 zmpj&ix=Iz>@BQBIm1wC3e}v2luA}7Ef?* zA&Z%o$g)lU?(+?04Mnn=w<}E5eHH*Yuw&R3Vp9!-OSz_t185v`q54Y#8czWw`OZO) za|?;3B`GA!Wq4i8TY5@mu3>tWu8T;jgo?v$z?3Q~eaerw11noFjd%%{KlvyBWMDB? zlGGwm=+s#Xz)ibVE#WkU#NFm>&MR~gS;kpX^-j(bxU{ohOI#xEq?W9qm`gTMPRf!> z(plOF!YUoaSbr8_HHb+OJWZrYycz8mh+%TiOMQBg3b8w*U@j(7-slC_ol$n9Fu7(H zXm`;Xjc=9!no2Z=>&F@ zY1`m2nYK+%Q^CR%&Fe5WV2Xw3Q)u$sV(6Q~$|;q*Iuyq^#P3(gHXI2-;w+aVWVzE6 zf-FV!C$h9*O7d-Wo)RF-%}r#9wqy;3EOQSHSn;F#t4| zadKx0`=^k(yb-KisH}fNbR(mplSRY@C`%5y(=jwts4$k5q>Qty8cWE+8d^b?3K!*a zE@|kjpOAZK2GNDKwEB&Gx+4kT`gYlO(-|SdQ+a&`f3FeYATZrAF>=wnF zFKJmwmn?zg-a7+%7YMUJUVNw8ZWT$HiR5`X+OjXow1OtpoxaGor(D|>c~~0aw5wmlK9j_-M&jJBMcBk7FgJ+lO6B^AQk5z5>~@uvG0MiIW` zr8e8m6R@j2L2zL#E6y^CMoU#s>(N0LfGnVA1#6$v$+HH6_TQErmuUSnvG9yoDIzJVV#I2$QI){u zS*^F{s!BVDRf4CDlZ!CIJ@ufT?Zyhs{Zx68A7Ei`2Ucc_`X%e+_kG{@5pI)LCf2TE z_9du4tf|uNM3%flOKwiST_x@IDr?K@@_LGtD`{wva!D;kwM=a}!3D|$G@;DJKAJZ= z6X^we`N%{vto@hD8@^aGw}p5cfSfKQeEZH_uWrHR&P1e$OkSjrB^74i64t9?DY(j(~L#mRxYcp%SsepS(YxKXS+r42ed|{qtQ2mW99Ci>P?(o0OexVRnKoZ? zJVj%ASd!>9nE(JT7fD1xRFCYz{e-arc|GjBqEFh24t*n7IngAH*QSQAfh&3iOjLjW zPF3ZSE>sF)$Wn51Wwb*U1zAFtT+WN@-v%HVCNpWRFS93Xm4kO z)8$++3v2w6<=pg0Y8ki~pg2p%Y@!60_Kh#G$bimy6rH)1c-tLy5=;}@O9M3xxe zqFPowVR8KxOv*8|xc;^-3t1{s(~nkF`z)St8zZ;n-LN6t!f`8sk%OBsVDkZ$tW+rD z5(|U!n)ft+Zlm>2rS^oC!c{OD58^m?eQLXsk7ZgrnLMw|6amzL8oy0W(H!HXP}-S4 zPgJGWcnh#{i&$1v5pjyz3Zjjz+~)~8IZIxl%4iqKvUH*1`j_I|c4gb?x?=ss;7)28 zbE%d>QtrUTN@&!k@)k{ZtHsrFZB|U zDv26}31XHgkp40g=?vRJSjXv4+h`fCL!ioV?jLy0WK^`FHPs;V8REk>^Gav)2lP{{{Tm4)rWCS95S8>P805Q* zTnLD>EWdfQ{Rvs#AzN{2qu;h3?d-8FQy;K^7U44awsfJnoVUH(tf6NL?hk!t(fx(t zhAb7qO~);;Wj4|1Nj0Ccn|x+o>U5dmOa6!;=DzqkD|u-Fi`;$YpZ+MsZnewCU(P_@ zB?=UE-f^c3X-n?KOMPdez!_q9`i}}WPcP71w5m23(ols0#b2i5u6RPo;xS8c-qvMp z7+3(vDc=^wx43?$L|&nllG{`?hbzH_mE`i@USimU-DpinlpM}!48GB)GReN(OKSxFOLlYKH!RS*$Mqc`u?}V*HDGkuC{_3x0 z+7!rtpLh8Zdb_PZ##t`Naw@nSlhGDZ%UMt^-!pItIC6XhE^`%`FjEr(moVteHabJ> z!k2-|eAOj1p7Fbpm-(l2Q3o!Cz+Cvtywr11H&x2PT^jDV{i5t{a~*FJk%lkOgd$_A zmmY2M_%K-Etp}r;i`sorSp4&>sy)Y0Wm(cq7kyh0U==D)`S#qp3=zl_Iz#n*#SNIN zXD;X^Lf>x{0G)w3r~cVccRJcmOo^%lEA3e5-l8hS(N^s(%q`_da{*-(45k20eU*LX zLsW0jHY~L?EU+{zvE-5>jV#T=(n#0R-GV3}-RjaQ4Jysj-5nAtEe-Nhq!ASG-RFJ& zg6DiX-_G3UzGvn-*O|En<%WykRmjDbUD!wyi?d;W3a2Wl9l6%N9 zyM%A9UZNzrO_-GT#<|0ycvZ$n%FhJ{8}=e{ zHOoY|wUOaA<&SQGy)~-ii6Uw%`xQ^7c$_)ah`jMa0$d6ryIq93NPBC(20tceQ03`M z91bluQ$l?*Q@%K2%frWRY0fJqcQOBTAFQKF;veazLdW#?KUQ6T{uv9K$B!diT)5ih z7we@PW29<(k6F^qs%{zWXli{RFd`Jh8Goh)3p73}oY;L_V`g9|6{~g9+|G)ogrr&jNIgBK=1P$`#%u=!E zw!O)2vli7RSu`(?(QI69nPh&jPoSlr2H7hAB??_J( z20PNLfuBCjFCTZuQC?kKUSpGL4FIq z=XFSHl~!2|M?7^5-FjR$V-Qm2FMlVIO;)*lWKmeEruOm)FNMb9HQ14w1y5{|qRrMz zEw*5dv{1P^=DF9W4AVGDS7$M)y;3Jg@~?1`cjO87r-~o7@4lD680V%wa_J}7E$H$5 zV#O_jNn32i(Z_Jl1j;`1df0i%38*)kI5jrlk;wu%90?HvuvNX@+2BL>+xTOp_o4RWJEiEA1%@crk4 z6K^|=AIW^YP{yZ@)sgzEwP@W~wERc>MrQ9VoUyVq(cLEJ!`Efy<#7h*u$zp#{o!L{ zyD~|&EbchYP4O?sVN<5>hs^~=H+KLk!}K_ei9c zG-9&dsAOtgM6AKi#ZM|tI*0_W<#72iIoQF}B824crMTZ-M>SDyD_-fvryj0{JsUe{ zSAKsun<4!Gr<6s_XZ-vFOrV2Q)2)3{;q`w^vAGPUnm zjRD2f$+Zmbyvg&W2u?IqTdT7wj!h<&K&xWhevLaDS8Qu%+b8kSD5Ezq&!hg~LZRE# zhX$$Q|3q5-r}V4uH7E-a`z4~vShA^R-|=cGuaGjkQ82SHrB$jm{e0Zg+8D>YR84dw zHeH5|;!~^<(c%pC?jUR7Dt3*s9U|=&#R7rakR*gQ?`iBp$wiKNjX)C7QpFUKvSS*p zun$ZqZN(98twn+?&h1-)38-DQg%8fJJXIIuof6_?gLh9dOVWBnR6((iE8dMjDY6F_^U;(CNOGMWCAS z_bU%b3B2zpovedsC&Hl(ceg{8ia$usJzLZgOr)`lzqa_Z2_hn&z%1@%URO~)e5mT5 zZx=c)0wFozcvr9zdw5DAJcxpBJ4j}RM`Z<|@G>SdtG<1HGxS0yv~7+Y2QUDQz*tXa zt_Hpse_CKpRz9G{O7EMP;Zf)c5%HVj=xyNWYG)wNpSu5(VbVkT@xD&N9n$CZcgloe8eYul-X^H54XN;ScE z)C_A$Kb9bINGKofg3)SrO%GEHd9qBhhCEr*A)!JY1fbo<7aFE~7+FRI)J8dzg~nva z)>_1Fk9Bc8#SRm>s6^mYoJJ5tZ`n6T2YuZ~5<+xvyqW}lrc`GAIGV;i4Kq~oGJXwC z3mH9;vjT@afn%d!t+jFUg19~lokp+cWlwk8C&iUtg?hhYYo$XGt(%_B`sz2R)<>xHA1@tN4Bx+nCg#tuGy=$>N)Eg;#l z@f}GLnK-yuuRJFVDf>XtrRSYdc^k~DuEEYF@U>Aw;sazTqW+_1p_|mm^dbMuFqhh( zvGL2KTqsv@kRT?9VJFqwUh_wflbk-8g8y|WCZG0@)CJ!tf;)#IX5`B&eER6(X58b! zL0H{-tvdm!lxd)QNX5sbg4oSJysCyjS*)`(SmgDT#<10VWJIZ;19t<`10N z?)Z(&Rwz-bYeHBLjlI_5jHm`rs(E z9R^o6lrRBB`8+D*KXI7}MvgOp*ktEx5e}Z{D$H;;G}eu{a<}Y5cThYctCKmbjnvuo za)aOfbvMF*G8S;20PImANle^Zk8Xg=Zu#|lEWpEd)I(aG3>*=bp=%h1CLAKWBsU9x z-&0z&n%k&ibC=Vqt6Hb-ki|+86u=@x!nRnvkS3kEUQ+HG#f?XbFW>mpRW~A`yjj6`sR8U(cX_-l(@po0XMgYMK0peu(f;G zgQSAsVh{8c-RiB!)uijKM4NftS8zQm198`BwW%D%-5;qc~6b~IIu zF2fa16La%j0SMOijoTtQDr^v;2(X*0)E81>*lt-L_ovt?Ve|jm?NZ(j!pMYkVpLTU zAZXGrP!DP@#eInppwaBA9+Hgl-GB*$dT$0Uei?`B0?VwfS>nsNM_Me7oBpI9Bk10M zk+>zx%;@YV;%*Pi&n9YXfi(ZMcryX#bs(_4zQ$?@uOC)Wu^6usBG1+P{CChQ3hnv6 z3vu=RWyS-EZ}(capyMx(Ex=_4)1>tdgOv)O%e>Zm0=9PC)334uv6Hq7!i)YI&Rp~f2`NU` z`j4+D&D{9P_3cjt?=kTFpl}@Ot+*SY-W|SGKP~+a&Awjl=u46$9iC`u&ESz{Ueniu zRdQdI*)plyFGXT!n8i`0-475w2`fLSP^RrEL-@Rmt>P5l0mf~$zq zT$ajFDNI5h^g5|MB1)l%$(C0CxzYWI??;-2XtC_KxfToOl$g^+dgYWzkSd`Q5pqC! zNcl2G%{;hjN%T5ozav6qJ!*Ytntg|hZTFPk^VxKI28<%tnPbRNYXLD)D}iD()Wj-= z1J}qUxXvh!?K<@#RO#xXD)lEN>pVA{AqKwB1pG+~J{B`FV5Qo`oX4c)@uWDJRKcPI zk|YIZ@z|d4cm)kpT7yPO;N;ES|?aS{X^&Rk!l8zEji_qko z_$olw0C)|MU6FAeVRzR8C$}tghFtLq-V%-bmo%hJ`q8L(uSZd3xfF&RYy@u-P^jYj zaevr8hjdSXThq7=^8Nnm{F`JYLHIJ7%I!Y(CDhx-oieDH99sJzIOfmpVlJZk#F@2; z$!uF@I?lI0M$F*dw1FAI=KF)4jT+9i=?atW-52!)LqL1_=#;kUaPQ;6L5 zpu|^hz%Z57Y1GgG@~{5T{GL-mY9fc7+NRJ+#Ol`L2tbYFy{EylnFuHiT-cwK*Bq9g zbGy!lCIx`a5b+$f-UY_W{|-%!L5|t955Q!dr?kPbbj2jU2wgY;QMJn=lTV0Kb)6$W zDdN!n+fzoxo=jN?Q^Ro9`#o!1cU$@Z2 z)HWl{8QX%=jWf9{s@L5c-v8AH1+}G!x-FsKh(bua%chu^Xt>&OK5_^5yPihvF-7v; zK3*otA;q*KqdY)vw9Pah8u)kw)+?O_8US@4IcZK{e<@WTwib%}K;%ja5ul#CL9Gv3 zb_8jI(YWjQ@Wh83;;fEJjbHHy!w0cSD~Xy**}@I{&op*vkIF=M7fK0yZ?~c;BO(r% zwqcfbBgOoWlOlQ11d{mv+n3Oo?W4mmnxDYP$w+edSE6d>ZAwH$_>l^*JhxHR^V@aO zdBK(&Pg7hS3EFoRVLh*<6<*_s?P!CoAE|krLW*bpw&c&A`lpUis#<4aKM(6SSUA;ksO!F;!yw-YLzSM=%1Dt1RJUq zN05$mrL5#K`u}ZI0&+29a22uLqO``dI+eF>j zPLRr&rte)}In5c13DjAL^YA@Nt+>}2czjQxozq)8vHZgTn$Y=?F3;@TAfs)OygAR` zUey|EV9`I5nSyp=0c@~E@7))KIE=heHQM95@#0ScDam#qkM>vhUhJ|e3q(Wg2)=+VVoYN<)Ze`(s0$Me zmY(_5s@V4(^5OlNxbZA2UcmMXmGVfe*mYRuPZ3!l6&?~YTrg_VPc2PR6moyHbT1gL zY^bSD)j8!KO>q3=d!2koaQxm5n#=Z~)hAdyqg+Vyjd-;e-K)(`!uX<& zfQ#(1I5xebEw`gp<%wQ7aZN+TjOduB@&*YG9hlxAqn0ctHkT5=I3nkAqqpSf9I*ot zgWkI?gcs1O!rioWvH!~#n+M(#w5j$x5h}TmU$<`BO4N`|{2MTD{`{?D&+4VOYB6p? zq@Sije==%UM>3pLK?$)9J|v#tl5)lPF+>rB*@bC)p@fGhxHSLv%5CGPKF=*ehYoUT zv*bFc(?lu5T%uRg{!x7VUcr~{*m`51K}}CK&H01eQ7!V<&9Nifi^u3Us6WuBM3qL- zvw90IKHX=8(R$MSa{<=V^{IpLt;?vXZx+Jzhm$Lu$u3^sGoFB6!`$0AU=~YTIhwqT zr~7IM7W{e+-}LvxDmC=8pE1U2Z4`lI^7|vjv)5dEy3R}1f7|HE1>5B2a<97~Zxdn$ zc9X|oO;H`g7e!`6s`Y9fs=KO7=xw}=vk4P4A2dh9-mX)2CC4o>IxXqVG1R}l=;(LZ zIZp%0A8DW1oEjHUrfHdVR!9badsL?aNsb#85kCDg*iLDZtlZ>6*@zeVc8fe@Tc^Dw z@s-g{zm`cyY=dK>rD+MiNxRvo5=+TG=|C4uIv3eNF!Lfv3156*2*AWzJ}z!2QPs++ zSrs3OLeMg&vJyKFTiC#p3{o+GmE&(k7Z=PLTXQIe^Z35TsMiW*#U*{`IF_F zxm}$~qPMn{w2pn@&=roX1dY_;@^Gw*)y`%#Rl z==gPuYtMhgI{0+&hNjKMMr?meM1DCpQlH@-;ytS}1f^09-F`=yr)%J2 z>`wdGB36tLQG#;^J^qP~$?<6*ZhGh^@uzE~6uBV|pte^98~R8NaL`UFXJiC(uG_Ei zQUJ`YpcHSi@EJ8YQGOqPwvHZgv<5OK65TU6;!*?-3)NTtCN4{AQ|qgVld??y?L0>K zF=^DEkUesO5E!ub1;`>%<0(J!+8pQOBuGDNBF~z9UFP>Amj2UCDq#x}4w7Q7(_%u} zp9Bt#MU+8nkC!_vYTN$y1={dWS9DAp{?JLFCFXhhCPvej=-?4f{8;=l5k9VtDp)+Q z+YZkP-HEpFd{_1fy$Uqd&~J}z$N_P3eZ?x~rZzB;jI6r+CothmoGctJouJSY%~hKa zIghUe6#O6nPkag-a&Gd&8L6X=G35(}GrSUCH$Cj`y>Jkuh$?t3NVkynd}%8!J#EUh z*G`-&4z9i>0w;U>A~|tpkoy(4Z%nsmMtIv^j%+F|@#widkIW}uj7;FS(q@1}YWcX) z&5>OH%-@qfpFiwokqwS&yfJGqZ{}@D64DZM?tz(4>CN)$Bng*F39SSkK7fPHVuVd6W-?OR@`=g883_O(SF;*g<0tShSZilt9_98^)Ul6tWJHwlY^FD}*0Y7o8(8OR{+AjT$K%iUBahA(m1uE1#7zMTg9l6 zN8Q#zOhLX~uiDdbkKcL9M}#-|Jvyl#yc`3jHh7kloNK!1c2a@zuQbF~M|gPMhmSE( zrt|b#qQ9v8rPNK1qcU|t!~{=BVs~k+`L@ZR{bHht8AiH5PzqZ7h_!AI#GL#T=y&;E zKS7#W)fW-6;LgYY6?eP%aY&7~eS|}K(|XNI&MFK$c>(Yz&!_ea=B>JoZKa{feiPmN znA!ftJMC-=;i;E`>+Zg1WJR8`2j+Zd|6%ZqbiqO$jGU2=`;|;0tkY73?x09sP5ieJ zPa34s#`=@AYRL$E#qNj$2HMWQy*$aKjB0??w`*BtB{Y@!er@Mq-2@q3zhEGE)@%eCG4P1~6!|{=tj|_6_RCHwzvIq2eQPj3bQL&+0VjDDJQd%i8 zKLY5Bcmn*Yo{`- zzTDyVQ=$01h~UCGYAMNu_g8`Df6~9wRiu-N1>=3`W~Jjeyw4Z4x{W9Gzr#7BZ`Jvf zK-t7dUSDKI2ewEf~dwwfKEj#b6C~rO~*=q?*&YTJLv1nu71AAU-Wgl6g1*iGLqy9KRG^) zpfe3N-f_BCCc%8SF#L>{tz?O7qRI9nmidzQU%n0=DZ3=pam=4MxzbVrc6P4OrNieK zYaE;|Cia=F1M1SKqc|=eHC6je7oXm8yYbc{EefuZ&nI_KN*-;s=-M^37CbmfK@?!y zB`Xx-nCHot=4qp{kTER?BBOL9loz)H;B}yQVnq; z7Oaec3CA~3kzf<#<29p{KkyIyNMe1D8ox27M9BnQQaZX zUv+&y>47VO6X`Qzw~)Qi&a#JBqCdcj2TU_hdg(!9 z3ciDgTn5D;&G%@KNYY0TSq*MTYz&1bLEJ(NbY-7|Vu9)XpgmtqP_>-yF*tUlhH89a z6!I7LV#hGmVu`^f2gtZ}XJnNoB*mGONJQB`FoOjAdPrOB$cyog=nhLY->+B#d!{CmoWRnghMG@w!a_Um^dIK!i3 zNFkcvk+npw`Q7N`zHE`)223`}dP8?cf|@hcMJ)>3N@kXGCt+Da&60$5yv%rQv&he` zovdjyZaG_nE!KkEE&~(xYcY`I9!Mv+apS(uvegr(u2JZn1bF}^kq4Jn5#c!!>^F&Z zk>`uLW-HrvbhL1vzi^DU$9mA&FIBw0-*=u7Ld5ukK` zp>cp7!sEf+VF=3iSzU-N;(Oe{9YGk>x|1CIJpKu4|FmwxiQT~R`C0d(FZ*v2d`Gt! zIX%AeGTUe?X>G$<^FKq%!?WZoiY1FGtGhQ5vej7$Pe=APlnt^dR={5R-#Blx7h z?nd1`R`})k+vC5yH7sj%_hW~T0!bzL>{_@=b9jqFL1tnz-D()G3g;Fp;4VHrXzhL~#7$Cza` zrM`k@HGcYmipTV>2|6JvC~k4j?xE3oE9u0(DE3H^ghiJ>nTOW?mRzE!{nof2zy36& zzy7BA+{>H|IOxw~*%(%!yPg2M?$YVdm*p)VUdd>Z)s}4{YbIzJ@jtvY92Wp^hzMh+ z7c`s!B&d~u*-<=9$IEo?Vg$K1pA%tn-5uD&;w$>r*VGrhhdlV#_i!a5&tDnS${QW0 zpU~&OL8)_}7-vP$m>L@~?tHJ5m9sytkk8?-fR^0##-~4x)d@3Aq<1tpYdK>L9ozTd z&&-R!Trgw9@ofC%a?p6q(4Ov-?-kiL0Ep;@H}R`DTZGLx=LnaJ{kSXe-N*qkEBS!= zgUOG(?IN!tiPjtrkkwC^OJwQCQrFJw?8e~<48ro2Wt|T9NKv%?vRSvq8nX^|3pf7V zBF$F*G1T8O(|WtXHL7kJ$JhcwhA!U6*gMa2z5m;~WcqYqrqn5^J!ijM=)d-$@T66M z7h}2AP-!5LUJet<6O?{*KpCSLLH~M;xA^DobwLB>t${*XnD{;h#5LQf!5((GpKU7% z4YVBJSzw1G7pT39bseY31e2S8N2+mhdUx{SoBQr`eix9f^O%whi0p3uX@4TOHkR-> zisIi@I=+!U_xTKV#T689_WoFZb3>YSbT`^gNF~Dpn;jo^+Z9}%d?@4aC{_Xs##wd9 zn7hzfJp-GnB46+o5cp$t`4Nh|da7o_&Q)fgsq8cC0MI)vF0zv{s-bB8r_T7z?_c^3 zP8JegGX%*=*c7XN|8w=DJO(GhSFlkCt=_wR+uRnCLpjAqhj?~ry`)#u z2^Vj~!UD<~S35*@7A(e90^bGU0$$s6A8JXCQrO3#$K!O>=1rusdZ;nzjunypKAi1Y z)%`#ljl-o+W?Z`du`7UWEwk(AMQ(%tim4rRQzW3o3vi{RCx3=N!K%}S4IVfWmg{Y9 zOAGr6k{^+9#}}HuiEr{RA8jps1Lq_^PQs-(C)-Ijk%e;$h@8B4qJ7D8W3Th&S2W$d zD>U1lARar#kbwSZfwB<~Uv{u`!?}bK65SqG6OiINbr}FmmX!Iz*yY~#dFRim-;T0n zN@9lpqAkU4L8j_;J+19DBd+iRzJ`@vAtjDrx3hzys*SN^GJj%(eAki9%C?u}|9=-T zU6`7c#4$rvUBzig`>yLr`AODH9Ly38HA`>MRMcKjLCCMwE|3{4f|m#lW}tXpVg|dU zK+ef_TnRq$Ep4kHG?yxPzFf?SFHUx_`uX;I3Do{zeCShKX<+V?g+!*D>ff8M`h<2< zqT?i25B+vl3!t2JhT8HE_^Jp+6-z4~>RHbAoOrPPWk-WKE}H%>`|Vjemb|;W73sTM z7#=QsZt%wBnG?kyJ8YP{-0xVA_CO}$Z0Ad4I6rK@Jn3nm1Ta327xIz&CPQOh+JSHN z*>A{db#3Q`^Rgvb^5;M`#!PFf7)jy#sNcA>--tSvFR=D(9<==udBjz`@y!jJx8w>n z+NE}4r~3(+z=TR99sc`C{A}obB+JS zV%;WVT!vp%o6# z8i-&PUi2~t2;chVX!olfMCFx9(I420Xg8<~k(%vdR6X?>G$$AJ6v@3xD#AUQ1=+8@ zuspk4}3`0_zBvPqg#K95pi6U+or?}Q87#&M) z=EoJ{Xsc}lN8NmB@mRuIwaCV(aqop6BsHc!*%3i2m^W!r`)zKR)L zz07b>plW~@Jt2dRb~s_@YKToyeay7$`4>uf3efkx=fvncY{YMyQFiPxl34c(Nu%}w zgtyDRr7q4O6c^mTpjpQIM8#)W87TKJGH zgsH||-H7j-n~aG@0et8$twiZ(IATk#7^G4roE-Zq{Aj z%#a)dr5xXsjo3Vx&v2Qg^v7g|82t>x&*Ha{rcmAOI_c%&y+3+i6n=L$29wlW0!;H< z29*)h+^?I>#XBwE3Kem5TwqVJ6Yh0|N6^WkXx~tQiV9rU{89ZJuvl(SPWX9`tI)x(36|~7<$Cg;I5esnMt+U03yxIH=veh zxbY1VbDoK=S)ZL5^>o-LalcVv;r(eT%NobCpSvB26n8(L^$nV589ODiPKB|peW<;~ zx@67mf3=6pBe9El@+5rk&)z`CjxGv4_i;|5uv>}^f~V-LR9)JY*X>l|X`4YekMb?p zZ-m5A`~4zw^4&6kAIy>1PvkD=i-bcU%MI2PnNv~;N}o6VfBt7(f9h7`cVqxWPXJg; z?f^4G`CJXXSY(Ik^^kn~{7rx4TkIRe>w{mM9sp~6@UhmM8jQ#+eQ69IFTL9 literal 0 HcmV?d00001 diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/examples/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/examples/Readme.md new file mode 100755 index 0000000..4647075 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/examples/Readme.md @@ -0,0 +1,38 @@ +# CFQueryReader/examples + +This folder contains example applications demonstrating this package. Each of +these applications will be built as part of the package build: + + cd /path/to/package + sencha package build + +As applications, they can also be built individually: + + cd /path/to/package/examples/example-app + sencha app build + +Or you can build all examples as a group: + + cd /path/to/package + sencha ant examples + +The ideal location for the example builds to reside is the `"./build"` folder: + + /path/to/package/ + src/ + resources/ + ... + examples/ + example-app/ + other-example/ + ... + build/ + resources/ + examples/ + example-app/ + other-example/ + +This can be specified in the `".sencha/app/build.properties"` file for the +example applications: + + build.dir=${package.build.dir}/examples/${app.name} diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/licenses/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/licenses/Readme.md new file mode 100755 index 0000000..787e366 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/licenses/Readme.md @@ -0,0 +1,3 @@ +# CFQueryReader/licenses + +This folder contains the supported licenses for third-party use. diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/overrides/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/overrides/Readme.md new file mode 100755 index 0000000..c219d3a --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/overrides/Readme.md @@ -0,0 +1,3 @@ +# CFQueryReader/overrides + +This folder contains overrides which will automatically be required by package users. diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/package.json b/js/extjs-5.0.1/architect-3.1/CFQueryReader/package.json new file mode 100755 index 0000000..05b7cb1 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/package.json @@ -0,0 +1,34 @@ +{ + "name": "CFQueryReader", + "type": "code", + "creator": "Steve 'Cutter' Blades (package built by Mike Hill)", + "summary": "CFQueryReader package", + "detailedDescription": "Package created to enhance Ext JS compatibility with ColdFusion application servers.", + "version": "1.0.0", + "compatVersion": "1.0.0", + "format": "1", + "slicer": { + "js": [ + { + "path": "${package.dir}/sass/example/custom.js", + "isWidgetManifest": true + } + ] + }, + "architect": { + "defsonly": true, + "compatFrameworks": [ + "ext50" + ], + "requires": ["../architect-lib/package-all.js"], + "classes": [{ + "definition": "Ext/ux/CFQueryReader/data/reader/CFQuery.Definition.js", + "className": "Ext.ux.CFQueryReader.data.reader.CFQuery", + "js": [], + "css": [] + }] + }, + "output": "${package.dir}/build", + "local": true, + "requires": [] +} \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/resources/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/resources/Readme.md new file mode 100755 index 0000000..ebe5448 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/resources/Readme.md @@ -0,0 +1,3 @@ +# CFQueryReader/resources + +This folder contains static resources (typically an `"images"` folder as well). diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/Readme.md new file mode 100755 index 0000000..ed9b6e2 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/Readme.md @@ -0,0 +1,7 @@ +# CFQueryReader/sass + +This folder contains SASS files of various kinds, organized in sub-folders: + + CFQueryReader/sass/etc + CFQueryReader/sass/src + CFQueryReader/sass/var diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/config.rb b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/config.rb new file mode 100755 index 0000000..2c32c0a --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/config.rb @@ -0,0 +1,2 @@ +cur_dir = File.dirname(__FILE__) +output_style = :nested diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/etc/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/etc/Readme.md new file mode 100755 index 0000000..49afda9 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/etc/Readme.md @@ -0,0 +1,4 @@ +# CFQueryReader/sass/etc + +This folder contains miscellaneous SASS files. Unlike `"CFQueryReader/sass/etc"`, these files +need to be used explicitly. diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/etc/all.scss b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/etc/all.scss new file mode 100755 index 0000000..e69de29 diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/custom.js b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/custom.js new file mode 100755 index 0000000..4b38faf --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/custom.js @@ -0,0 +1,12 @@ +/* + * This file is generated as a starting point by Sencha Cmd - it will not be replaced or + * updated by "sencha package upgrade". + * + * This file can be removed and the script tag in theme.html removed if this theme does + * not need custom additional manifest or shortcut entries. These are documented in + * ./packages/ext-theme-base/sass/example/render.js. + */ + +//Ext.theme.addManifest(); + +//Ext.theme.addShortcuts(); diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/render.js b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/render.js new file mode 100755 index 0000000..c18bd96 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/render.js @@ -0,0 +1,446 @@ +/* + * This file is generated by Sencha Cmd and should NOT be edited. It will be replaced + * during an upgrade. + */ + +Ext.require([ + 'Ext.layout.Context' +]); + +Ext.theme = { + /** + * The array of all component manifests. These objects have the following set of + * properties recognized by the slicer: + * @private + */ + _manifest: [], + + /** + * The collection of shortcuts for a given alias (e.g., 'widget.panel'). This is an + * object keyed by alias whose values are arrays of shortcut definitions. + * @private + */ + _shortcuts: {}, + + doRequire : function(xtype) { + if(xtype.indexOf("widget.") != 0) { + xtype = "widget." + xtype; + } + Ext.require([xtype]); + }, + + /** + * Adds one ore more component entries to the theme manifest. These entries will be + * instantiated by the `Ext.theme.render` method when the page is ready. + * + * Usage: + * + * Ext.theme.addManifest({ + * xtype: 'widget.menu', + * folder: 'menu', + * delegate: '.x-menu-item-link', + * filename: 'menu-item-active', + * config: { + * floating: false, + * width: 200, + * items: [{ + * text: 'test', + * cls: 'x-menu-item-active' + * }] + * } + * },{ + * //... + * }); + * + * @param manifest {Object} An object with type of component, slicing information and + * component configuration. If this parameter is an array, each element is treated as + * a manifest entry. Otherwise, each argument passed is treated as a manifest entry. + * + * @param manifest.xtype {String} The xtype ('grid') or alias ('widget.grid'). This + * is used to specify the type of component to create as well as a potential key to + * any `shortcuts` defined for the xtype. + * + * @param manifest.config {Object} The component configuration object. The properties + * of this depend on the `xtype` of the component. + * + * @param [manifest.delegate] {String} The DOM query to use to select the element to + * slice. The default is to slice the primary element of the component. + * + * @param [manifest.parentCls] An optional CSS class to add to the parent of the + * component. + * + * @param [manifest.setup] {Function} An optional function to be called to initialize + * the component. + * @param manifest.setup.component {Ext.Component} The component instance + * @param manifest.setup.container {Element} The component's container. + * + * @param [manifest.folder] {String} The folder in to which to produce image slices. + * Only applies to Ext JS 4.1 (removed in 4.2). + * + * @param [manifest.filename] {String} The base filename for slices. + * Only applies to Ext JS 4.1 (removed in 4.2). + * + * @param [manifest.reverse] {Boolean} True to position the slices for linear gradient + * background at then opposite "end" (right or bottom) and apply the stretch to the + * area before it (left or top). Only applies to Ext JS 4.1 (removed in 4.2). + */ + addManifest: function (manifest) { + var all = Ext.theme._manifest; + var add = Ext.isArray(manifest) ? manifest : arguments; + + if(manifest.xtype) { + Ext.theme.doRequire(manifest.xtype); + } + + for (var i = 0, n = add.length; i < n; ++i) { + if(add[i].xtype) { + Ext.theme.doRequire(add[i].xtype); + } + all.push(add[i]); + } + }, + + /** + * Adds one or more shortcuts to the rendering process. A `shortcut` is an object that + * looks the same as a `manifest` entry. These are combined by copying the properties + * from the shortcut over those of the manifest entry. In basic terms: + * + * var config = Ext.apply(Ext.apply({}, manfiest.config), shortcut.config); + * var entry = Ext.apply(Ext.apply({}, manfiest), shortcut); + * entry.config = config; + * + * This is not exactly the process, but the idea is the same. The difference is that + * the `ui` of the manifest entry is used to replace any `"{ui}"` substrings found in + * any string properties of the shortcut or its `config` object. + * + * Usage: + * + * Ext.theme.addShortcuts({ + * 'widget.foo': [{ + * config: { + * } + * },{ + * config: { + * } + * }], + * + * 'widget.bar': [ ... ] + * }); + */ + addShortcuts: function (shortcuts) { + var all = Ext.theme._shortcuts; + + for (var key in shortcuts) { + + var add = shortcuts[key]; + var xtype = Ext.theme.addWidget(key); + var existing = all[xtype]; + + Ext.theme.doRequire(xtype); + for(var i=0; i < add.length; i++) { + var config = add[i]; + if(config.xtype) { + Ext.theme.doRequire(config.xtype); + } + } + + if (!existing) { + all[xtype] = existing = []; + } + + existing.push.apply(existing, add); + } + }, + + /** + * This method ensures that a given string has the specified prefix (e.g., "widget."). + * @private + */ + addPrefix: function (prefix, s) { + if (!s || (s.length > prefix.length && s.substring(0,prefix.length) === prefix)) { + return s; + } + return prefix + s; + }, + + /** + * This method returns the given string with "widget." added to the front if that is + * not already present. + * @private + */ + addWidget: function (str) { + return Ext.theme.addPrefix('widget.', str); + }, + + /** + * This method accepts an manifest entry and a shortcut entry and returns the merged + * version. + * @private + */ + applyShortcut: function (manifestEntry, shortcut) { + var ui = manifestEntry.ui; + var config = Ext.theme.copyProps({}, manifestEntry.config); + var entry = Ext.theme.copyProps({}, manifestEntry); + + if (ui && !config.ui) { + config.ui = ui; + } + if (shortcut) { + var tpl = { ui: ui }; + Ext.theme.copyProps(entry, shortcut, tpl); + Ext.theme.copyProps(config, shortcut.config, tpl); + } + + entry.xtype = Ext.theme.addWidget(entry.xtype); + entry.config = config; // both guys have "config" so smash merged one on now... + return entry; + }, + + /** + * This method copies property from a `src` object to a `dest` object and reaplces + * `"{foo}"` fragments of any string properties as defined in the `tpl` object. + * + * var obj = Ext.theme.copyProps({}, { + * foo: 'Hello-{ui}' + * }, { + * ui: 'World' + * }); + * + * console.log('obj.foo: ' + obj.foo); // logs "Hello-World" + * + * @return {Object} The `dest` object or a new object (if `dest` was null). + * @private + */ + copyProps: function (dest, src, tpl) { + var out = dest || {}; + var replacements = []; + var token; + + if (src) { + if (tpl) { + for (token in tpl) { + replacements.push({ + re: new RegExp('\\{' + token + '\\}', 'g'), + value: tpl[token] + }); + } + } + + for (var key in src) { + var val = src[key]; + if (tpl && typeof val === 'string') { + for (var i = 0; i < replacements.length; ++ i) { + val = val.replace(replacements[i].re, replacements[i].value); + } + } + out[key] = val; + } + } + + return out; + }, + + /** + * Renders a component given its manifest and shortcut entries. + * @private + */ + renderWidget: function (manifestEntry, shortcut) { + var entry = Ext.theme.applyShortcut(manifestEntry, shortcut); + var config = entry.config; + var widget = Ext.create(entry.xtype, config); + var ct = Ext.fly(document.body).createChild({ cls: 'widget-container' }); + + Ext.theme.currentWidget = widget; + + if (widget.floating === true) { + widget.floating = { shadow: false }; + } + if (widget.floating) { + widget.focusOnToFront = false; + } + + if (entry.setup) { + entry.setup.call(widget, widget, ct); + } else { + widget.render(ct); + if (widget.floating) { + widget.showAt(0, 0); + ct.setHeight(widget.getHeight()); + } + } + + var el = widget.el; + if (entry.delegate) { + el = el.down(entry.delegate); + } + + el.addCls('x-slicer-target'); // this is what generateSlicerManifest looks for + + if (entry.over) { + widget.addOverCls(); + } + if (config.parentCls) { + el.parent().addCls(config.parentCls); + } + + if (Ext.theme.legacy) { + // The 4.1 approach has some interesting extra pieces + // + var data = {}; + if (entry.reverse) { + data.reverse = true; + } + if (entry.filename) { + data.filename = entry.filename; + } + if (entry.folder) { + data.folder = entry.folder; + } + if (entry.offsets) { + data.offsets = entry.offsets; + } + + Ext.theme.setData(el.dom, data); + } + + Ext.theme.currentWidget = null; + }, + + /** + * Renders all of the components that have been added to the manifest. + * @private + */ + render: function () { + console.log("rendering widgets...") + var manifest = Ext.theme._manifest; + var shortcuts = Ext.theme._shortcuts; + + for (var k = 0, n = manifest ? manifest.length : 0; k < n; ++k) { + var manifestEntry = manifest[k]; + var xtype = Ext.theme.addWidget(manifestEntry.xtype); + var widgetShortcuts = xtype ? shortcuts[xtype] : null; + + if (xtype && manifestEntry.ui && widgetShortcuts) { + for (var i = 0; i < widgetShortcuts.length; i++) { + Ext.theme.renderWidget(manifestEntry, widgetShortcuts[i]); + } + } else { + Ext.theme.renderWidget(manifestEntry); + } + } + }, + + /** + * Renders all components (see `render`) and notifies the Slicer that things are ready. + * @private + */ + run: function () { + var extjsVer = Ext.versions.extjs; + var globalData = {}; + + if (Ext.layout.Context) { + Ext.override(Ext.layout.Context, { + run: function () { + var ok = this.callParent(), + widget = Ext.theme.currentWidget; + if (!ok && widget) { + Ext.Error.raise("Layout run failed: " + widget.id); + } + return ok; + } + }); + } + + console.log("loading widget definitions..."); + + // Previous to Ext JS 4.2, themes and their manifests where defined differently. + // So pass this along if we are hosting a pre-4.2 theme. + // + if (extjsVer && extjsVer.isLessThan(new Ext.Version("4.2"))) { + globalData.format = "1.0"; // tell the Slicer tool + Ext.theme.legacy = true; // not for our own data collection + + // Check for the Cmd3.0/ExtJS4.1 variables: + // + if (Ext.manifest && Ext.manifest.widgets) { + Ext.theme.addManifest(Ext.manifest.widgets); + } + if (Ext.shortcuts) { + Ext.theme.addShortcuts(Ext.shortcuts); + } + if (Ext.userManifest && Ext.userManifest.widgets) { + Ext.theme.addManifest(Ext.userManifest.widgets); + } + } + + Ext.theme.setData(document.body, globalData); + Ext.theme.render(); + Ext.theme.generateSlicerManifest(); + }, + + generateSlicerManifest: function() { + var now = new Date().getTime(), + me = Ext.theme, + // This function is defined by slicer.js (the framework-independent piece) + gsm = window && window['generateSlicerManifest'], + delta; + + me.generateStart = me.generateStart || now; + delta = now - me.generateStart; + + if(gsm) { + gsm(); + } else if(delta < (10 * 1000)){ + // allow the outer script wrapper a chance to inject the capture function + // but stop trying after 10 seconds + Ext.defer(Ext.theme.generateSlicerManifest, 100); + } + }, + + /** + * Sets the `data-slicer` attribute to the JSON-encoded value of the provided data. + * @private + */ + setData: function (el, data) { + if (data) { + var json = Ext.encode(data); + if (json !== '{}') { + el.setAttribute('data-slicer', json); + } + } + }, + + /** + * This used to be `loadExtStylesheet`. + * @private + */ + loadCss: function (src, callback) { + var xhr = new XMLHttpRequest(); + + xhr.open('GET', src); + + xhr.onload = function() { + var css = xhr.responseText, + head = document.getElementsByTagName('head')[0], + style = document.createElement('style'); + + // There's bugginess in the next gradient syntax in WebKit r84622 + // This might be fixed in a later WebKit, but for now we're going to + // strip it out here since compass generates it. + // + // TODO: Upgrade to later WebKit revision + css = css.replace(/background(-image)?: ?-webkit-linear-gradient(?:.*?);/g, ''); + + style.type = 'text/css'; + style.innerText = css; + + head.appendChild(style); + callback(); + }; + + xhr.send(null); + } +}; + +console.log("registering ready listener..."); +Ext.onReady(Ext.theme.run, Ext.theme); diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/theme.html b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/theme.html new file mode 100755 index 0000000..fffc1fe --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/example/theme.html @@ -0,0 +1,37 @@ + + + + + Ext JS Theme Harness + + + + + + + + + + diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/src/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/src/Readme.md new file mode 100755 index 0000000..980d3a7 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/src/Readme.md @@ -0,0 +1,4 @@ +# CFQueryReader/sass/src + +This folder contains SASS sources that mimic the component-class hierarchy. These files +are gathered in to a build of the CSS based on classes that are used by the build. diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/var/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/var/Readme.md new file mode 100755 index 0000000..6cfa2a6 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/sass/var/Readme.md @@ -0,0 +1,3 @@ +# CFQueryReader/sass/var + +This folder contains variable declaration files named by their component class. diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/src/Ext/ux/CFQueryReader/data/reader/CFQuery.js b/js/extjs-5.0.1/architect-3.1/CFQueryReader/src/Ext/ux/CFQueryReader/data/reader/CFQuery.js new file mode 100755 index 0000000..0de2c1c --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/src/Ext/ux/CFQueryReader/data/reader/CFQuery.js @@ -0,0 +1,331 @@ +/** + * @author Steve 'Cutter' Blades + * @class Ext.ux.CFQueryReader.data.reader.CFQuery + * @version 2.3 [09.25.2014] + * + *

The CFQuery Reader is used by a Proxy to read a ColdFusion server response that is sent back in JSON format. This usually + * happens as a result of loading a Store - for example we might create something like this:

+ * + *

+ * Ext.define('User', {
+ *     extend: 'Ext.data.Model',
+ *     fields: ['id', 'name', 'email']
+ * });
+ *
+ * var store = Ext.create('Ext.data.Store', {
+ *     model: 'User',
+ *     proxy: {
+ *         type: 'ajax',
+ *         url : '/some/cfc/path.cfc',
+ *         extraParams: {
+ *          method: 'someMethod',
+ *          returnFormat: 'json'
+ *         },
+ *         reader: {
+ *             type: 'cfquery'
+ *         }
+ *     }
+ * });
+ * 
+ * + *

The example above creates a 'User' model. Models are explained in the {@link Ext.data.Model Model} docs if you're + * not already familiar with them.

+ * + *

We created the simplest type of CFQuery possible by simply telling our {@link Ext.data.Store Store}'s + * {@link Ext.data.proxy.Proxy Proxy} that we want a CFQuery. The Store automatically passes the configured model to the + * Store, so it is as if we passed this instead: + * + *


+ * reader: {
+ *     type : 'cfquery',
+ *     rootProperty: 'data',
+ *     totalProperty: 'recordCount',
+ *     model: 'User'
+ * }
+ * 
+ * + *

The reader we set up is ready to read data from our server - at the moment it will accept a response like this:

+ * + *

+ * {
+ *  "COLUMNS":["ID","NAME","EMAIL"],
+ *  "DATA":[
+ *      [1,"Ed Spencer","ed@sencha.com"],
+ *      [2,"Abe Elias","abe@sencha.com"],
+ *      [3,"Cutter","no@address.giv"]
+ *  ]
+ * }
+ * 
+ * + *

Reading other JSON formats

+ * + *

If you already have your JSON format defined and it doesn't look quite like what we have above, you can usually + * pass JsonReader a couple of configuration options to make it parse your format. For example, we can use the + * {@link #rootProperty} configuration to parse data that comes back like this:

+ * + *

+ * {
+ *  "recordCount": 2,
+ *  "data":{
+ *      "COLUMNS":["ID","NAME","EMAIL"],
+ *      "DATA":[
+ *          [1,"Ed Spencer","ed@sencha.com"],
+ *          [2,"Abe Elias","abe@sencha.com"],
+ *          [3,"Cutter","no@address.giv"]
+ *      ]
+ *  }
+ * }
+ * 
+ * + *

To parse this we just pass in a {@link #rootProperty} configuration that matches the 'users' above:

+ * + *

+ * reader: {
+ *     type: 'cfquery',
+ *     rootProperty: 'data',
+ *     totalProperty: 'recordCount'
+ * }
+ * 
+ * + *

Response MetaData

+ * + * The server can return metadata in its response, in addition to the record data, that describe attributes + * of the data set itself or are used to reconfigure the Reader. To pass metadata in the response you simply + * add a `metaData` attribute to the root of the response data. The metaData attribute can contain anything, + * but supports a specific set of properties that are handled by the Reader if they are present: + * + * - {@link #rootProperty}: the property name of the root response node containing the record data + * - {@link #idProperty}: property name for the primary key field of the data + * - {@link #totalProperty}: property name for the total number of records in the data + * - {@link #successProperty}: property name for the success status of the response + * - {@link #messageProperty}: property name for an optional response message + * - {@link Ext.data.Model#cfg-fields fields}: Config used to reconfigure the Model's fields before converting the + * response data into records + * + * An initial Reader configuration containing all of these properties might look like this ("fields" would be + * included in the Model definition, not shown): + * + * reader: { + * type : 'cfquery', + * rootProperty : 'data', + * idProperty : 'id', + * totalProperty : 'total', + * successProperty: 'success', + * messageProperty: 'message' + * } + * + * If you were to pass a response object containing attributes different from those initially defined above, you could + * use the `metaData` attribute to reconifgure the Reader on the fly. For example: + * + * { + * "count": 1, + * "ok": true, + * "msg": "Users found", + * "users":{ + * "COLUMNS":["ID","NAME","EMAIL"], + * "DATA":[ + * [1,"Ed Spencer","ed@sencha.com"], + * [2,"Abe Elias","abe@sencha.com"], + * [3,"Cutter","no@address.giv"] + * ] + * } + * "metaData": { + * "rootProperty": "users", + * "idProperty": 'id', + * "totalProperty": 'count', + * "successProperty": 'ok', + * "messageProperty": 'msg' + * } + * } + * + * You can also place any other arbitrary data you need into the `metaData` attribute which will be ignored by the Reader, + * but will be accessible via the Reader's {@link #metaData} property (which is also passed to listeners via the Proxy's + * {@link Ext.data.proxy.Proxy#metachange metachange} event (also relayed by the {@link Ext.data.AbstractStore#metachange + * store}). Application code can then process the passed metadata in any way it chooses. + * + * A simple example for how this can be used would be customizing the fields for a Model that is bound to a grid. By passing + * the `fields` property the Model will be automatically updated by the Reader internally, but that change will not be + * reflected automatically in the grid unless you also update the column configuration. You could do this manually, or you + * could simply pass a standard grid {@link Ext.panel.Table#columns column} config object as part of the `metaData` attribute + * and then pass that along to the grid. Here's a very simple example for how that could be accomplished: + * + * // response format: + * { + * ... + * "metaData": { + * "fields": [ + * { "name": "userId", "type": "int" }, + * { "name": "name", "type": "string" }, + * { "name": "birthday", "type": "date", "dateFormat": "Y-j-m" }, + * ], + * "columns": [ + * { "text": "User ID", "dataIndex": "userId", "width": 40 }, + * { "text": "User Name", "dataIndex": "name", "flex": 1 }, + * { "text": "Birthday", "dataIndex": "birthday", "flex": 1, "format": 'Y-j-m', "xtype": "datecolumn" } + * ] + * } + * } + * + * The Reader will automatically read the meta fields config and rebuild the Model based on the new fields, but to handle + * the new column configuration you would need to handle the metadata within the application code. This is done simply enough + * by handling the metachange event on either the store or the proxy, e.g.: + * + * var store = Ext.create('Ext.data.Store', { + * ... + * listeners: { + * 'metachange': function(store, meta) { + * myGrid.reconfigure(store, meta.columns); + * } + * } + * }); + * + */ +Ext.define('Ext.ux.CFQueryReader.data.reader.CFQuery', { + extend: 'Ext.data.reader.Array', + alias: 'reader.cfquery', + + config: { + queryProperty: 'QUERY', + totalProperty: 'TOTALROWCOUNT', + idProperty: null + }, + + /** + * Reads a JSON object and returns a ResultSet. Uses the internal getTotal and getSuccess extractors to + * retrieve meta data from the response, and extractData to turn the JSON data into model instances. + * @param {Object} data The raw JSON data + * @return {Ext.data.ResultSet} A ResultSet containing model instances and meta data about the results + */ + readRecords: function (data) { + var me; + var i, ln, pos, fields, model, name; + var idProperty; + var results; + var error; + var mapit; + + me = this; + mapit = true; + + // If the query is the root, then wrap it + if (data.DATA && data.COLUMNS) { + data = { + "QUERY": data + }; + } + + // TODO: Purpose of this? See metaData information from docs above + // This has to be before the call to super because we use the meta data in the superclass readRecords + if (data.metaData) { + me.onMetaChange(data.metaData); + if (data.metaData.fields) + mapit = false; // if field info is in the meta, then we don't need to map the columns + } + + // Perform the following block if the data must be mapped to columns + if (mapit) { + results = me.getQuery(data); + try { + // Error-checking + if (Ext.isObject(results) === false) { + throw "The \'query\' is not properly mapped to the response."; + } else if ((results.DATA && Ext.isArray(results.DATA)) === false || + (results.COLUMNS && Ext.isArray(results.COLUMNS)) === false) { + // Check the 'query' value to ensure that it is a ColdFusion query object + throw "A \'query\' is not defined in the server output."; + } + + // Create a reference to the Ext.data.Fields objects + model = me.getModel(); + fields = Ext.Array.clone(model.prototype.fields); + + // Upper case the column names in case a framework changed them + ln = results.COLUMNS.length; + for (i = 0; i < ln; i++) { + results.COLUMNS[i] = results.COLUMNS[i].toUpperCase(); + } + + // Map the columns. Fields might not map to a column in the response + ln = fields.length; + for (i = 0; i < ln; i++) { + name = fields[i].getName().toUpperCase(); + pos = Ext.Array.indexOf(results.COLUMNS, name); + if (pos >= 0) { + fields[i].mapping = pos; + } + } + + // Put the changes back in the model + idProperty = me.getIdProperty(); + if (idProperty) { + model.idProperty = idProperty; + } + // Replace the model's fields, removing all previous fields + model.replaceFields(fields, true); + // model.setFields(fields, me.idProperty); + me.setModel(model, true); + + } catch (err) { + error = new Ext.data.ResultSet({ + total: 0, + count: 0, + records: [], + success: false, + message: err + }); + + me.fireEvent('exception', me, data, error); + + Ext.Logger.warn(err); + + return error; + } + } + + // Store data + me.rawData = data; + return me.callParent([data]); + }, + + // Custom buildExtractors, to get 'root' right for CF queries, and create getQuery accessor + buildExtractors: function () { + var me = this; + var config; + var formattedRootProp; + var queryProperty; + var rootProperty; + + // Get config values + config = me.getConfig(); + queryProperty = config.queryProperty; + rootProperty = config.rootProperty; + + // Set default rootProperty + if (queryProperty && !rootProperty) { + config.rootProperty = rootProperty = queryProperty; + } + + // Neither nor are defined; this should not occur as is defined by default + if (!rootProperty) { + Ext.Error.raise({ + message: "Unable to determine the value for this reader. Has been unset?" + }); + } + + // Remove "DATA" if it is a final sublevel for rootProperty + formattedRootProp = rootProperty.replace(/(^|\.)DATA$/, ""); + + // Set new values + queryProperty = formattedRootProp; + rootProperty = (formattedRootProp.length) ? formattedRootProp + ".DATA" : "DATA"; + config.queryProperty = queryProperty; + config.rootProperty = rootProperty; + + // Create accessors + me.getQuery = me.createAccessor(queryProperty); + me.getRoot = me.createAccessor(rootProperty); + + // Build parent extractors + me.callParent(arguments); + } +}); \ No newline at end of file diff --git a/js/extjs-5.0.1/architect-3.1/CFQueryReader/src/Readme.md b/js/extjs-5.0.1/architect-3.1/CFQueryReader/src/Readme.md new file mode 100755 index 0000000..7c5df73 --- /dev/null +++ b/js/extjs-5.0.1/architect-3.1/CFQueryReader/src/Readme.md @@ -0,0 +1,4 @@ +# CFQueryReader/src + +This folder contains source code that will automatically be added to the classpath when +the package is used. diff --git a/js/extjs-5.0.1/src/Ext/ux/CFQueryReader/data/reader/CFQuery.js b/js/extjs-5.0.1/src/Ext/ux/CFQueryReader/data/reader/CFQuery.js new file mode 100755 index 0000000..0de2c1c --- /dev/null +++ b/js/extjs-5.0.1/src/Ext/ux/CFQueryReader/data/reader/CFQuery.js @@ -0,0 +1,331 @@ +/** + * @author Steve 'Cutter' Blades + * @class Ext.ux.CFQueryReader.data.reader.CFQuery + * @version 2.3 [09.25.2014] + * + *

The CFQuery Reader is used by a Proxy to read a ColdFusion server response that is sent back in JSON format. This usually + * happens as a result of loading a Store - for example we might create something like this:

+ * + *

+ * Ext.define('User', {
+ *     extend: 'Ext.data.Model',
+ *     fields: ['id', 'name', 'email']
+ * });
+ *
+ * var store = Ext.create('Ext.data.Store', {
+ *     model: 'User',
+ *     proxy: {
+ *         type: 'ajax',
+ *         url : '/some/cfc/path.cfc',
+ *         extraParams: {
+ *          method: 'someMethod',
+ *          returnFormat: 'json'
+ *         },
+ *         reader: {
+ *             type: 'cfquery'
+ *         }
+ *     }
+ * });
+ * 
+ * + *

The example above creates a 'User' model. Models are explained in the {@link Ext.data.Model Model} docs if you're + * not already familiar with them.

+ * + *

We created the simplest type of CFQuery possible by simply telling our {@link Ext.data.Store Store}'s + * {@link Ext.data.proxy.Proxy Proxy} that we want a CFQuery. The Store automatically passes the configured model to the + * Store, so it is as if we passed this instead: + * + *


+ * reader: {
+ *     type : 'cfquery',
+ *     rootProperty: 'data',
+ *     totalProperty: 'recordCount',
+ *     model: 'User'
+ * }
+ * 
+ * + *

The reader we set up is ready to read data from our server - at the moment it will accept a response like this:

+ * + *

+ * {
+ *  "COLUMNS":["ID","NAME","EMAIL"],
+ *  "DATA":[
+ *      [1,"Ed Spencer","ed@sencha.com"],
+ *      [2,"Abe Elias","abe@sencha.com"],
+ *      [3,"Cutter","no@address.giv"]
+ *  ]
+ * }
+ * 
+ * + *

Reading other JSON formats

+ * + *

If you already have your JSON format defined and it doesn't look quite like what we have above, you can usually + * pass JsonReader a couple of configuration options to make it parse your format. For example, we can use the + * {@link #rootProperty} configuration to parse data that comes back like this:

+ * + *

+ * {
+ *  "recordCount": 2,
+ *  "data":{
+ *      "COLUMNS":["ID","NAME","EMAIL"],
+ *      "DATA":[
+ *          [1,"Ed Spencer","ed@sencha.com"],
+ *          [2,"Abe Elias","abe@sencha.com"],
+ *          [3,"Cutter","no@address.giv"]
+ *      ]
+ *  }
+ * }
+ * 
+ * + *

To parse this we just pass in a {@link #rootProperty} configuration that matches the 'users' above:

+ * + *

+ * reader: {
+ *     type: 'cfquery',
+ *     rootProperty: 'data',
+ *     totalProperty: 'recordCount'
+ * }
+ * 
+ * + *

Response MetaData

+ * + * The server can return metadata in its response, in addition to the record data, that describe attributes + * of the data set itself or are used to reconfigure the Reader. To pass metadata in the response you simply + * add a `metaData` attribute to the root of the response data. The metaData attribute can contain anything, + * but supports a specific set of properties that are handled by the Reader if they are present: + * + * - {@link #rootProperty}: the property name of the root response node containing the record data + * - {@link #idProperty}: property name for the primary key field of the data + * - {@link #totalProperty}: property name for the total number of records in the data + * - {@link #successProperty}: property name for the success status of the response + * - {@link #messageProperty}: property name for an optional response message + * - {@link Ext.data.Model#cfg-fields fields}: Config used to reconfigure the Model's fields before converting the + * response data into records + * + * An initial Reader configuration containing all of these properties might look like this ("fields" would be + * included in the Model definition, not shown): + * + * reader: { + * type : 'cfquery', + * rootProperty : 'data', + * idProperty : 'id', + * totalProperty : 'total', + * successProperty: 'success', + * messageProperty: 'message' + * } + * + * If you were to pass a response object containing attributes different from those initially defined above, you could + * use the `metaData` attribute to reconifgure the Reader on the fly. For example: + * + * { + * "count": 1, + * "ok": true, + * "msg": "Users found", + * "users":{ + * "COLUMNS":["ID","NAME","EMAIL"], + * "DATA":[ + * [1,"Ed Spencer","ed@sencha.com"], + * [2,"Abe Elias","abe@sencha.com"], + * [3,"Cutter","no@address.giv"] + * ] + * } + * "metaData": { + * "rootProperty": "users", + * "idProperty": 'id', + * "totalProperty": 'count', + * "successProperty": 'ok', + * "messageProperty": 'msg' + * } + * } + * + * You can also place any other arbitrary data you need into the `metaData` attribute which will be ignored by the Reader, + * but will be accessible via the Reader's {@link #metaData} property (which is also passed to listeners via the Proxy's + * {@link Ext.data.proxy.Proxy#metachange metachange} event (also relayed by the {@link Ext.data.AbstractStore#metachange + * store}). Application code can then process the passed metadata in any way it chooses. + * + * A simple example for how this can be used would be customizing the fields for a Model that is bound to a grid. By passing + * the `fields` property the Model will be automatically updated by the Reader internally, but that change will not be + * reflected automatically in the grid unless you also update the column configuration. You could do this manually, or you + * could simply pass a standard grid {@link Ext.panel.Table#columns column} config object as part of the `metaData` attribute + * and then pass that along to the grid. Here's a very simple example for how that could be accomplished: + * + * // response format: + * { + * ... + * "metaData": { + * "fields": [ + * { "name": "userId", "type": "int" }, + * { "name": "name", "type": "string" }, + * { "name": "birthday", "type": "date", "dateFormat": "Y-j-m" }, + * ], + * "columns": [ + * { "text": "User ID", "dataIndex": "userId", "width": 40 }, + * { "text": "User Name", "dataIndex": "name", "flex": 1 }, + * { "text": "Birthday", "dataIndex": "birthday", "flex": 1, "format": 'Y-j-m', "xtype": "datecolumn" } + * ] + * } + * } + * + * The Reader will automatically read the meta fields config and rebuild the Model based on the new fields, but to handle + * the new column configuration you would need to handle the metadata within the application code. This is done simply enough + * by handling the metachange event on either the store or the proxy, e.g.: + * + * var store = Ext.create('Ext.data.Store', { + * ... + * listeners: { + * 'metachange': function(store, meta) { + * myGrid.reconfigure(store, meta.columns); + * } + * } + * }); + * + */ +Ext.define('Ext.ux.CFQueryReader.data.reader.CFQuery', { + extend: 'Ext.data.reader.Array', + alias: 'reader.cfquery', + + config: { + queryProperty: 'QUERY', + totalProperty: 'TOTALROWCOUNT', + idProperty: null + }, + + /** + * Reads a JSON object and returns a ResultSet. Uses the internal getTotal and getSuccess extractors to + * retrieve meta data from the response, and extractData to turn the JSON data into model instances. + * @param {Object} data The raw JSON data + * @return {Ext.data.ResultSet} A ResultSet containing model instances and meta data about the results + */ + readRecords: function (data) { + var me; + var i, ln, pos, fields, model, name; + var idProperty; + var results; + var error; + var mapit; + + me = this; + mapit = true; + + // If the query is the root, then wrap it + if (data.DATA && data.COLUMNS) { + data = { + "QUERY": data + }; + } + + // TODO: Purpose of this? See metaData information from docs above + // This has to be before the call to super because we use the meta data in the superclass readRecords + if (data.metaData) { + me.onMetaChange(data.metaData); + if (data.metaData.fields) + mapit = false; // if field info is in the meta, then we don't need to map the columns + } + + // Perform the following block if the data must be mapped to columns + if (mapit) { + results = me.getQuery(data); + try { + // Error-checking + if (Ext.isObject(results) === false) { + throw "The \'query\' is not properly mapped to the response."; + } else if ((results.DATA && Ext.isArray(results.DATA)) === false || + (results.COLUMNS && Ext.isArray(results.COLUMNS)) === false) { + // Check the 'query' value to ensure that it is a ColdFusion query object + throw "A \'query\' is not defined in the server output."; + } + + // Create a reference to the Ext.data.Fields objects + model = me.getModel(); + fields = Ext.Array.clone(model.prototype.fields); + + // Upper case the column names in case a framework changed them + ln = results.COLUMNS.length; + for (i = 0; i < ln; i++) { + results.COLUMNS[i] = results.COLUMNS[i].toUpperCase(); + } + + // Map the columns. Fields might not map to a column in the response + ln = fields.length; + for (i = 0; i < ln; i++) { + name = fields[i].getName().toUpperCase(); + pos = Ext.Array.indexOf(results.COLUMNS, name); + if (pos >= 0) { + fields[i].mapping = pos; + } + } + + // Put the changes back in the model + idProperty = me.getIdProperty(); + if (idProperty) { + model.idProperty = idProperty; + } + // Replace the model's fields, removing all previous fields + model.replaceFields(fields, true); + // model.setFields(fields, me.idProperty); + me.setModel(model, true); + + } catch (err) { + error = new Ext.data.ResultSet({ + total: 0, + count: 0, + records: [], + success: false, + message: err + }); + + me.fireEvent('exception', me, data, error); + + Ext.Logger.warn(err); + + return error; + } + } + + // Store data + me.rawData = data; + return me.callParent([data]); + }, + + // Custom buildExtractors, to get 'root' right for CF queries, and create getQuery accessor + buildExtractors: function () { + var me = this; + var config; + var formattedRootProp; + var queryProperty; + var rootProperty; + + // Get config values + config = me.getConfig(); + queryProperty = config.queryProperty; + rootProperty = config.rootProperty; + + // Set default rootProperty + if (queryProperty && !rootProperty) { + config.rootProperty = rootProperty = queryProperty; + } + + // Neither nor are defined; this should not occur as is defined by default + if (!rootProperty) { + Ext.Error.raise({ + message: "Unable to determine the value for this reader. Has been unset?" + }); + } + + // Remove "DATA" if it is a final sublevel for rootProperty + formattedRootProp = rootProperty.replace(/(^|\.)DATA$/, ""); + + // Set new values + queryProperty = formattedRootProp; + rootProperty = (formattedRootProp.length) ? formattedRootProp + ".DATA" : "DATA"; + config.queryProperty = queryProperty; + config.rootProperty = rootProperty; + + // Create accessors + me.getQuery = me.createAccessor(queryProperty); + me.getRoot = me.createAccessor(rootProperty); + + // Build parent extractors + me.callParent(arguments); + } +}); \ No newline at end of file diff --git a/js/extjs-5.0.1/src/Readme.md b/js/extjs-5.0.1/src/Readme.md new file mode 100755 index 0000000..7c5df73 --- /dev/null +++ b/js/extjs-5.0.1/src/Readme.md @@ -0,0 +1,4 @@ +# CFQueryReader/src + +This folder contains source code that will automatically be added to the classpath when +the package is used.