From 64ed7531eca99033efa3e9d4b19c63b5f7b86ef4 Mon Sep 17 00:00:00 2001 From: echarp Date: Tue, 6 Aug 2019 22:52:29 +0200 Subject: [PATCH] When hovering over a past title, the ellipsis is removed. Refs #150 --- ...36bd3ff8958c6aceb3b1eb4848912ae03f1eff1.js | 52963 ++++++++++++++++ ...d3ff8958c6aceb3b1eb4848912ae03f1eff1.js.gz | Bin 0 -> 457176 bytes ...3f92ed848e4b025b086765dda5da1ab032082e.css | 31 + ...2ed848e4b025b086765dda5da1ab032082e.css.gz | Bin 0 -> 48343 bytes 4 files changed, 52994 insertions(+) create mode 100644 public/assets/application-604c4e99766b8b13aba9e73fe36bd3ff8958c6aceb3b1eb4848912ae03f1eff1.js create mode 100644 public/assets/application-604c4e99766b8b13aba9e73fe36bd3ff8958c6aceb3b1eb4848912ae03f1eff1.js.gz create mode 100644 public/assets/application-65fdd8dfb6b1ba2c6a29d524563f92ed848e4b025b086765dda5da1ab032082e.css create mode 100644 public/assets/application-65fdd8dfb6b1ba2c6a29d524563f92ed848e4b025b086765dda5da1ab032082e.css.gz diff --git a/public/assets/application-604c4e99766b8b13aba9e73fe36bd3ff8958c6aceb3b1eb4848912ae03f1eff1.js b/public/assets/application-604c4e99766b8b13aba9e73fe36bd3ff8958c6aceb3b1eb4848912ae03f1eff1.js new file mode 100644 index 00000000..45de0bb1 --- /dev/null +++ b/public/assets/application-604c4e99766b8b13aba9e73fe36bd3ff8958c6aceb3b1eb4848912ae03f1eff1.js @@ -0,0 +1,52963 @@ +/* + * File: iframeResizer.js + * Desc: Force iframes to size to content. + * Requires: iframeResizer.contentWindow.js to be loaded into the target frame. + * Doc: https://github.com/davidjbradshaw/iframe-resizer + * Author: David J. Bradshaw - dave@bradshaw.net + * Contributor: Jure Mav - jure.mav@gmail.com + * Contributor: Reed Dadoune - reed@dadoune.com + */ + +// eslint-disable-next-line sonarjs/cognitive-complexity, no-shadow-restricted-names +;(function(undefined) { + if (typeof window === 'undefined') return // don't run for server side render + + var count = 0, + logEnabled = false, + hiddenCheckEnabled = false, + msgHeader = 'message', + msgHeaderLen = msgHeader.length, + msgId = '[iFrameSizer]', // Must match iframe msg ID + msgIdLen = msgId.length, + pagePosition = null, + requestAnimationFrame = window.requestAnimationFrame, + resetRequiredMethods = { + max: 1, + scroll: 1, + bodyScroll: 1, + documentElementScroll: 1 + }, + settings = {}, + timer = null, + defaults = { + autoResize: true, + bodyBackground: null, + bodyMargin: null, + bodyMarginV1: 8, + bodyPadding: null, + checkOrigin: true, + inPageLinks: false, + enablePublicMethods: true, + heightCalculationMethod: 'bodyOffset', + id: 'iFrameResizer', + interval: 32, + log: false, + maxHeight: Infinity, + maxWidth: Infinity, + minHeight: 0, + minWidth: 0, + resizeFrom: 'parent', + scrolling: false, + sizeHeight: true, + sizeWidth: false, + warningTimeout: 5000, + tolerance: 0, + widthCalculationMethod: 'scroll', + onClosed: function() {}, + onInit: function() {}, + onMessage: function() { + warn('onMessage function not defined') + }, + onResized: function() {}, + onScroll: function() { + return true + } + } + + function getMutationObserver() { + return ( + window.MutationObserver || + window.WebKitMutationObserver || + window.MozMutationObserver + ) + } + + function addEventListener(el, evt, func) { + el.addEventListener(evt, func, false) + } + + function removeEventListener(el, evt, func) { + el.removeEventListener(evt, func, false) + } + + function setupRequestAnimationFrame() { + var vendors = ['moz', 'webkit', 'o', 'ms'] + var x + + // Remove vendor prefixing if prefixed and break early if not + for (x = 0; x < vendors.length && !requestAnimationFrame; x += 1) { + requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'] + } + + if (!requestAnimationFrame) { + log('setup', 'RequestAnimationFrame not supported') + } + } + + function getMyID(iframeId) { + var retStr = 'Host page: ' + iframeId + + if (window.top !== window.self) { + if (window.parentIFrame && window.parentIFrame.getId) { + retStr = window.parentIFrame.getId() + ': ' + iframeId + } else { + retStr = 'Nested host page: ' + iframeId + } + } + + return retStr + } + + function formatLogHeader(iframeId) { + return msgId + '[' + getMyID(iframeId) + ']' + } + + function isLogEnabled(iframeId) { + return settings[iframeId] ? settings[iframeId].log : logEnabled + } + + function log(iframeId, msg) { + output('log', iframeId, msg, isLogEnabled(iframeId)) + } + + function info(iframeId, msg) { + output('info', iframeId, msg, isLogEnabled(iframeId)) + } + + function warn(iframeId, msg) { + output('warn', iframeId, msg, true) + } + + function output(type, iframeId, msg, enabled) { + if (true === enabled && 'object' === typeof window.console) { + // eslint-disable-next-line no-console + console[type](formatLogHeader(iframeId), msg) + } + } + + function iFrameListener(event) { + function resizeIFrame() { + function resize() { + setSize(messageData) + setPagePosition(iframeId) + on('onResized', messageData) + } + + ensureInRange('Height') + ensureInRange('Width') + + syncResize(resize, messageData, 'init') + } + + function processMsg() { + var data = msg.substr(msgIdLen).split(':') + + return { + iframe: settings[data[0]] && settings[data[0]].iframe, + id: data[0], + height: data[1], + width: data[2], + type: data[3] + } + } + + function ensureInRange(Dimension) { + var max = Number(settings[iframeId]['max' + Dimension]), + min = Number(settings[iframeId]['min' + Dimension]), + dimension = Dimension.toLowerCase(), + size = Number(messageData[dimension]) + + log(iframeId, 'Checking ' + dimension + ' is in range ' + min + '-' + max) + + if (size < min) { + size = min + log(iframeId, 'Set ' + dimension + ' to min value') + } + + if (size > max) { + size = max + log(iframeId, 'Set ' + dimension + ' to max value') + } + + messageData[dimension] = '' + size + } + + function isMessageFromIFrame() { + function checkAllowedOrigin() { + function checkList() { + var i = 0, + retCode = false + + log( + iframeId, + 'Checking connection is from allowed list of origins: ' + + checkOrigin + ) + + for (; i < checkOrigin.length; i++) { + if (checkOrigin[i] === origin) { + retCode = true + break + } + } + return retCode + } + + function checkSingle() { + var remoteHost = settings[iframeId] && settings[iframeId].remoteHost + log(iframeId, 'Checking connection is from: ' + remoteHost) + return origin === remoteHost + } + + return checkOrigin.constructor === Array ? checkList() : checkSingle() + } + + var origin = event.origin, + checkOrigin = settings[iframeId] && settings[iframeId].checkOrigin + + if (checkOrigin && '' + origin !== 'null' && !checkAllowedOrigin()) { + throw new Error( + 'Unexpected message received from: ' + + origin + + ' for ' + + messageData.iframe.id + + '. Message was: ' + + event.data + + '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.' + ) + } + + return true + } + + function isMessageForUs() { + return ( + msgId === ('' + msg).substr(0, msgIdLen) && + msg.substr(msgIdLen).split(':')[0] in settings + ) // ''+Protects against non-string msg + } + + function isMessageFromMetaParent() { + // Test if this message is from a parent above us. This is an ugly test, however, updating + // the message format would break backwards compatibity. + var retCode = messageData.type in { true: 1, false: 1, undefined: 1 } + + if (retCode) { + log(iframeId, 'Ignoring init message from meta parent page') + } + + return retCode + } + + function getMsgBody(offset) { + return msg.substr(msg.indexOf(':') + msgHeaderLen + offset) + } + + function forwardMsgFromIFrame(msgBody) { + log( + iframeId, + 'onMessage passed: {iframe: ' + + messageData.iframe.id + + ', message: ' + + msgBody + + '}' + ) + on('onMessage', { + iframe: messageData.iframe, + message: JSON.parse(msgBody) + }) + log(iframeId, '--') + } + + function getPageInfo() { + var bodyPosition = document.body.getBoundingClientRect(), + iFramePosition = messageData.iframe.getBoundingClientRect() + + return JSON.stringify({ + iframeHeight: iFramePosition.height, + iframeWidth: iFramePosition.width, + clientHeight: Math.max( + document.documentElement.clientHeight, + window.innerHeight || 0 + ), + clientWidth: Math.max( + document.documentElement.clientWidth, + window.innerWidth || 0 + ), + offsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10), + offsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10), + scrollTop: window.pageYOffset, + scrollLeft: window.pageXOffset, + documentHeight: document.documentElement.clientHeight, + documentWidth: document.documentElement.clientWidth, + windowHeight: window.innerHeight, + windowWidth: window.innerWidth + }) + } + + function sendPageInfoToIframe(iframe, iframeId) { + function debouncedTrigger() { + trigger('Send Page Info', 'pageInfo:' + getPageInfo(), iframe, iframeId) + } + debounceFrameEvents(debouncedTrigger, 32, iframeId) + } + + function startPageInfoMonitor() { + function setListener(type, func) { + function sendPageInfo() { + if (settings[id]) { + sendPageInfoToIframe(settings[id].iframe, id) + } else { + stop() + } + } + + ;['scroll', 'resize'].forEach(function(evt) { + log(id, type + evt + ' listener for sendPageInfo') + func(window, evt, sendPageInfo) + }) + } + + function stop() { + setListener('Remove ', removeEventListener) + } + + function start() { + setListener('Add ', addEventListener) + } + + var id = iframeId // Create locally scoped copy of iFrame ID + + start() + + if (settings[id]) { + settings[id].stopPageInfo = stop + } + } + + function stopPageInfoMonitor() { + if (settings[iframeId] && settings[iframeId].stopPageInfo) { + settings[iframeId].stopPageInfo() + delete settings[iframeId].stopPageInfo + } + } + + function checkIFrameExists() { + var retBool = true + + if (null === messageData.iframe) { + warn(iframeId, 'IFrame (' + messageData.id + ') not found') + retBool = false + } + return retBool + } + + function getElementPosition(target) { + var iFramePosition = target.getBoundingClientRect() + + getPagePosition(iframeId) + + return { + x: Math.floor(Number(iFramePosition.left) + Number(pagePosition.x)), + y: Math.floor(Number(iFramePosition.top) + Number(pagePosition.y)) + } + } + + function scrollRequestFromChild(addOffset) { + /* istanbul ignore next */ // Not testable in Karma + function reposition() { + pagePosition = newPosition + scrollTo() + log(iframeId, '--') + } + + function calcOffset() { + return { + x: Number(messageData.width) + offset.x, + y: Number(messageData.height) + offset.y + } + } + + function scrollParent() { + if (window.parentIFrame) { + window.parentIFrame['scrollTo' + (addOffset ? 'Offset' : '')]( + newPosition.x, + newPosition.y + ) + } else { + warn( + iframeId, + 'Unable to scroll to requested position, window.parentIFrame not found' + ) + } + } + + var offset = addOffset + ? getElementPosition(messageData.iframe) + : { x: 0, y: 0 }, + newPosition = calcOffset() + + log( + iframeId, + 'Reposition requested from iFrame (offset x:' + + offset.x + + ' y:' + + offset.y + + ')' + ) + + if (window.top !== window.self) { + scrollParent() + } else { + reposition() + } + } + + function scrollTo() { + if (false !== on('onScroll', pagePosition)) { + setPagePosition(iframeId) + } else { + unsetPagePosition() + } + } + + function findTarget(location) { + function jumpToTarget() { + var jumpPosition = getElementPosition(target) + + log( + iframeId, + 'Moving to in page link (#' + + hash + + ') at x: ' + + jumpPosition.x + + ' y: ' + + jumpPosition.y + ) + pagePosition = { + x: jumpPosition.x, + y: jumpPosition.y + } + + scrollTo() + log(iframeId, '--') + } + + function jumpToParent() { + if (window.parentIFrame) { + window.parentIFrame.moveToAnchor(hash) + } else { + log( + iframeId, + 'In page link #' + + hash + + ' not found and window.parentIFrame not found' + ) + } + } + + var hash = location.split('#')[1] || '', + hashData = decodeURIComponent(hash), + target = + document.getElementById(hashData) || + document.getElementsByName(hashData)[0] + + if (target) { + jumpToTarget() + } else if (window.top !== window.self) { + jumpToParent() + } else { + log(iframeId, 'In page link #' + hash + ' not found') + } + } + + function on(funcName, val) { + return chkEvent(iframeId, funcName, val) + } + + function actionMsg() { + if (settings[iframeId] && settings[iframeId].firstRun) firstRun() + + switch (messageData.type) { + case 'close': + if (settings[iframeId].closeRequeston) + chkEvent(iframeId, 'onCloseRequest', settings[iframeId].iframe) + else closeIFrame(messageData.iframe) + break + + case 'message': + forwardMsgFromIFrame(getMsgBody(6)) + break + + case 'scrollTo': + scrollRequestFromChild(false) + break + + case 'scrollToOffset': + scrollRequestFromChild(true) + break + + case 'pageInfo': + sendPageInfoToIframe( + settings[iframeId] && settings[iframeId].iframe, + iframeId + ) + startPageInfoMonitor() + break + + case 'pageInfoStop': + stopPageInfoMonitor() + break + + case 'inPageLink': + findTarget(getMsgBody(9)) + break + + case 'reset': + resetIFrame(messageData) + break + + case 'init': + resizeIFrame() + on('onInit', messageData.iframe) + break + + default: + resizeIFrame() + } + } + + function hasSettings(iframeId) { + var retBool = true + + if (!settings[iframeId]) { + retBool = false + warn( + messageData.type + + ' No settings for ' + + iframeId + + '. Message was: ' + + msg + ) + } + + return retBool + } + + function iFrameReadyMsgReceived() { + // eslint-disable-next-line no-restricted-syntax, guard-for-in + for (var iframeId in settings) { + trigger( + 'iFrame requested init', + createOutgoingMsg(iframeId), + document.getElementById(iframeId), + iframeId + ) + } + } + + function firstRun() { + if (settings[iframeId]) { + settings[iframeId].firstRun = false + } + } + + var msg = event.data, + messageData = {}, + iframeId = null + + if ('[iFrameResizerChild]Ready' === msg) { + iFrameReadyMsgReceived() + } else if (isMessageForUs()) { + messageData = processMsg() + iframeId = messageData.id + if (settings[iframeId]) { + settings[iframeId].loaded = true + } + + if (!isMessageFromMetaParent() && hasSettings(iframeId)) { + log(iframeId, 'Received: ' + msg) + + if (checkIFrameExists() && isMessageFromIFrame()) { + actionMsg() + } + } + } else { + info(iframeId, 'Ignored: ' + msg) + } + } + + function chkEvent(iframeId, funcName, val) { + var func = null, + retVal = null + + if (settings[iframeId]) { + func = settings[iframeId][funcName] + + if ('function' === typeof func) { + retVal = func(val) + } else { + throw new TypeError( + funcName + ' on iFrame[' + iframeId + '] is not a function' + ) + } + } + + return retVal + } + + function removeIframeListeners(iframe) { + var iframeId = iframe.id + delete settings[iframeId] + } + + function closeIFrame(iframe) { + var iframeId = iframe.id + log(iframeId, 'Removing iFrame: ' + iframeId) + + try { + // Catch race condition error with React + if (iframe.parentNode) { + iframe.parentNode.removeChild(iframe) + } + } catch (error) { + warn(error) + } + + chkEvent(iframeId, 'onClosed', iframeId) + log(iframeId, '--') + removeIframeListeners(iframe) + } + + function getPagePosition(iframeId) { + if (null === pagePosition) { + pagePosition = { + x: + window.pageXOffset !== undefined + ? window.pageXOffset + : document.documentElement.scrollLeft, + y: + window.pageYOffset !== undefined + ? window.pageYOffset + : document.documentElement.scrollTop + } + log( + iframeId, + 'Get page position: ' + pagePosition.x + ',' + pagePosition.y + ) + } + } + + function setPagePosition(iframeId) { + if (null !== pagePosition) { + window.scrollTo(pagePosition.x, pagePosition.y) + log( + iframeId, + 'Set page position: ' + pagePosition.x + ',' + pagePosition.y + ) + unsetPagePosition() + } + } + + function unsetPagePosition() { + pagePosition = null + } + + function resetIFrame(messageData) { + function reset() { + setSize(messageData) + trigger('reset', 'reset', messageData.iframe, messageData.id) + } + + log( + messageData.id, + 'Size reset requested by ' + + ('init' === messageData.type ? 'host page' : 'iFrame') + ) + getPagePosition(messageData.id) + syncResize(reset, messageData, 'reset') + } + + function setSize(messageData) { + function setDimension(dimension) { + if (!messageData.id) { + log('undefined', 'messageData id not set') + return + } + messageData.iframe.style[dimension] = messageData[dimension] + 'px' + log( + messageData.id, + 'IFrame (' + + iframeId + + ') ' + + dimension + + ' set to ' + + messageData[dimension] + + 'px' + ) + } + + function chkZero(dimension) { + // FireFox sets dimension of hidden iFrames to zero. + // So if we detect that set up an event to check for + // when iFrame becomes visible. + + /* istanbul ignore next */ // Not testable in PhantomJS + if (!hiddenCheckEnabled && '0' === messageData[dimension]) { + hiddenCheckEnabled = true + log(iframeId, 'Hidden iFrame detected, creating visibility listener') + fixHiddenIFrames() + } + } + + function processDimension(dimension) { + setDimension(dimension) + chkZero(dimension) + } + + var iframeId = messageData.iframe.id + + if (settings[iframeId]) { + if (settings[iframeId].sizeHeight) { + processDimension('height') + } + if (settings[iframeId].sizeWidth) { + processDimension('width') + } + } + } + + function syncResize(func, messageData, doNotSync) { + /* istanbul ignore if */ // Not testable in PhantomJS + if (doNotSync !== messageData.type && requestAnimationFrame) { + log(messageData.id, 'Requesting animation frame') + requestAnimationFrame(func) + } else { + func() + } + } + + function trigger(calleeMsg, msg, iframe, id, noResponseWarning) { + function postMessageToIFrame() { + var target = settings[id] && settings[id].targetOrigin + log( + id, + '[' + + calleeMsg + + '] Sending msg to iframe[' + + id + + '] (' + + msg + + ') targetOrigin: ' + + target + ) + iframe.contentWindow.postMessage(msgId + msg, target) + } + + function iFrameNotFound() { + warn(id, '[' + calleeMsg + '] IFrame(' + id + ') not found') + } + + function chkAndSend() { + if ( + iframe && + 'contentWindow' in iframe && + null !== iframe.contentWindow + ) { + // Null test for PhantomJS + postMessageToIFrame() + } else { + iFrameNotFound() + } + } + + function warnOnNoResponse() { + function warning() { + if (settings[id] && !settings[id].loaded && !errorShown) { + errorShown = true + warn( + id, + 'IFrame has not responded within ' + + settings[id].warningTimeout / 1000 + + ' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.' + ) + } + } + + if ( + !!noResponseWarning && + settings[id] && + !!settings[id].warningTimeout + ) { + settings[id].msgTimeout = setTimeout( + warning, + settings[id].warningTimeout + ) + } + } + + var errorShown = false + + id = id || iframe.id + + if (settings[id]) { + chkAndSend() + warnOnNoResponse() + } + } + + function createOutgoingMsg(iframeId) { + return ( + iframeId + + ':' + + settings[iframeId].bodyMarginV1 + + ':' + + settings[iframeId].sizeWidth + + ':' + + settings[iframeId].log + + ':' + + settings[iframeId].interval + + ':' + + settings[iframeId].enablePublicMethods + + ':' + + settings[iframeId].autoResize + + ':' + + settings[iframeId].bodyMargin + + ':' + + settings[iframeId].heightCalculationMethod + + ':' + + settings[iframeId].bodyBackground + + ':' + + settings[iframeId].bodyPadding + + ':' + + settings[iframeId].tolerance + + ':' + + settings[iframeId].inPageLinks + + ':' + + settings[iframeId].resizeFrom + + ':' + + settings[iframeId].widthCalculationMethod + ) + } + + function setupIFrame(iframe, options) { + function setLimits() { + function addStyle(style) { + if ( + Infinity !== settings[iframeId][style] && + 0 !== settings[iframeId][style] + ) { + iframe.style[style] = settings[iframeId][style] + 'px' + log( + iframeId, + 'Set ' + style + ' = ' + settings[iframeId][style] + 'px' + ) + } + } + + function chkMinMax(dimension) { + if ( + settings[iframeId]['min' + dimension] > + settings[iframeId]['max' + dimension] + ) { + throw new Error( + 'Value for min' + + dimension + + ' can not be greater than max' + + dimension + ) + } + } + + chkMinMax('Height') + chkMinMax('Width') + + addStyle('maxHeight') + addStyle('minHeight') + addStyle('maxWidth') + addStyle('minWidth') + } + + function newId() { + var id = (options && options.id) || defaults.id + count++ + if (null !== document.getElementById(id)) { + id += count++ + } + return id + } + + function ensureHasId(iframeId) { + if ('' === iframeId) { + // eslint-disable-next-line no-multi-assign + iframe.id = iframeId = newId() + logEnabled = (options || {}).log + log( + iframeId, + 'Added missing iframe ID: ' + iframeId + ' (' + iframe.src + ')' + ) + } + + return iframeId + } + + function setScrolling() { + log( + iframeId, + 'IFrame scrolling ' + + (settings[iframeId] && settings[iframeId].scrolling + ? 'enabled' + : 'disabled') + + ' for ' + + iframeId + ) + iframe.style.overflow = + false === (settings[iframeId] && settings[iframeId].scrolling) + ? 'hidden' + : 'auto' + switch (settings[iframeId] && settings[iframeId].scrolling) { + case 'omit': + break + + case true: + iframe.scrolling = 'yes' + break + + case false: + iframe.scrolling = 'no' + break + + default: + iframe.scrolling = settings[iframeId] + ? settings[iframeId].scrolling + : 'no' + } + } + + // The V1 iFrame script expects an int, where as in V2 expects a CSS + // string value such as '1px 3em', so if we have an int for V2, set V1=V2 + // and then convert V2 to a string PX value. + function setupBodyMarginValues() { + if ( + 'number' === + typeof (settings[iframeId] && settings[iframeId].bodyMargin) || + '0' === (settings[iframeId] && settings[iframeId].bodyMargin) + ) { + settings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin + settings[iframeId].bodyMargin = + '' + settings[iframeId].bodyMargin + 'px' + } + } + + function checkReset() { + // Reduce scope of firstRun to function, because IE8's JS execution + // context stack is borked and this value gets externally + // changed midway through running this function!!! + var firstRun = settings[iframeId] && settings[iframeId].firstRun, + resetRequertMethod = + settings[iframeId] && + settings[iframeId].heightCalculationMethod in resetRequiredMethods + + if (!firstRun && resetRequertMethod) { + resetIFrame({ iframe: iframe, height: 0, width: 0, type: 'init' }) + } + } + + function setupIFrameObject() { + if (settings[iframeId]) { + settings[iframeId].iframe.iFrameResizer = { + close: closeIFrame.bind(null, settings[iframeId].iframe), + + removeListeners: removeIframeListeners.bind( + null, + settings[iframeId].iframe + ), + + resize: trigger.bind( + null, + 'Window resize', + 'resize', + settings[iframeId].iframe + ), + + moveToAnchor: function(anchor) { + trigger( + 'Move to anchor', + 'moveToAnchor:' + anchor, + settings[iframeId].iframe, + iframeId + ) + }, + + sendMessage: function(message) { + message = JSON.stringify(message) + trigger( + 'Send Message', + 'message:' + message, + settings[iframeId].iframe, + iframeId + ) + } + } + } + } + + // We have to call trigger twice, as we can not be sure if all + // iframes have completed loading when this code runs. The + // event listener also catches the page changing in the iFrame. + function init(msg) { + function iFrameLoaded() { + trigger('iFrame.onload', msg, iframe, undefined, true) + checkReset() + } + + function createDestroyObserver(MutationObserver) { + if (!iframe.parentNode) { + return + } + + var destroyObserver = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + var removedNodes = Array.prototype.slice.call(mutation.removedNodes) // Transform NodeList into an Array + removedNodes.forEach(function(removedNode) { + if (removedNode === iframe) { + closeIFrame(iframe) + } + }) + }) + }) + destroyObserver.observe(iframe.parentNode, { + childList: true + }) + } + + var MutationObserver = getMutationObserver() + if (MutationObserver) { + createDestroyObserver(MutationObserver) + } + + addEventListener(iframe, 'load', iFrameLoaded) + trigger('init', msg, iframe, undefined, true) + } + + function checkOptions(options) { + if ('object' !== typeof options) { + throw new TypeError('Options is not an object') + } + } + + function copyOptions(options) { + // eslint-disable-next-line no-restricted-syntax + for (var option in defaults) { + if (Object.prototype.hasOwnProperty.call(defaults, option)) { + settings[iframeId][option] = Object.prototype.hasOwnProperty.call( + options, + option + ) + ? options[option] + : defaults[option] + } + } + } + + function getTargetOrigin(remoteHost) { + return '' === remoteHost || 'file://' === remoteHost ? '*' : remoteHost + } + + function depricate(key) { + var splitName = key.split('Callback') + + if (splitName.length === 2) { + var name = + 'on' + splitName[0].charAt(0).toUpperCase() + splitName[0].slice(1) + this[name] = this[key] + delete this[key] + warn( + iframeId, + "Deprecated: '" + + key + + "' has been renamed '" + + name + + "'. The old method will be removed in the next major version." + ) + } + } + + function processOptions(options) { + options = options || {} + settings[iframeId] = { + firstRun: true, + iframe: iframe, + remoteHost: iframe.src + .split('/') + .slice(0, 3) + .join('/') + } + + checkOptions(options) + Object.keys(options).forEach(depricate, options) + copyOptions(options) + + if (settings[iframeId]) { + settings[iframeId].targetOrigin = + true === settings[iframeId].checkOrigin + ? getTargetOrigin(settings[iframeId].remoteHost) + : '*' + } + } + + function beenHere() { + return iframeId in settings && 'iFrameResizer' in iframe + } + + var iframeId = ensureHasId(iframe.id) + + if (!beenHere()) { + processOptions(options) + setScrolling() + setLimits() + setupBodyMarginValues() + init(createOutgoingMsg(iframeId)) + setupIFrameObject() + } else { + warn(iframeId, 'Ignored iFrame, already setup.') + } + } + + function debouce(fn, time) { + if (null === timer) { + timer = setTimeout(function() { + timer = null + fn() + }, time) + } + } + + var frameTimer = {} + function debounceFrameEvents(fn, time, frameId) { + if (!frameTimer[frameId]) { + frameTimer[frameId] = setTimeout(function() { + frameTimer[frameId] = null + fn() + }, time) + } + } + + // Not testable in PhantomJS + /* istanbul ignore next */ + + function fixHiddenIFrames() { + function checkIFrames() { + function checkIFrame(settingId) { + function chkDimension(dimension) { + return ( + '0px' === + (settings[settingId] && settings[settingId].iframe.style[dimension]) + ) + } + + function isVisible(el) { + return null !== el.offsetParent + } + + if ( + settings[settingId] && + isVisible(settings[settingId].iframe) && + (chkDimension('height') || chkDimension('width')) + ) { + trigger( + 'Visibility change', + 'resize', + settings[settingId].iframe, + settingId + ) + } + } + + Object.keys(settings).forEach(function(key) { + checkIFrame(settings[key]) + }) + } + + function mutationObserved(mutations) { + log( + 'window', + 'Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type + ) + debouce(checkIFrames, 16) + } + + function createMutationObserver() { + var target = document.querySelector('body'), + config = { + attributes: true, + attributeOldValue: false, + characterData: true, + characterDataOldValue: false, + childList: true, + subtree: true + }, + observer = new MutationObserver(mutationObserved) + + observer.observe(target, config) + } + + var MutationObserver = getMutationObserver() + if (MutationObserver) { + createMutationObserver() + } + } + + function resizeIFrames(event) { + function resize() { + sendTriggerMsg('Window ' + event, 'resize') + } + + log('window', 'Trigger event: ' + event) + debouce(resize, 16) + } + + // Not testable in PhantomJS + /* istanbul ignore next */ + function tabVisible() { + function resize() { + sendTriggerMsg('Tab Visable', 'resize') + } + + if ('hidden' !== document.visibilityState) { + log('document', 'Trigger event: Visiblity change') + debouce(resize, 16) + } + } + + function sendTriggerMsg(eventName, event) { + function isIFrameResizeEnabled(iframeId) { + return ( + settings[iframeId] && + 'parent' === settings[iframeId].resizeFrom && + settings[iframeId].autoResize && + !settings[iframeId].firstRun + ) + } + + Object.keys(settings).forEach(function(iframeId) { + if (isIFrameResizeEnabled(iframeId)) { + trigger(eventName, event, document.getElementById(iframeId), iframeId) + } + }) + } + + function setupEventListeners() { + addEventListener(window, 'message', iFrameListener) + + addEventListener(window, 'resize', function() { + resizeIFrames('resize') + }) + + addEventListener(document, 'visibilitychange', tabVisible) + + addEventListener(document, '-webkit-visibilitychange', tabVisible) + } + + function factory() { + function init(options, element) { + function chkType() { + if (!element.tagName) { + throw new TypeError('Object is not a valid DOM element') + } else if ('IFRAME' !== element.tagName.toUpperCase()) { + throw new TypeError( + 'Expected ') !== -1; + }; + var createFragmentedLevel = function (fragments) { + return { + type: 'fragmented', + fragments: fragments, + content: '', + bookmark: null, + beforeBookmark: null + }; + }; + var createCompleteLevel = function (content) { + return { + type: 'complete', + fragments: null, + content: content, + bookmark: null, + beforeBookmark: null + }; + }; + var createFromEditor = function (editor) { + var fragments, content, trimmedFragments; + fragments = Fragments.read(editor.getBody()); + trimmedFragments = bind(fragments, function (html) { + var trimmed = TrimHtml.trimInternal(editor.serializer, html); + return trimmed.length > 0 ? [trimmed] : []; + }); + content = trimmedFragments.join(''); + return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content); + }; + var applyToEditor = function (editor, level, before) { + if (level.type === 'fragmented') { + Fragments.write(level.fragments, editor.getBody()); + } else { + editor.setContent(level.content, { format: 'raw' }); + } + editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark); + }; + var getLevelContent = function (level) { + return level.type === 'fragmented' ? level.fragments.join('') : level.content; + }; + var getCleanLevelContent = function (level) { + var elm = Element.fromTag('body', lazyTempDocument()); + set$1(elm, getLevelContent(level)); + each(descendants$1(elm, '*[data-mce-bogus]'), unwrap); + return get$4(elm); + }; + var hasEqualContent = function (level1, level2) { + return getLevelContent(level1) === getLevelContent(level2); + }; + var hasEqualCleanedContent = function (level1, level2) { + return getCleanLevelContent(level1) === getCleanLevelContent(level2); + }; + var isEq$2 = function (level1, level2) { + if (!level1 || !level2) { + return false; + } else if (hasEqualContent(level1, level2)) { + return true; + } else { + return hasEqualCleanedContent(level1, level2); + } + }; + var Levels = { + createFragmentedLevel: createFragmentedLevel, + createCompleteLevel: createCompleteLevel, + createFromEditor: createFromEditor, + applyToEditor: applyToEditor, + isEq: isEq$2 + }; + + var UndoManager = function (editor) { + var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0; + var isUnlocked = function () { + return locks === 0; + }; + var setTyping = function (typing) { + if (isUnlocked()) { + self.typing = typing; + } + }; + var setDirty = function (state) { + editor.setDirty(state); + }; + var addNonTypingUndoLevel = function (e) { + setTyping(false); + self.add({}, e); + }; + var endTyping = function () { + if (self.typing) { + setTyping(false); + self.add(); + } + }; + editor.on('init', function () { + self.add(); + }); + editor.on('BeforeExecCommand', function (e) { + var cmd = e.command; + if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') { + endTyping(); + self.beforeChange(); + } + }); + editor.on('ExecCommand', function (e) { + var cmd = e.command; + if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') { + addNonTypingUndoLevel(e); + } + }); + editor.on('ObjectResizeStart cut', function () { + self.beforeChange(); + }); + editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel); + editor.on('dragend', addNonTypingUndoLevel); + editor.on('keyup', function (e) { + var keyCode = e.keyCode; + if (e.isDefaultPrevented()) { + return; + } + if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) { + addNonTypingUndoLevel(); + editor.nodeChanged(); + } + if (keyCode === 46 || keyCode === 8) { + editor.nodeChanged(); + } + if (isFirstTypedCharacter && self.typing && Levels.isEq(Levels.createFromEditor(editor), data[0]) === false) { + if (editor.isDirty() === false) { + setDirty(true); + editor.fire('change', { + level: data[0], + lastLevel: null + }); + } + editor.fire('TypingUndo'); + isFirstTypedCharacter = false; + editor.nodeChanged(); + } + }); + editor.on('keydown', function (e) { + var keyCode = e.keyCode; + if (e.isDefaultPrevented()) { + return; + } + if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) { + if (self.typing) { + addNonTypingUndoLevel(e); + } + return; + } + var modKey = e.ctrlKey && !e.altKey || e.metaKey; + if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) { + self.beforeChange(); + setTyping(true); + self.add({}, e); + isFirstTypedCharacter = true; + } + }); + editor.on('mousedown', function (e) { + if (self.typing) { + addNonTypingUndoLevel(e); + } + }); + var isInsertReplacementText = function (event) { + return event.inputType === 'insertReplacementText'; + }; + var isInsertTextDataNull = function (event) { + return event.inputType === 'insertText' && event.data === null; + }; + editor.on('input', function (e) { + if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) { + addNonTypingUndoLevel(e); + } + }); + editor.addShortcut('meta+z', '', 'Undo'); + editor.addShortcut('meta+y,meta+shift+z', '', 'Redo'); + editor.on('AddUndo Undo Redo ClearUndos', function (e) { + if (!e.isDefaultPrevented()) { + editor.nodeChanged(); + } + }); + self = { + data: data, + typing: false, + beforeChange: function () { + if (isUnlocked()) { + beforeBookmark = GetBookmark.getUndoBookmark(editor.selection); + } + }, + add: function (level, event) { + var i; + var settings = editor.settings; + var lastLevel, currentLevel; + currentLevel = Levels.createFromEditor(editor); + level = level || {}; + level = Tools.extend(level, currentLevel); + if (isUnlocked() === false || editor.removed) { + return null; + } + lastLevel = data[index]; + if (editor.fire('BeforeAddUndo', { + level: level, + lastLevel: lastLevel, + originalEvent: event + }).isDefaultPrevented()) { + return null; + } + if (lastLevel && Levels.isEq(lastLevel, level)) { + return null; + } + if (data[index]) { + data[index].beforeBookmark = beforeBookmark; + } + if (settings.custom_undo_redo_levels) { + if (data.length > settings.custom_undo_redo_levels) { + for (i = 0; i < data.length - 1; i++) { + data[i] = data[i + 1]; + } + data.length--; + index = data.length; + } + } + level.bookmark = GetBookmark.getUndoBookmark(editor.selection); + if (index < data.length - 1) { + data.length = index + 1; + } + data.push(level); + index = data.length - 1; + var args = { + level: level, + lastLevel: lastLevel, + originalEvent: event + }; + editor.fire('AddUndo', args); + if (index > 0) { + setDirty(true); + editor.fire('change', args); + } + return level; + }, + undo: function () { + var level; + if (self.typing) { + self.add(); + self.typing = false; + setTyping(false); + } + if (index > 0) { + level = data[--index]; + Levels.applyToEditor(editor, level, true); + setDirty(true); + editor.fire('Undo', { level: level }); + } + return level; + }, + redo: function () { + var level; + if (index < data.length - 1) { + level = data[++index]; + Levels.applyToEditor(editor, level, false); + setDirty(true); + editor.fire('Redo', { level: level }); + } + return level; + }, + clear: function () { + data = []; + index = 0; + self.typing = false; + self.data = data; + editor.fire('ClearUndos'); + }, + reset: function () { + self.clear(); + self.add(); + }, + hasUndo: function () { + return index > 0 || self.typing && data[0] && !Levels.isEq(Levels.createFromEditor(editor), data[0]); + }, + hasRedo: function () { + return index < data.length - 1 && !self.typing; + }, + transact: function (callback) { + endTyping(); + self.beforeChange(); + self.ignore(callback); + return self.add(); + }, + ignore: function (callback) { + try { + locks++; + callback(); + } finally { + locks--; + } + }, + extra: function (callback1, callback2) { + var lastLevel, bookmark; + if (self.transact(callback1)) { + bookmark = data[index].bookmark; + lastLevel = data[index - 1]; + Levels.applyToEditor(editor, lastLevel, true); + if (self.transact(callback2)) { + data[index - 1].beforeBookmark = bookmark; + } + } + } + }; + return self; + }; + + var getLastChildren$1 = function (elm) { + var children = []; + var rawNode = elm.dom(); + while (rawNode) { + children.push(Element.fromDom(rawNode)); + rawNode = rawNode.lastChild; + } + return children; + }; + var removeTrailingBr = function (elm) { + var allBrs = descendants$1(elm, 'br'); + var brs = filter(getLastChildren$1(elm).slice(-1), isBr$1); + if (allBrs.length === brs.length) { + each(brs, remove$1); + } + }; + var fillWithPaddingBr = function (elm) { + empty(elm); + append(elm, Element.fromHtml('
')); + }; + var isPaddingContents = function (elm) { + return isText(elm) ? get$5(elm) === '\xA0' : isBr$1(elm); + }; + var isPaddedElement = function (elm) { + return filter(children(elm), isPaddingContents).length === 1; + }; + var trimBlockTrailingBr = function (elm) { + lastChild(elm).each(function (lastChild) { + prevSibling(lastChild).each(function (lastChildPrevSibling) { + if (isBlock(elm) && isBr$1(lastChild) && isBlock(lastChildPrevSibling)) { + remove$1(lastChild); + } + }); + }); + }; + var PaddingBr = { + removeTrailingBr: removeTrailingBr, + fillWithPaddingBr: fillWithPaddingBr, + isPaddedElement: isPaddedElement, + trimBlockTrailingBr: trimBlockTrailingBr + }; + + var isEq$3 = FormatUtils.isEq; + var matchesUnInheritedFormatSelector = function (ed, node, name) { + var formatList = ed.formatter.get(name); + if (formatList) { + for (var i = 0; i < formatList.length; i++) { + if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) { + return true; + } + } + } + return false; + }; + var matchParents = function (editor, node, name, vars) { + var root = editor.dom.getRoot(); + if (node === root) { + return false; + } + node = editor.dom.getParent(node, function (node) { + if (matchesUnInheritedFormatSelector(editor, node, name)) { + return true; + } + return node.parentNode === root || !!matchNode(editor, node, name, vars, true); + }); + return matchNode(editor, node, name, vars); + }; + var matchName = function (dom, node, format) { + if (isEq$3(node, format.inline)) { + return true; + } + if (isEq$3(node, format.block)) { + return true; + } + if (format.selector) { + return node.nodeType === 1 && dom.is(node, format.selector); + } + }; + var matchItems = function (dom, node, format, itemName, similar, vars) { + var key, value; + var items = format[itemName]; + var i; + if (format.onmatch) { + return format.onmatch(node, format, itemName); + } + if (items) { + if (typeof items.length === 'undefined') { + for (key in items) { + if (items.hasOwnProperty(key)) { + if (itemName === 'attributes') { + value = dom.getAttrib(node, key); + } else { + value = FormatUtils.getStyle(dom, node, key); + } + if (similar && !value && !format.exact) { + return; + } + if ((!similar || format.exact) && !isEq$3(value, FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(items[key], vars), key))) { + return; + } + } + } + } else { + for (i = 0; i < items.length; i++) { + if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : FormatUtils.getStyle(dom, node, items[i])) { + return format; + } + } + } + } + return format; + }; + var matchNode = function (ed, node, name, vars, similar) { + var formatList = ed.formatter.get(name); + var format, i, x, classes; + var dom = ed.dom; + if (formatList && node) { + for (i = 0; i < formatList.length; i++) { + format = formatList[i]; + if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) { + if (classes = format.classes) { + for (x = 0; x < classes.length; x++) { + if (!ed.dom.hasClass(node, classes[x])) { + return; + } + } + } + return format; + } + } + } + }; + var match = function (editor, name, vars, node) { + var startNode; + if (node) { + return matchParents(editor, node, name, vars); + } + node = editor.selection.getNode(); + if (matchParents(editor, node, name, vars)) { + return true; + } + startNode = editor.selection.getStart(); + if (startNode !== node) { + if (matchParents(editor, startNode, name, vars)) { + return true; + } + } + return false; + }; + var matchAll = function (editor, names, vars) { + var startElement; + var matchedFormatNames = []; + var checkedMap = {}; + startElement = editor.selection.getStart(); + editor.dom.getParent(startElement, function (node) { + var i, name; + for (i = 0; i < names.length; i++) { + name = names[i]; + if (!checkedMap[name] && matchNode(editor, node, name, vars)) { + checkedMap[name] = true; + matchedFormatNames.push(name); + } + } + }, editor.dom.getRoot()); + return matchedFormatNames; + }; + var canApply = function (editor, name) { + var formatList = editor.formatter.get(name); + var startNode, parents, i, x, selector; + var dom = editor.dom; + if (formatList) { + startNode = editor.selection.getStart(); + parents = FormatUtils.getParents(dom, startNode); + for (x = formatList.length - 1; x >= 0; x--) { + selector = formatList[x].selector; + if (!selector || formatList[x].defaultBlock) { + return true; + } + for (i = parents.length - 1; i >= 0; i--) { + if (dom.is(parents[i], selector)) { + return true; + } + } + } + } + return false; + }; + var MatchFormat = { + matchNode: matchNode, + matchName: matchName, + match: match, + matchAll: matchAll, + canApply: canApply, + matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector + }; + + var splitText = function (node, offset) { + return node.splitText(offset); + }; + var split$1 = function (rng) { + var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset; + if (startContainer === endContainer && NodeType.isText(startContainer)) { + if (startOffset > 0 && startOffset < startContainer.nodeValue.length) { + endContainer = splitText(startContainer, startOffset); + startContainer = endContainer.previousSibling; + if (endOffset > startOffset) { + endOffset = endOffset - startOffset; + startContainer = endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + startOffset = 0; + } else { + endOffset = 0; + } + } + } else { + if (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) { + startContainer = splitText(startContainer, startOffset); + startOffset = 0; + } + if (NodeType.isText(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) { + endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + } + } + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + }; + + var isCollapsibleWhitespace = function (c) { + return ' \f\n\r\t\x0B'.indexOf(c) !== -1; + }; + var normalizeContent = function (content, isStartOfContent, isEndOfContent) { + var result = foldl(content, function (acc, c) { + if (isCollapsibleWhitespace(c) || c === '\xA0') { + if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) { + return { + previousCharIsSpace: false, + str: acc.str + '\xA0' + }; + } else { + return { + previousCharIsSpace: true, + str: acc.str + ' ' + }; + } + } else { + return { + previousCharIsSpace: false, + str: acc.str + c + }; + } + }, { + previousCharIsSpace: false, + str: '' + }); + return result.str; + }; + var normalize = function (node, offset, count) { + if (count === 0) { + return; + } + var whitespace = node.data.slice(offset, offset + count); + var isEndOfContent = offset + count >= node.data.length; + var isStartOfContent = offset === 0; + node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent)); + }; + var normalizeWhitespaceAfter = function (node, offset) { + var content = node.data.slice(offset); + var whitespaceCount = content.length - lTrim(content).length; + return normalize(node, offset, whitespaceCount); + }; + var normalizeWhitespaceBefore = function (node, offset) { + var content = node.data.slice(0, offset); + var whitespaceCount = content.length - rTrim(content).length; + return normalize(node, offset - whitespaceCount, whitespaceCount); + }; + var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace) { + var whitespaceOffset = rTrim(prevNode.data).length; + prevNode.appendData(nextNode.data); + remove$1(Element.fromDom(nextNode)); + if (normalizeWhitespace) { + normalizeWhitespaceAfter(prevNode, whitespaceOffset); + } + return prevNode; + }; + + var ancestor$2 = function (scope, selector, isRoot) { + return ancestor$1(scope, selector, isRoot).isSome(); + }; + + var hasWhitespacePreserveParent = function (rootNode, node) { + var rootElement = Element.fromDom(rootNode); + var startNode = Element.fromDom(node); + return ancestor$2(startNode, 'pre,code', curry(eq, rootElement)); + }; + var isWhitespace = function (rootNode, node) { + return NodeType.isText(node) && /^[ \t\r\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false; + }; + var isNamedAnchor = function (node) { + return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name'); + }; + var isContent$1 = function (rootNode, node) { + return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node); + }; + var isBookmark = NodeType.hasAttribute('data-mce-bookmark'); + var isBogus$2 = NodeType.hasAttribute('data-mce-bogus'); + var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all'); + var isEmptyNode = function (targetNode) { + var node, brCount = 0; + if (isContent$1(targetNode, targetNode)) { + return false; + } else { + node = targetNode.firstChild; + if (!node) { + return true; + } + var walker = new TreeWalker(node, targetNode); + do { + if (isBogusAll$1(node)) { + node = walker.next(true); + continue; + } + if (isBogus$2(node)) { + node = walker.next(); + continue; + } + if (NodeType.isBr(node)) { + brCount++; + node = walker.next(); + continue; + } + if (isContent$1(targetNode, node)) { + return false; + } + node = walker.next(); + } while (node); + return brCount <= 1; + } + }; + var isEmpty$1 = function (elm) { + return isEmptyNode(elm.dom()); + }; + var Empty = { isEmpty: isEmpty$1 }; + + var needsReposition = function (pos, elm) { + var container = pos.container(); + var offset = pos.offset(); + return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset(); + }; + var reposition = function (elm, pos) { + return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos; + }; + var beforeOrStartOf = function (node) { + return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node); + }; + var afterOrEndOf = function (node) { + return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node); + }; + var getPreviousSiblingCaretPosition = function (elm) { + if (isCaretCandidate(elm.previousSibling)) { + return Option.some(afterOrEndOf(elm.previousSibling)); + } else { + return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none(); + } + }; + var getNextSiblingCaretPosition = function (elm) { + if (isCaretCandidate(elm.nextSibling)) { + return Option.some(beforeOrStartOf(elm.nextSibling)); + } else { + return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none(); + } + }; + var findCaretPositionBackwardsFromElm = function (rootElement, elm) { + var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode); + return CaretFinder.prevPosition(rootElement, startPosition).fold(function () { + return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)); + }, Option.some); + }; + var findCaretPositionForwardsFromElm = function (rootElement, elm) { + return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () { + return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm)); + }, Option.some); + }; + var findCaretPositionBackwards = function (rootElement, elm) { + return getPreviousSiblingCaretPosition(elm).orThunk(function () { + return getNextSiblingCaretPosition(elm); + }).orThunk(function () { + return findCaretPositionBackwardsFromElm(rootElement, elm); + }); + }; + var findCaretPositionForward = function (rootElement, elm) { + return getNextSiblingCaretPosition(elm).orThunk(function () { + return getPreviousSiblingCaretPosition(elm); + }).orThunk(function () { + return findCaretPositionForwardsFromElm(rootElement, elm); + }); + }; + var findCaretPosition$1 = function (forward, rootElement, elm) { + return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm); + }; + var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) { + return findCaretPosition$1(forward, rootElement, elm).map(curry(reposition, elm)); + }; + var setSelection = function (editor, forward, pos) { + pos.fold(function () { + editor.focus(); + }, function (pos) { + editor.selection.setRng(pos.toRange(), forward); + }); + }; + var eqRawNode = function (rawNode) { + return function (elm) { + return elm.dom() === rawNode; + }; + }; + var isBlock$2 = function (editor, elm) { + return elm && editor.schema.getBlockElements().hasOwnProperty(name(elm)); + }; + var paddEmptyBlock = function (elm) { + if (Empty.isEmpty(elm)) { + var br = Element.fromHtml('
'); + empty(elm); + append(elm, br); + return Option.some(CaretPosition$1.before(br.dom())); + } else { + return Option.none(); + } + }; + var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) { + var prevTextOpt = prevSibling(elm).filter(function (e) { + return NodeType.isText(e.dom()); + }); + var nextTextOpt = nextSibling(elm).filter(function (e) { + return NodeType.isText(e.dom()); + }); + remove$1(elm); + return liftN([ + prevTextOpt, + nextTextOpt, + afterDeletePosOpt + ], function (prev, next, pos) { + var prevNode = prev.dom(), nextNode = next.dom(); + var offset = prevNode.data.length; + mergeTextNodes(prevNode, nextNode, normalizeWhitespace); + return pos.container() === nextNode ? CaretPosition$1(prevNode, offset) : pos; + }).orThunk(function () { + if (normalizeWhitespace) { + prevTextOpt.each(function (elm) { + return normalizeWhitespaceBefore(elm.dom(), elm.dom().length); + }); + nextTextOpt.each(function (elm) { + return normalizeWhitespaceAfter(elm.dom(), 0); + }); + } + return afterDeletePosOpt; + }); + }; + var isInlineElement = function (editor, element) { + return has(editor.schema.getTextInlineElements(), name(element)); + }; + var deleteElement = function (editor, forward, elm, moveCaret) { + if (moveCaret === void 0) { + moveCaret = true; + } + var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom()); + var parentBlock = ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody())); + var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm)); + if (editor.dom.isEmpty(editor.getBody())) { + editor.setContent(''); + editor.selection.setCursorLocation(); + } else { + parentBlock.bind(paddEmptyBlock).fold(function () { + if (moveCaret) { + setSelection(editor, forward, normalizedAfterDeletePos); + } + }, function (paddPos) { + if (moveCaret) { + setSelection(editor, forward, Option.some(paddPos)); + } + }); + } + }; + var DeleteElement = { deleteElement: deleteElement }; + + var ZWSP$1 = Zwsp.ZWSP, CARET_ID$1 = '_mce_caret'; + var importNode = function (ownerDocument, node) { + return ownerDocument.importNode(node, true); + }; + var getEmptyCaretContainers = function (node) { + var nodes = []; + while (node) { + if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) { + return []; + } + if (node.nodeType === 1) { + nodes.push(node); + } + node = node.firstChild; + } + return nodes; + }; + var isCaretContainerEmpty = function (node) { + return getEmptyCaretContainers(node).length > 0; + }; + var findFirstTextNode = function (node) { + if (node) { + var walker = new TreeWalker(node, node); + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType === 3) { + return node; + } + } + } + return null; + }; + var createCaretContainer = function (fill) { + var caretContainer = Element.fromTag('span'); + setAll(caretContainer, { + 'id': CARET_ID$1, + 'data-mce-bogus': '1', + 'data-mce-type': 'format-caret' + }); + if (fill) { + append(caretContainer, Element.fromText(ZWSP$1)); + } + return caretContainer; + }; + var trimZwspFromCaretContainer = function (caretContainerNode) { + var textNode = findFirstTextNode(caretContainerNode); + if (textNode && textNode.nodeValue.charAt(0) === ZWSP$1) { + textNode.deleteData(0, 1); + } + return textNode; + }; + var removeCaretContainerNode = function (editor, node, moveCaret) { + if (moveCaret === void 0) { + moveCaret = true; + } + var dom = editor.dom, selection = editor.selection; + if (isCaretContainerEmpty(node)) { + DeleteElement.deleteElement(editor, false, Element.fromDom(node), moveCaret); + } else { + var rng = selection.getRng(); + var block = dom.getParent(node, dom.isBlock); + var textNode = trimZwspFromCaretContainer(node); + if (rng.startContainer === textNode && rng.startOffset > 0) { + rng.setStart(textNode, rng.startOffset - 1); + } + if (rng.endContainer === textNode && rng.endOffset > 0) { + rng.setEnd(textNode, rng.endOffset - 1); + } + dom.remove(node, true); + if (block && dom.isEmpty(block)) { + PaddingBr.fillWithPaddingBr(Element.fromDom(block)); + } + selection.setRng(rng); + } + }; + var removeCaretContainer = function (editor, node, moveCaret) { + if (moveCaret === void 0) { + moveCaret = true; + } + var dom = editor.dom, selection = editor.selection; + if (!node) { + node = getParentCaretContainer(editor.getBody(), selection.getStart()); + if (!node) { + while (node = dom.get(CARET_ID$1)) { + removeCaretContainerNode(editor, node, false); + } + } + } else { + removeCaretContainerNode(editor, node, moveCaret); + } + }; + var insertCaretContainerNode = function (editor, caretContainer, formatNode) { + var dom = editor.dom, block = dom.getParent(formatNode, curry(FormatUtils.isTextBlock, editor)); + if (block && dom.isEmpty(block)) { + formatNode.parentNode.replaceChild(caretContainer, formatNode); + } else { + PaddingBr.removeTrailingBr(Element.fromDom(formatNode)); + if (dom.isEmpty(formatNode)) { + formatNode.parentNode.replaceChild(caretContainer, formatNode); + } else { + dom.insertAfter(caretContainer, formatNode); + } + } + }; + var appendNode = function (parentNode, node) { + parentNode.appendChild(node); + return node; + }; + var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) { + var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) { + return appendNode(parentNode, formatNode.cloneNode(false)); + }, caretContainer); + return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP$1)); + }; + var applyCaretFormat = function (editor, name, vars) { + var rng, caretContainer, textNode, offset, bookmark, container, text; + var selection = editor.selection; + rng = selection.getRng(); + offset = rng.startOffset; + container = rng.startContainer; + text = container.nodeValue; + caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart()); + if (caretContainer) { + textNode = findFirstTextNode(caretContainer); + } + var wordcharRegex = /[^\s\u00a0\u00ad\u200b\ufeff]/; + if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) { + bookmark = selection.getBookmark(); + rng.collapse(true); + rng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name)); + rng = split$1(rng); + editor.formatter.apply(name, vars, rng); + selection.moveToBookmark(bookmark); + } else { + if (!caretContainer || textNode.nodeValue !== ZWSP$1) { + caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom()); + textNode = caretContainer.firstChild; + rng.insertNode(caretContainer); + offset = 1; + editor.formatter.apply(name, vars, caretContainer); + } else { + editor.formatter.apply(name, vars, caretContainer); + } + selection.setCursorLocation(textNode, offset); + } + }; + var removeCaretFormat = function (editor, name, vars, similar) { + var dom = editor.dom, selection = editor.selection; + var container, offset, bookmark; + var hasContentAfter, node, formatNode; + var parents = [], rng = selection.getRng(); + var caretContainer; + container = rng.startContainer; + offset = rng.startOffset; + node = container; + if (container.nodeType === 3) { + if (offset !== container.nodeValue.length) { + hasContentAfter = true; + } + node = node.parentNode; + } + while (node) { + if (MatchFormat.matchNode(editor, node, name, vars, similar)) { + formatNode = node; + break; + } + if (node.nextSibling) { + hasContentAfter = true; + } + parents.push(node); + node = node.parentNode; + } + if (!formatNode) { + return; + } + if (hasContentAfter) { + bookmark = selection.getBookmark(); + rng.collapse(true); + var expandedRng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name), true); + expandedRng = split$1(expandedRng); + editor.formatter.remove(name, vars, expandedRng); + selection.moveToBookmark(bookmark); + } else { + caretContainer = getParentCaretContainer(editor.getBody(), formatNode); + var newCaretContainer = createCaretContainer(false).dom(); + var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer); + if (caretContainer) { + insertCaretContainerNode(editor, newCaretContainer, caretContainer); + } else { + insertCaretContainerNode(editor, newCaretContainer, formatNode); + } + removeCaretContainerNode(editor, caretContainer, false); + selection.setCursorLocation(caretNode, 1); + if (dom.isEmpty(formatNode)) { + dom.remove(formatNode); + } + } + }; + var disableCaretContainer = function (editor, keyCode) { + var selection = editor.selection, body = editor.getBody(); + removeCaretContainer(editor, null, false); + if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) { + removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart())); + } + if (keyCode === 37 || keyCode === 39) { + removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart())); + } + }; + var setup$5 = function (editor) { + editor.on('mouseup keydown', function (e) { + disableCaretContainer(editor, e.keyCode); + }); + }; + var replaceWithCaretFormat = function (targetNode, formatNodes) { + var caretContainer = createCaretContainer(false); + var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom()); + before(Element.fromDom(targetNode), caretContainer); + remove$1(Element.fromDom(targetNode)); + return CaretPosition$1(innerMost, 0); + }; + var isFormatElement = function (editor, element) { + var inlineElements = editor.schema.getTextInlineElements(); + return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom()); + }; + var isEmptyCaretFormatElement = function (element) { + return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom()); + }; + + var postProcessHooks = {}, filter$3 = ArrUtils.filter, each$9 = ArrUtils.each; + var addPostProcessHook = function (name, hook) { + var hooks = postProcessHooks[name]; + if (!hooks) { + postProcessHooks[name] = hooks = []; + } + postProcessHooks[name].push(hook); + }; + var postProcess = function (name, editor) { + each$9(postProcessHooks[name], function (hook) { + hook(editor); + }); + }; + addPostProcessHook('pre', function (editor) { + var rng = editor.selection.getRng(); + var isPre, blocks; + var hasPreSibling = function (pre) { + return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1; + }; + var joinPre = function (pre1, pre2) { + DomQuery(pre2).remove(); + DomQuery(pre1).append('

').append(pre2.childNodes); + }; + isPre = NodeType.matchNodeNames(['pre']); + if (!rng.collapsed) { + blocks = editor.selection.getSelectedBlocks(); + each$9(filter$3(filter$3(blocks, isPre), hasPreSibling), function (pre) { + joinPre(pre.previousSibling, pre); + }); + } + }); + var Hooks = { postProcess: postProcess }; + + var each$a = Tools.each; + var ElementUtils = function (dom) { + this.compare = function (node1, node2) { + if (node1.nodeName !== node2.nodeName) { + return false; + } + var getAttribs = function (node) { + var attribs = {}; + each$a(dom.getAttribs(node), function (attr) { + var name = attr.nodeName.toLowerCase(); + if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) { + attribs[name] = dom.getAttrib(node, name); + } + }); + return attribs; + }; + var compareObjects = function (obj1, obj2) { + var value, name; + for (name in obj1) { + if (obj1.hasOwnProperty(name)) { + value = obj2[name]; + if (typeof value === 'undefined') { + return false; + } + if (obj1[name] !== value) { + return false; + } + delete obj2[name]; + } + } + for (name in obj2) { + if (obj2.hasOwnProperty(name)) { + return false; + } + } + return true; + }; + if (!compareObjects(getAttribs(node1), getAttribs(node2))) { + return false; + } + if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) { + return false; + } + return !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2); + }; + }; + + var MCE_ATTR_RE = /^(src|href|style)$/; + var each$b = Tools.each; + var isEq$4 = FormatUtils.isEq; + var isTableCell$2 = function (node) { + return /^(TH|TD)$/.test(node.nodeName); + }; + var isChildOfInlineParent = function (dom, node, parent) { + return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent); + }; + var getContainer = function (ed, rng, start) { + var container, offset, lastIdx; + container = rng[start ? 'startContainer' : 'endContainer']; + offset = rng[start ? 'startOffset' : 'endOffset']; + if (NodeType.isElement(container)) { + lastIdx = container.childNodes.length - 1; + if (!start && offset) { + offset--; + } + container = container.childNodes[offset > lastIdx ? lastIdx : offset]; + } + if (NodeType.isText(container) && start && offset >= container.nodeValue.length) { + container = new TreeWalker(container, ed.getBody()).next() || container; + } + if (NodeType.isText(container) && !start && offset === 0) { + container = new TreeWalker(container, ed.getBody()).prev() || container; + } + return container; + }; + var wrap$2 = function (dom, node, name, attrs) { + var wrapper = dom.create(name, attrs); + node.parentNode.insertBefore(wrapper, node); + wrapper.appendChild(node); + return wrapper; + }; + var wrapWithSiblings = function (dom, node, next, name, attrs) { + var start = Element.fromDom(node); + var wrapper = Element.fromDom(dom.create(name, attrs)); + var siblings = next ? nextSiblings(start) : prevSiblings(start); + append$1(wrapper, siblings); + if (next) { + before(start, wrapper); + prepend(wrapper, start); + } else { + after(start, wrapper); + append(wrapper, start); + } + return wrapper.dom(); + }; + var matchName$1 = function (dom, node, format) { + if (isEq$4(node, format.inline)) { + return true; + } + if (isEq$4(node, format.block)) { + return true; + } + if (format.selector) { + return NodeType.isElement(node) && dom.is(node, format.selector); + } + }; + var isColorFormatAndAnchor = function (node, format) { + return format.links && node.tagName === 'A'; + }; + var find$3 = function (dom, node, next, inc) { + node = FormatUtils.getNonWhiteSpaceSibling(node, next, inc); + return !node || (node.nodeName === 'BR' || dom.isBlock(node)); + }; + var removeNode$1 = function (ed, node, format) { + var parentNode = node.parentNode; + var rootBlockElm; + var dom = ed.dom, forcedRootBlock = Settings.getForcedRootBlock(ed); + if (format.block) { + if (!forcedRootBlock) { + if (dom.isBlock(node) && !dom.isBlock(parentNode)) { + if (!find$3(dom, node, false) && !find$3(dom, node.firstChild, true, 1)) { + node.insertBefore(dom.create('br'), node.firstChild); + } + if (!find$3(dom, node, true) && !find$3(dom, node.lastChild, false, 1)) { + node.appendChild(dom.create('br')); + } + } + } else { + if (parentNode === dom.getRoot()) { + if (!format.list_block || !isEq$4(node, format.list_block)) { + each$b(Tools.grep(node.childNodes), function (node) { + if (FormatUtils.isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) { + if (!rootBlockElm) { + rootBlockElm = wrap$2(dom, node, forcedRootBlock); + dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs); + } else { + rootBlockElm.appendChild(node); + } + } else { + rootBlockElm = 0; + } + }); + } + } + } + } + if (format.selector && format.inline && !isEq$4(format.inline, node)) { + return; + } + dom.remove(node, 1); + }; + var removeFormat = function (ed, format, vars, node, compareNode) { + var i, attrs, stylesModified; + var dom = ed.dom; + if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) { + return false; + } + if (format.remove !== 'all') { + each$b(format.styles, function (value, name) { + value = FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(value, vars), name); + if (typeof name === 'number') { + name = value; + compareNode = 0; + } + if (format.remove_similar || (!compareNode || isEq$4(FormatUtils.getStyle(dom, compareNode, name), value))) { + dom.setStyle(node, name, ''); + } + stylesModified = 1; + }); + if (stylesModified && dom.getAttrib(node, 'style') === '') { + node.removeAttribute('style'); + node.removeAttribute('data-mce-style'); + } + each$b(format.attributes, function (value, name) { + var valueOut; + value = FormatUtils.replaceVars(value, vars); + if (typeof name === 'number') { + name = value; + compareNode = 0; + } + if (format.remove_similar || (!compareNode || isEq$4(dom.getAttrib(compareNode, name), value))) { + if (name === 'class') { + value = dom.getAttrib(node, name); + if (value) { + valueOut = ''; + each$b(value.split(/\s+/), function (cls) { + if (/mce\-\w+/.test(cls)) { + valueOut += (valueOut ? ' ' : '') + cls; + } + }); + if (valueOut) { + dom.setAttrib(node, name, valueOut); + return; + } + } + } + if (name === 'class') { + node.removeAttribute('className'); + } + if (MCE_ATTR_RE.test(name)) { + node.removeAttribute('data-mce-' + name); + } + node.removeAttribute(name); + } + }); + each$b(format.classes, function (value) { + value = FormatUtils.replaceVars(value, vars); + if (!compareNode || dom.hasClass(compareNode, value)) { + dom.removeClass(node, value); + } + }); + attrs = dom.getAttribs(node); + for (i = 0; i < attrs.length; i++) { + var attrName = attrs[i].nodeName; + if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) { + return false; + } + } + } + if (format.remove !== 'none') { + removeNode$1(ed, node, format); + return true; + } + }; + var findFormatRoot = function (editor, container, name, vars, similar) { + var formatRoot; + each$b(FormatUtils.getParents(editor.dom, container.parentNode).reverse(), function (parent) { + var format; + if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') { + format = MatchFormat.matchNode(editor, parent, name, vars, similar); + if (format && format.split !== false) { + formatRoot = parent; + } + } + }); + return formatRoot; + }; + var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) { + var parent, clone, lastClone, firstClone, i, formatRootParent; + var dom = editor.dom; + if (formatRoot) { + formatRootParent = formatRoot.parentNode; + for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) { + clone = dom.clone(parent, false); + for (i = 0; i < formatList.length; i++) { + if (removeFormat(editor, formatList[i], vars, clone, clone)) { + clone = 0; + break; + } + } + if (clone) { + if (lastClone) { + clone.appendChild(lastClone); + } + if (!firstClone) { + firstClone = clone; + } + lastClone = clone; + } + } + if (split && (!format.mixed || !dom.isBlock(formatRoot))) { + container = dom.split(formatRoot, container); + } + if (lastClone) { + target.parentNode.insertBefore(lastClone, target); + firstClone.appendChild(target); + } + } + return container; + }; + var remove$7 = function (ed, name, vars, node, similar) { + var formatList = ed.formatter.get(name), format = formatList[0]; + var bookmark, rng, contentEditable = true; + var dom = ed.dom; + var selection = ed.selection; + var splitToFormatRoot = function (container) { + var formatRoot = findFormatRoot(ed, container, name, vars, similar); + return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars); + }; + var isRemoveBookmarkNode = function (node) { + return Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end'); + }; + var process = function (node) { + var children, i, l, lastContentEditable, hasContentEditableState; + if (NodeType.isElement(node) && dom.getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = dom.getContentEditable(node) === 'true'; + hasContentEditableState = true; + } + children = Tools.grep(node.childNodes); + if (contentEditable && !hasContentEditableState) { + for (i = 0, l = formatList.length; i < l; i++) { + if (removeFormat(ed, formatList[i], vars, node, node)) { + break; + } + } + } + if (format.deep) { + if (children.length) { + for (i = 0, l = children.length; i < l; i++) { + process(children[i]); + } + if (hasContentEditableState) { + contentEditable = lastContentEditable; + } + } + } + }; + var unwrap = function (start) { + var node = dom.get(start ? '_start' : '_end'); + var out = node[start ? 'firstChild' : 'lastChild']; + if (isRemoveBookmarkNode(out)) { + out = out[start ? 'firstChild' : 'lastChild']; + } + if (NodeType.isText(out) && out.data.length === 0) { + out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling; + } + dom.remove(node, true); + return out; + }; + var removeRngStyle = function (rng) { + var startContainer, endContainer; + var commonAncestorContainer = rng.commonAncestorContainer; + rng = ExpandRange.expandRng(ed, rng, formatList, true); + if (format.split) { + rng = split$1(rng); + startContainer = getContainer(ed, rng, true); + endContainer = getContainer(ed, rng); + if (startContainer !== endContainer) { + if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) { + if (startContainer.nodeName === 'TR') { + startContainer = startContainer.firstChild.firstChild || startContainer; + } else { + startContainer = startContainer.firstChild || startContainer; + } + } + if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$2(endContainer) && endContainer.firstChild) { + endContainer = endContainer.firstChild || endContainer; + } + if (isChildOfInlineParent(dom, startContainer, endContainer)) { + var marker = Option.from(startContainer.firstChild).getOr(startContainer); + splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', { + 'id': '_start', + 'data-mce-type': 'bookmark' + })); + unwrap(true); + return; + } + if (isChildOfInlineParent(dom, endContainer, startContainer)) { + var marker = Option.from(endContainer.lastChild).getOr(endContainer); + splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', { + 'id': '_end', + 'data-mce-type': 'bookmark' + })); + unwrap(false); + return; + } + startContainer = wrap$2(dom, startContainer, 'span', { + 'id': '_start', + 'data-mce-type': 'bookmark' + }); + endContainer = wrap$2(dom, endContainer, 'span', { + 'id': '_end', + 'data-mce-type': 'bookmark' + }); + splitToFormatRoot(startContainer); + splitToFormatRoot(endContainer); + startContainer = unwrap(true); + endContainer = unwrap(); + } else { + startContainer = endContainer = splitToFormatRoot(startContainer); + } + rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer; + rng.startOffset = dom.nodeIndex(startContainer); + rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer; + rng.endOffset = dom.nodeIndex(endContainer) + 1; + } + RangeWalk.walk(dom, rng, function (nodes) { + each$b(nodes, function (node) { + process(node); + if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && FormatUtils.getTextDecoration(dom, node.parentNode) === 'underline') { + removeFormat(ed, { + deep: false, + exact: true, + inline: 'span', + styles: { textDecoration: 'underline' } + }, null, node); + } + }); + }); + }; + if (node) { + if (node.nodeType) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + removeRngStyle(rng); + } else { + removeRngStyle(node); + } + return; + } + if (dom.getContentEditable(selection.getNode()) === 'false') { + node = selection.getNode(); + for (var i = 0, l = formatList.length; i < l; i++) { + if (formatList[i].ceFalseOverride) { + if (removeFormat(ed, formatList[i], vars, node, node)) { + break; + } + } + } + return; + } + if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) { + bookmark = GetBookmark.getPersistentBookmark(ed.selection, true); + removeRngStyle(selection.getRng()); + selection.moveToBookmark(bookmark); + if (format.inline && MatchFormat.match(ed, name, vars, selection.getStart())) { + FormatUtils.moveStart(dom, selection, selection.getRng()); + } + ed.nodeChanged(); + } else { + removeCaretFormat(ed, name, vars, similar); + } + }; + var RemoveFormat = { + removeFormat: removeFormat, + remove: remove$7 + }; + + var each$c = Tools.each; + var isElementNode = function (node) { + return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node); + }; + var findElementSibling = function (node, siblingName) { + var sibling; + for (sibling = node; sibling; sibling = sibling[siblingName]) { + if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) { + return node; + } + if (sibling.nodeType === 1 && !Bookmarks.isBookmarkNode(sibling)) { + return sibling; + } + } + return node; + }; + var mergeSiblingsNodes = function (dom, prev, next) { + var sibling, tmpSibling; + var elementUtils = new ElementUtils(dom); + if (prev && next) { + prev = findElementSibling(prev, 'previousSibling'); + next = findElementSibling(next, 'nextSibling'); + if (elementUtils.compare(prev, next)) { + for (sibling = prev.nextSibling; sibling && sibling !== next;) { + tmpSibling = sibling; + sibling = sibling.nextSibling; + prev.appendChild(tmpSibling); + } + dom.remove(next); + Tools.each(Tools.grep(next.childNodes), function (node) { + prev.appendChild(node); + }); + return prev; + } + } + return next; + }; + var processChildElements = function (node, filter, process) { + each$c(node.childNodes, function (node) { + if (isElementNode(node)) { + if (filter(node)) { + process(node); + } + if (node.hasChildNodes()) { + processChildElements(node, filter, process); + } + } + }); + }; + var hasStyle = function (dom, name) { + return curry(function (name, node) { + return !!(node && FormatUtils.getStyle(dom, node, name)); + }, name); + }; + var applyStyle = function (dom, name, value) { + return curry(function (name, value, node) { + dom.setStyle(node, name, value); + if (node.getAttribute('style') === '') { + node.removeAttribute('style'); + } + unwrapEmptySpan(dom, node); + }, name, value); + }; + var unwrapEmptySpan = function (dom, node) { + if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) { + dom.remove(node, true); + } + }; + var processUnderlineAndColor = function (dom, node) { + var textDecoration; + if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) { + textDecoration = FormatUtils.getTextDecoration(dom, node.parentNode); + if (dom.getStyle(node, 'color') && textDecoration) { + dom.setStyle(node, 'text-decoration', textDecoration); + } else if (dom.getStyle(node, 'text-decoration') === textDecoration) { + dom.setStyle(node, 'text-decoration', null); + } + } + }; + var mergeUnderlineAndColor = function (dom, format, vars, node) { + if (format.styles.color || format.styles.textDecoration) { + Tools.walk(node, curry(processUnderlineAndColor, dom), 'childNodes'); + processUnderlineAndColor(dom, node); + } + }; + var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) { + if (format.styles && format.styles.backgroundColor) { + processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', FormatUtils.replaceVars(format.styles.backgroundColor, vars))); + } + }; + var mergeSubSup = function (dom, format, vars, node) { + if (format.inline === 'sub' || format.inline === 'sup') { + processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', '')); + dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true); + } + }; + var mergeSiblings = function (dom, format, vars, node) { + if (node && format.merge_siblings !== false) { + node = mergeSiblingsNodes(dom, FormatUtils.getNonWhiteSpaceSibling(node), node); + node = mergeSiblingsNodes(dom, node, FormatUtils.getNonWhiteSpaceSibling(node, true)); + } + }; + var clearChildStyles = function (dom, format, node) { + if (format.clear_child_styles) { + var selector = format.links ? '*:not(a)' : '*'; + each$c(dom.select(selector, node), function (node) { + if (isElementNode(node)) { + each$c(format.styles, function (value, name) { + dom.setStyle(node, name, ''); + }); + } + }); + } + }; + var mergeWithChildren = function (editor, formatList, vars, node) { + each$c(formatList, function (format) { + each$c(editor.dom.select(format.inline, node), function (child) { + if (!isElementNode(child)) { + return; + } + RemoveFormat.removeFormat(editor, format, vars, child, format.exact ? child : null); + }); + clearChildStyles(editor.dom, format, node); + }); + }; + var mergeWithParents = function (editor, format, name, vars, node) { + if (MatchFormat.matchNode(editor, node.parentNode, name, vars)) { + if (RemoveFormat.removeFormat(editor, format, vars, node)) { + return; + } + } + if (format.merge_with_parents) { + editor.dom.getParent(node.parentNode, function (parent) { + if (MatchFormat.matchNode(editor, parent, name, vars)) { + RemoveFormat.removeFormat(editor, format, vars, node); + return true; + } + }); + } + }; + var MergeFormats = { + mergeWithChildren: mergeWithChildren, + mergeUnderlineAndColor: mergeUnderlineAndColor, + mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize, + mergeSubSup: mergeSubSup, + mergeSiblings: mergeSiblings, + mergeWithParents: mergeWithParents + }; + + var createRange$1 = function (sc, so, ec, eo) { + var rng = domGlobals.document.createRange(); + rng.setStart(sc, so); + rng.setEnd(ec, eo); + return rng; + }; + var normalizeBlockSelectionRange = function (rng) { + var startPos = CaretPosition$1.fromRangeStart(rng); + var endPos = CaretPosition$1.fromRangeEnd(rng); + var rootNode = rng.commonAncestorContainer; + return CaretFinder.fromPosition(false, rootNode, endPos).map(function (newEndPos) { + if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) { + return createRange$1(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset()); + } else { + return rng; + } + }).getOr(rng); + }; + var normalize$1 = function (rng) { + return rng.collapsed ? rng : normalizeBlockSelectionRange(rng); + }; + var RangeNormalizer = { normalize: normalize$1 }; + + var each$d = Tools.each; + var isElementNode$1 = function (node) { + return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node); + }; + var applyFormat = function (ed, name, vars, node) { + var formatList = ed.formatter.get(name); + var format = formatList[0]; + var bookmark, rng; + var isCollapsed = !node && ed.selection.isCollapsed(); + var dom = ed.dom, selection = ed.selection; + var setElementFormat = function (elm, fmt) { + fmt = fmt || format; + if (elm) { + if (fmt.onformat) { + fmt.onformat(elm, fmt, vars, node); + } + each$d(fmt.styles, function (value, name) { + dom.setStyle(elm, name, FormatUtils.replaceVars(value, vars)); + }); + if (fmt.styles) { + var styleVal = dom.getAttrib(elm, 'style'); + if (styleVal) { + elm.setAttribute('data-mce-style', styleVal); + } + } + each$d(fmt.attributes, function (value, name) { + dom.setAttrib(elm, name, FormatUtils.replaceVars(value, vars)); + }); + each$d(fmt.classes, function (value) { + value = FormatUtils.replaceVars(value, vars); + if (!dom.hasClass(elm, value)) { + dom.addClass(elm, value); + } + }); + } + }; + var applyNodeStyle = function (formatList, node) { + var found = false; + if (!format.selector) { + return false; + } + each$d(formatList, function (format) { + if ('collapsed' in format && format.collapsed !== isCollapsed) { + return; + } + if (dom.is(node, format.selector) && !isCaretNode(node)) { + setElementFormat(node, format); + found = true; + return false; + } + }); + return found; + }; + var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) { + var newWrappers = []; + var wrapName, wrapElm, contentEditable = true; + wrapName = format.inline || format.block; + wrapElm = dom.create(wrapName); + setElementFormat(wrapElm); + RangeWalk.walk(dom, rng, function (nodes) { + var currentWrapElm; + var process = function (node) { + var nodeName, parentName, hasContentEditableState, lastContentEditable; + lastContentEditable = contentEditable; + nodeName = node.nodeName.toLowerCase(); + parentName = node.parentNode.nodeName.toLowerCase(); + if (node.nodeType === 1 && dom.getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = dom.getContentEditable(node) === 'true'; + hasContentEditableState = true; + } + if (FormatUtils.isEq(nodeName, 'br')) { + currentWrapElm = 0; + if (format.block) { + dom.remove(node); + } + return; + } + if (format.wrapper && MatchFormat.matchNode(ed, node, name, vars)) { + currentWrapElm = 0; + return; + } + if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && FormatUtils.isTextBlock(ed, nodeName) && FormatUtils.isValid(ed, parentName, wrapName)) { + node = dom.rename(node, wrapName); + setElementFormat(node); + newWrappers.push(node); + currentWrapElm = 0; + return; + } + if (format.selector) { + var found = applyNodeStyle(formatList, node); + if (!format.inline || found) { + currentWrapElm = 0; + return; + } + } + if (contentEditable && !hasContentEditableState && FormatUtils.isValid(ed, wrapName, nodeName) && FormatUtils.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!format.inline || !dom.isBlock(node))) { + if (!currentWrapElm) { + currentWrapElm = dom.clone(wrapElm, false); + node.parentNode.insertBefore(currentWrapElm, node); + newWrappers.push(currentWrapElm); + } + currentWrapElm.appendChild(node); + } else { + currentWrapElm = 0; + each$d(Tools.grep(node.childNodes), process); + if (hasContentEditableState) { + contentEditable = lastContentEditable; + } + currentWrapElm = 0; + } + }; + each$d(nodes, process); + }); + if (format.links === true) { + each$d(newWrappers, function (node) { + var process = function (node) { + if (node.nodeName === 'A') { + setElementFormat(node, format); + } + each$d(Tools.grep(node.childNodes), process); + }; + process(node); + }); + } + each$d(newWrappers, function (node) { + var childCount; + var getChildCount = function (node) { + var count = 0; + each$d(node.childNodes, function (node) { + if (!FormatUtils.isWhiteSpaceNode(node) && !Bookmarks.isBookmarkNode(node)) { + count++; + } + }); + return count; + }; + var getChildElementNode = function (root) { + var child = false; + each$d(root.childNodes, function (node) { + if (isElementNode$1(node)) { + child = node; + return false; + } + }); + return child; + }; + var mergeStyles = function (node) { + var child, clone; + child = getChildElementNode(node); + if (child && !Bookmarks.isBookmarkNode(child) && MatchFormat.matchName(dom, child, format)) { + clone = dom.clone(child, false); + setElementFormat(clone); + dom.replace(clone, node, true); + dom.remove(child, 1); + } + return clone || node; + }; + childCount = getChildCount(node); + if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) { + dom.remove(node, 1); + return; + } + if (format.inline || format.wrapper) { + if (!format.exact && childCount === 1) { + node = mergeStyles(node); + } + MergeFormats.mergeWithChildren(ed, formatList, vars, node); + MergeFormats.mergeWithParents(ed, format, name, vars, node); + MergeFormats.mergeBackgroundColorAndFontSize(dom, format, vars, node); + MergeFormats.mergeSubSup(dom, format, vars, node); + MergeFormats.mergeSiblings(dom, format, vars, node); + } + }); + }; + if (dom.getContentEditable(selection.getNode()) === 'false') { + node = selection.getNode(); + for (var i = 0, l = formatList.length; i < l; i++) { + if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) { + setElementFormat(node, formatList[i]); + return; + } + } + return; + } + if (format) { + if (node) { + if (node.nodeType) { + if (!applyNodeStyle(formatList, node)) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + applyRngStyle(dom, ExpandRange.expandRng(ed, rng, formatList), null, true); + } + } else { + applyRngStyle(dom, node, null, true); + } + } else { + if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) { + var curSelNode = ed.selection.getNode(); + if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) { + applyFormat(ed, formatList[0].defaultBlock); + } + ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng())); + bookmark = GetBookmark.getPersistentBookmark(ed.selection, true); + applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList)); + if (format.styles) { + MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode); + } + selection.moveToBookmark(bookmark); + FormatUtils.moveStart(dom, selection, selection.getRng()); + ed.nodeChanged(); + } else { + applyCaretFormat(ed, name, vars); + } + } + Hooks.postProcess(name, ed); + } + }; + var ApplyFormat = { applyFormat: applyFormat }; + + var setup$6 = function (registeredFormatListeners, editor) { + var currentFormats = Cell({}); + registeredFormatListeners.set({}); + editor.on('NodeChange', function (e) { + updateAndFireChangeCallbacks(editor, e.element, currentFormats, registeredFormatListeners.get()); + }); + }; + var updateAndFireChangeCallbacks = function (editor, elm, currentFormats, formatChangeData) { + var formatsList = keys(currentFormats.get()); + var newFormats = {}; + var matchedFormats = {}; + var parents = filter(FormatUtils.getParents(editor.dom, elm), function (node) { + return node.nodeType === 1 && !node.getAttribute('data-mce-bogus'); + }); + each$3(formatChangeData, function (data, format) { + Tools.each(parents, function (node) { + if (editor.formatter.matchNode(node, format, {}, data.similar)) { + if (formatsList.indexOf(format) === -1) { + each(data.callbacks, function (callback) { + callback(true, { + node: node, + format: format, + parents: parents + }); + }); + newFormats[format] = data.callbacks; + } + matchedFormats[format] = data.callbacks; + return false; + } + if (MatchFormat.matchesUnInheritedFormatSelector(editor, node, format)) { + return false; + } + }); + }); + var remainingFormats = filterRemainingFormats(currentFormats.get(), matchedFormats, elm, parents); + currentFormats.set(__assign({}, newFormats, remainingFormats)); + }; + var filterRemainingFormats = function (currentFormats, matchedFormats, elm, parents) { + return bifilter(currentFormats, function (callbacks, format) { + if (!has(matchedFormats, format)) { + each(callbacks, function (callback) { + callback(false, { + node: elm, + format: format, + parents: parents + }); + }); + return false; + } else { + return true; + } + }).t; + }; + var addListeners = function (registeredFormatListeners, formats, callback, similar) { + var formatChangeItems = registeredFormatListeners.get(); + each(formats.split(','), function (format) { + if (!formatChangeItems[format]) { + formatChangeItems[format] = { + similar: similar, + callbacks: [] + }; + } + formatChangeItems[format].callbacks.push(callback); + }); + registeredFormatListeners.set(formatChangeItems); + }; + var removeListeners = function (registeredFormatListeners, formats, callback) { + var formatChangeItems = registeredFormatListeners.get(); + each(formats.split(','), function (format) { + formatChangeItems[format].callbacks = filter(formatChangeItems[format].callbacks, function (c) { + return c !== callback; + }); + if (formatChangeItems[format].callbacks.length === 0) { + delete formatChangeItems[format]; + } + }); + registeredFormatListeners.set(formatChangeItems); + }; + var formatChanged = function (editor, registeredFormatListeners, formats, callback, similar) { + if (registeredFormatListeners.get() === null) { + setup$6(registeredFormatListeners, editor); + } + addListeners(registeredFormatListeners, formats, callback, similar); + return { + unbind: function () { + return removeListeners(registeredFormatListeners, formats, callback); + } + }; + }; + + var get$6 = function (dom) { + var formats = { + valigntop: [{ + selector: 'td,th', + styles: { verticalAlign: 'top' } + }], + valignmiddle: [{ + selector: 'td,th', + styles: { verticalAlign: 'middle' } + }], + valignbottom: [{ + selector: 'td,th', + styles: { verticalAlign: 'bottom' } + }], + alignleft: [ + { + selector: 'figure.image', + collapsed: false, + classes: 'align-left', + ceFalseOverride: true, + preview: 'font-family font-size' + }, + { + selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', + styles: { textAlign: 'left' }, + inherit: false, + preview: false, + defaultBlock: 'div' + }, + { + selector: 'img,table', + collapsed: false, + styles: { float: 'left' }, + preview: 'font-family font-size' + } + ], + aligncenter: [ + { + selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', + styles: { textAlign: 'center' }, + inherit: false, + preview: 'font-family font-size', + defaultBlock: 'div' + }, + { + selector: 'figure.image', + collapsed: false, + classes: 'align-center', + ceFalseOverride: true, + preview: 'font-family font-size' + }, + { + selector: 'img', + collapsed: false, + styles: { + display: 'block', + marginLeft: 'auto', + marginRight: 'auto' + }, + preview: false + }, + { + selector: 'table', + collapsed: false, + styles: { + marginLeft: 'auto', + marginRight: 'auto' + }, + preview: 'font-family font-size' + } + ], + alignright: [ + { + selector: 'figure.image', + collapsed: false, + classes: 'align-right', + ceFalseOverride: true, + preview: 'font-family font-size' + }, + { + selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', + styles: { textAlign: 'right' }, + inherit: false, + preview: 'font-family font-size', + defaultBlock: 'div' + }, + { + selector: 'img,table', + collapsed: false, + styles: { float: 'right' }, + preview: 'font-family font-size' + } + ], + alignjustify: [{ + selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', + styles: { textAlign: 'justify' }, + inherit: false, + defaultBlock: 'div', + preview: 'font-family font-size' + }], + bold: [ + { + inline: 'strong', + remove: 'all' + }, + { + inline: 'span', + styles: { fontWeight: 'bold' } + }, + { + inline: 'b', + remove: 'all' + } + ], + italic: [ + { + inline: 'em', + remove: 'all' + }, + { + inline: 'span', + styles: { fontStyle: 'italic' } + }, + { + inline: 'i', + remove: 'all' + } + ], + underline: [ + { + inline: 'span', + styles: { textDecoration: 'underline' }, + exact: true + }, + { + inline: 'u', + remove: 'all' + } + ], + strikethrough: [ + { + inline: 'span', + styles: { textDecoration: 'line-through' }, + exact: true + }, + { + inline: 'strike', + remove: 'all' + } + ], + forecolor: { + inline: 'span', + styles: { color: '%value' }, + links: true, + remove_similar: true, + clear_child_styles: true + }, + hilitecolor: { + inline: 'span', + styles: { backgroundColor: '%value' }, + links: true, + remove_similar: true, + clear_child_styles: true + }, + fontname: { + inline: 'span', + toggle: false, + styles: { fontFamily: '%value' }, + clear_child_styles: true + }, + fontsize: { + inline: 'span', + toggle: false, + styles: { fontSize: '%value' }, + clear_child_styles: true + }, + fontsize_class: { + inline: 'span', + attributes: { class: '%value' } + }, + blockquote: { + block: 'blockquote', + wrapper: true, + remove: 'all' + }, + subscript: { inline: 'sub' }, + superscript: { inline: 'sup' }, + code: { inline: 'code' }, + link: { + inline: 'a', + selector: 'a', + remove: 'all', + split: true, + deep: true, + onmatch: function () { + return true; + }, + onformat: function (elm, fmt, vars) { + Tools.each(vars, function (value, key) { + dom.setAttrib(elm, key, value); + }); + } + }, + removeformat: [ + { + selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins', + remove: 'all', + split: true, + expand: false, + block_expand: true, + deep: true + }, + { + selector: 'span', + attributes: [ + 'style', + 'class' + ], + remove: 'empty', + split: true, + expand: false, + deep: true + }, + { + selector: '*', + attributes: [ + 'style', + 'class' + ], + split: false, + expand: false, + deep: true + } + ] + }; + Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\s/), function (name) { + formats[name] = { + block: name, + remove: 'all' + }; + }); + return formats; + }; + var DefaultFormats = { get: get$6 }; + + function FormatRegistry(editor) { + var formats = {}; + var get = function (name) { + return name ? formats[name] : formats; + }; + var has$1 = function (name) { + return has(formats, name); + }; + var register = function (name, format) { + if (name) { + if (typeof name !== 'string') { + Tools.each(name, function (format, name) { + register(name, format); + }); + } else { + if (!isArray(format)) { + format = [format]; + } + Tools.each(format, function (format) { + if (typeof format.deep === 'undefined') { + format.deep = !format.selector; + } + if (typeof format.split === 'undefined') { + format.split = !format.selector || format.inline; + } + if (typeof format.remove === 'undefined' && format.selector && !format.inline) { + format.remove = 'none'; + } + if (format.selector && format.inline) { + format.mixed = true; + format.block_expand = true; + } + if (typeof format.classes === 'string') { + format.classes = format.classes.split(/\s+/); + } + }); + formats[name] = format; + } + } + }; + var unregister = function (name) { + if (name && formats[name]) { + delete formats[name]; + } + return formats; + }; + register(DefaultFormats.get(editor.dom)); + register(editor.settings.formats); + return { + get: get, + has: has$1, + register: register, + unregister: unregister + }; + } + + var each$e = Tools.each; + var dom = DOMUtils$1.DOM; + var parsedSelectorToHtml = function (ancestry, editor) { + var elm, item, fragment; + var schema = editor && editor.schema || Schema({}); + var decorate = function (elm, item) { + if (item.classes.length) { + dom.addClass(elm, item.classes.join(' ')); + } + dom.setAttribs(elm, item.attrs); + }; + var createElement = function (sItem) { + var elm; + item = typeof sItem === 'string' ? { + name: sItem, + classes: [], + attrs: {} + } : sItem; + elm = dom.create(item.name); + decorate(elm, item); + return elm; + }; + var getRequiredParent = function (elm, candidate) { + var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm; + var elmRule = schema.getElementRule(name); + var parentsRequired = elmRule && elmRule.parentsRequired; + if (parentsRequired && parentsRequired.length) { + return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0]; + } else { + return false; + } + }; + var wrapInHtml = function (elm, ancestry, siblings) { + var parent, parentCandidate, parentRequired; + var ancestor = ancestry.length > 0 && ancestry[0]; + var ancestorName = ancestor && ancestor.name; + parentRequired = getRequiredParent(elm, ancestorName); + if (parentRequired) { + if (ancestorName === parentRequired) { + parentCandidate = ancestry[0]; + ancestry = ancestry.slice(1); + } else { + parentCandidate = parentRequired; + } + } else if (ancestor) { + parentCandidate = ancestry[0]; + ancestry = ancestry.slice(1); + } else if (!siblings) { + return elm; + } + if (parentCandidate) { + parent = createElement(parentCandidate); + parent.appendChild(elm); + } + if (siblings) { + if (!parent) { + parent = dom.create('div'); + parent.appendChild(elm); + } + Tools.each(siblings, function (sibling) { + var siblingElm = createElement(sibling); + parent.insertBefore(siblingElm, elm); + }); + } + return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings); + }; + if (ancestry && ancestry.length) { + item = ancestry[0]; + elm = createElement(item); + fragment = dom.create('div'); + fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings)); + return fragment; + } else { + return ''; + } + }; + var selectorToHtml = function (selector, editor) { + return parsedSelectorToHtml(parseSelector(selector), editor); + }; + var parseSelectorItem = function (item) { + var tagName; + var obj = { + classes: [], + attrs: {} + }; + item = obj.selector = Tools.trim(item); + if (item !== '*') { + tagName = item.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g, function ($0, $1, $2, $3, $4) { + switch ($1) { + case '#': + obj.attrs.id = $2; + break; + case '.': + obj.classes.push($2); + break; + case ':': + if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) { + obj.attrs[$2] = $2; + } + break; + } + if ($3 === '[') { + var m = $4.match(/([\w\-]+)(?:\=\"([^\"]+))?/); + if (m) { + obj.attrs[m[1]] = m[2]; + } + } + return ''; + }); + } + obj.name = tagName || 'div'; + return obj; + }; + var parseSelector = function (selector) { + if (!selector || typeof selector !== 'string') { + return []; + } + selector = selector.split(/\s*,\s*/)[0]; + selector = selector.replace(/\s*(~\+|~|\+|>)\s*/g, '$1'); + return Tools.map(selector.split(/(?:>|\s+(?![^\[\]]+\]))/), function (item) { + var siblings = Tools.map(item.split(/(?:~\+|~|\+)/), parseSelectorItem); + var obj = siblings.pop(); + if (siblings.length) { + obj.siblings = siblings; + } + return obj; + }).reverse(); + }; + var getCssText = function (editor, format) { + var name, previewFrag, previewElm, items; + var previewCss = '', parentFontSize, previewStyles; + previewStyles = editor.settings.preview_styles; + if (previewStyles === false) { + return ''; + } + if (typeof previewStyles !== 'string') { + previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow'; + } + var removeVars = function (val) { + return val.replace(/%(\w+)/g, ''); + }; + if (typeof format === 'string') { + format = editor.formatter.get(format); + if (!format) { + return; + } + format = format[0]; + } + if ('preview' in format) { + previewStyles = format.preview; + if (previewStyles === false) { + return ''; + } + } + name = format.block || format.inline || 'span'; + items = parseSelector(format.selector); + if (items.length) { + if (!items[0].name) { + items[0].name = name; + } + name = format.selector; + previewFrag = parsedSelectorToHtml(items, editor); + } else { + previewFrag = parsedSelectorToHtml([name], editor); + } + previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild; + each$e(format.styles, function (value, name) { + value = removeVars(value); + if (value) { + dom.setStyle(previewElm, name, value); + } + }); + each$e(format.attributes, function (value, name) { + value = removeVars(value); + if (value) { + dom.setAttrib(previewElm, name, value); + } + }); + each$e(format.classes, function (value) { + value = removeVars(value); + if (!dom.hasClass(previewElm, value)) { + dom.addClass(previewElm, value); + } + }); + editor.fire('PreviewFormats'); + dom.setStyles(previewFrag, { + position: 'absolute', + left: -65535 + }); + editor.getBody().appendChild(previewFrag); + parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true); + parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0; + each$e(previewStyles.split(' '), function (name) { + var value = dom.getStyle(previewElm, name, true); + if (name === 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) { + value = dom.getStyle(editor.getBody(), name, true); + if (dom.toHex(value).toLowerCase() === '#ffffff') { + return; + } + } + if (name === 'color') { + if (dom.toHex(value).toLowerCase() === '#000000') { + return; + } + } + if (name === 'font-size') { + if (/em|%$/.test(value)) { + if (parentFontSize === 0) { + return; + } + var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1); + value = numValue * parentFontSize + 'px'; + } + } + if (name === 'border' && value) { + previewCss += 'padding:0 2px;'; + } + previewCss += name + ':' + value + ';'; + }); + editor.fire('AfterPreviewFormats'); + dom.remove(previewFrag); + return previewCss; + }; + var Preview = { + getCssText: getCssText, + parseSelector: parseSelector, + selectorToHtml: selectorToHtml + }; + + var toggle = function (editor, formats, name, vars, node) { + var fmt = formats.get(name); + if (MatchFormat.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) { + RemoveFormat.remove(editor, name, vars, node); + } else { + ApplyFormat.applyFormat(editor, name, vars, node); + } + }; + var ToggleFormat = { toggle: toggle }; + + var setup$7 = function (editor) { + editor.addShortcut('meta+b', '', 'Bold'); + editor.addShortcut('meta+i', '', 'Italic'); + editor.addShortcut('meta+u', '', 'Underline'); + for (var i = 1; i <= 6; i++) { + editor.addShortcut('access+' + i, '', [ + 'FormatBlock', + false, + 'h' + i + ]); + } + editor.addShortcut('access+7', '', [ + 'FormatBlock', + false, + 'p' + ]); + editor.addShortcut('access+8', '', [ + 'FormatBlock', + false, + 'div' + ]); + editor.addShortcut('access+9', '', [ + 'FormatBlock', + false, + 'address' + ]); + }; + var FormatShortcuts = { setup: setup$7 }; + + var Formatter = function (editor) { + var formats = FormatRegistry(editor); + var formatChangeState = Cell(null); + FormatShortcuts.setup(editor); + setup$5(editor); + return { + get: formats.get, + has: formats.has, + register: formats.register, + unregister: formats.unregister, + apply: curry(ApplyFormat.applyFormat, editor), + remove: curry(RemoveFormat.remove, editor), + toggle: curry(ToggleFormat.toggle, editor, formats), + match: curry(MatchFormat.match, editor), + matchAll: curry(MatchFormat.matchAll, editor), + matchNode: curry(MatchFormat.matchNode, editor), + canApply: curry(MatchFormat.canApply, editor), + formatChanged: curry(formatChanged, editor, formatChangeState), + getCssText: curry(Preview.getCssText, editor) + }; + }; + + var hasOwnProperty$2 = Object.prototype.hasOwnProperty; + var shallow$1 = function (old, nu) { + return nu; + }; + var baseMerge = function (merger) { + return function () { + var objects = new Array(arguments.length); + for (var i = 0; i < objects.length; i++) { + objects[i] = arguments[i]; + } + if (objects.length === 0) { + throw new Error('Can\'t merge zero objects'); + } + var ret = {}; + for (var j = 0; j < objects.length; j++) { + var curObject = objects[j]; + for (var key in curObject) { + if (hasOwnProperty$2.call(curObject, key)) { + ret[key] = merger(ret[key], curObject[key]); + } + } + } + return ret; + }; + }; + var merge = baseMerge(shallow$1); + + var register$1 = function (htmlParser, settings, dom) { + htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + node.attr('tabindex', node.attr('data-mce-tabindex')); + node.attr(name, null); + } + }); + htmlParser.addAttributeFilter('src,href,style', function (nodes, name) { + var i = nodes.length, node, value; + var internalName = 'data-mce-' + name; + var urlConverter = settings.url_converter; + var urlConverterScope = settings.url_converter_scope; + while (i--) { + node = nodes[i]; + value = node.attr(internalName); + if (value !== undefined) { + node.attr(name, value.length > 0 ? value : null); + node.attr(internalName, null); + } else { + value = node.attr(name); + if (name === 'style') { + value = dom.serializeStyle(dom.parseStyle(value), node.name); + } else if (urlConverter) { + value = urlConverter.call(urlConverterScope, value, name, node.name); + } + node.attr(name, value.length > 0 ? value : null); + } + } + }); + htmlParser.addAttributeFilter('class', function (nodes) { + var i = nodes.length, node, value; + while (i--) { + node = nodes[i]; + value = node.attr('class'); + if (value) { + value = node.attr('class').replace(/(?:^|\s)mce-item-\w+(?!\S)/g, ''); + node.attr('class', value.length > 0 ? value : null); + } + } + }); + htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) { + var hasChildren = Option.from(node.firstChild).exists(function (firstChild) { + return !Zwsp.isZwsp(firstChild.value); + }); + if (hasChildren) { + node.unwrap(); + } else { + node.remove(); + } + } + } + }); + htmlParser.addNodeFilter('noscript', function (nodes) { + var i = nodes.length, node; + while (i--) { + node = nodes[i].firstChild; + if (node) { + node.value = Entities.decode(node.value); + } + } + }); + htmlParser.addNodeFilter('script,style', function (nodes, name) { + var i = nodes.length, node, value, type; + var trim = function (value) { + return value.replace(/()/g, '\n').replace(/^[\r\n]*|[\r\n]*$/g, '').replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, ''); + }; + while (i--) { + node = nodes[i]; + value = node.firstChild ? node.firstChild.value : ''; + if (name === 'script') { + type = node.attr('type'); + if (type) { + node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\-/, '')); + } + if (settings.element_format === 'xhtml' && value.length > 0) { + node.firstChild.value = '// '; + } + } else { + if (settings.element_format === 'xhtml' && value.length > 0) { + node.firstChild.value = ''; + } + } + } + }); + htmlParser.addNodeFilter('#comment', function (nodes) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + if (node.value.indexOf('[CDATA[') === 0) { + node.name = '#cdata'; + node.type = 4; + node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, ''); + } else if (node.value.indexOf('mce:protected ') === 0) { + node.name = '#text'; + node.type = 3; + node.raw = true; + node.value = unescape(node.value).substr(14); + } + } + }); + htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + if (node.type === 7) { + node.remove(); + } else if (node.type === 1) { + if (name === 'input' && !node.attr('type')) { + node.attr('type', 'text'); + } + } + } + }); + htmlParser.addAttributeFilter('data-mce-type', function (nodes) { + each(nodes, function (node) { + if (node.attr('data-mce-type') === 'format-caret') { + if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) { + node.remove(); + } else { + node.unwrap(); + } + } + }); + }); + htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize', function (nodes, name) { + var i = nodes.length; + while (i--) { + nodes[i].attr(name, null); + } + }); + }; + var trimTrailingBr = function (rootNode) { + var brNode1, brNode2; + var isBr = function (node) { + return node && node.name === 'br'; + }; + brNode1 = rootNode.lastChild; + if (isBr(brNode1)) { + brNode2 = brNode1.prev; + if (isBr(brNode2)) { + brNode1.remove(); + brNode2.remove(); + } + } + }; + var DomSerializerFilters = { + register: register$1, + trimTrailingBr: trimTrailingBr + }; + + var preProcess = function (editor, node, args) { + var impl, doc, oldDoc; + var dom = editor.dom; + node = node.cloneNode(true); + impl = domGlobals.document.implementation; + if (impl.createHTMLDocument) { + doc = impl.createHTMLDocument(''); + Tools.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) { + doc.body.appendChild(doc.importNode(node, true)); + }); + if (node.nodeName !== 'BODY') { + node = doc.body.firstChild; + } else { + node = doc.body; + } + oldDoc = dom.doc; + dom.doc = doc; + } + Events.firePreProcess(editor, merge(args, { node: node })); + if (oldDoc) { + dom.doc = oldDoc; + } + return node; + }; + var shouldFireEvent = function (editor, args) { + return editor && editor.hasEventListeners('PreProcess') && !args.no_events; + }; + var process = function (editor, node, args) { + return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node; + }; + var DomSerializerPreProcess = { process: process }; + + var removeAttrs = function (node, names) { + each(names, function (name) { + node.attr(name, null); + }); + }; + var addFontToSpansFilter = function (domParser, styles, fontSizes) { + domParser.addNodeFilter('font', function (nodes) { + each(nodes, function (node) { + var props = styles.parse(node.attr('style')); + var color = node.attr('color'); + var face = node.attr('face'); + var size = node.attr('size'); + if (color) { + props.color = color; + } + if (face) { + props['font-family'] = face; + } + if (size) { + props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1]; + } + node.name = 'span'; + node.attr('style', styles.serialize(props)); + removeAttrs(node, [ + 'color', + 'face', + 'size' + ]); + }); + }); + }; + var addStrikeToSpanFilter = function (domParser, styles) { + domParser.addNodeFilter('strike', function (nodes) { + each(nodes, function (node) { + var props = styles.parse(node.attr('style')); + props['text-decoration'] = 'line-through'; + node.name = 'span'; + node.attr('style', styles.serialize(props)); + }); + }); + }; + var addFilters = function (domParser, settings) { + var styles = Styles(); + if (settings.convert_fonts_to_spans) { + addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values)); + } + addStrikeToSpanFilter(domParser, styles); + }; + var register$2 = function (domParser, settings) { + if (settings.inline_styles) { + addFilters(domParser, settings); + } + }; + var LegacyFilter = { register: register$2 }; + + var paddEmptyNode = function (settings, args, blockElements, node) { + var brPreferred = settings.padd_empty_with_br || args.insert; + if (brPreferred && blockElements[node.name]) { + node.empty().append(new Node$1('br', 1)).shortEnded = true; + } else { + node.empty().append(new Node$1('#text', 3)).value = '\xA0'; + } + }; + var isPaddedWithNbsp = function (node) { + return hasOnlyChild(node, '#text') && node.firstChild.value === '\xA0'; + }; + var hasOnlyChild = function (node, name) { + return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name; + }; + var isPadded = function (schema, node) { + var rule = schema.getElementRule(node.name); + return rule && rule.paddEmpty; + }; + var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) { + return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) { + return isPadded(schema, node); + }); + }; + var isLineBreakNode = function (node, blockElements) { + return node && (blockElements[node.name] || node.name === 'br'); + }; + + var register$3 = function (parser, settings) { + var schema = parser.schema; + if (settings.remove_trailing_brs) { + parser.addNodeFilter('br', function (nodes, _, args) { + var i; + var l = nodes.length; + var node; + var blockElements = Tools.extend({}, schema.getBlockElements()); + var nonEmptyElements = schema.getNonEmptyElements(); + var parent, lastParent, prev, prevName; + var whiteSpaceElements = schema.getNonEmptyElements(); + var elementRule, textNode; + blockElements.body = 1; + for (i = 0; i < l; i++) { + node = nodes[i]; + parent = node.parent; + if (blockElements[node.parent.name] && node === parent.lastChild) { + prev = node.prev; + while (prev) { + prevName = prev.name; + if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') { + if (prevName !== 'br') { + break; + } + if (prevName === 'br') { + node = null; + break; + } + } + prev = prev.prev; + } + if (node) { + node.remove(); + if (isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, parent)) { + elementRule = schema.getElementRule(parent.name); + if (elementRule) { + if (elementRule.removeEmpty) { + parent.remove(); + } else if (elementRule.paddEmpty) { + paddEmptyNode(settings, args, blockElements, parent); + } + } + } + } + } else { + lastParent = node; + while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) { + lastParent = parent; + if (blockElements[parent.name]) { + break; + } + parent = parent.parent; + } + if (lastParent === parent && settings.padd_empty_with_br !== true) { + textNode = new Node$1('#text', 3); + textNode.value = '\xA0'; + node.replace(textNode); + } + } + } + }); + } + parser.addAttributeFilter('href', function (nodes) { + var i = nodes.length, node; + var appendRel = function (rel) { + var parts = rel.split(' ').filter(function (p) { + return p.length > 0; + }); + return parts.concat(['noopener']).sort().join(' '); + }; + var addNoOpener = function (rel) { + var newRel = rel ? Tools.trim(rel) : ''; + if (!/\b(noopener)\b/g.test(newRel)) { + return appendRel(newRel); + } else { + return newRel; + } + }; + if (!settings.allow_unsafe_link_target) { + while (i--) { + node = nodes[i]; + if (node.name === 'a' && node.attr('target') === '_blank') { + node.attr('rel', addNoOpener(node.attr('rel'))); + } + } + } + }); + if (!settings.allow_html_in_named_anchor) { + parser.addAttributeFilter('id,name', function (nodes) { + var i = nodes.length, sibling, prevSibling, parent, node; + while (i--) { + node = nodes[i]; + if (node.name === 'a' && node.firstChild && !node.attr('href')) { + parent = node.parent; + sibling = node.lastChild; + do { + prevSibling = sibling.prev; + parent.insert(sibling, node); + sibling = prevSibling; + } while (sibling); + } + } + }); + } + if (settings.fix_list_elements) { + parser.addNodeFilter('ul,ol', function (nodes) { + var i = nodes.length, node, parentNode; + while (i--) { + node = nodes[i]; + parentNode = node.parent; + if (parentNode.name === 'ul' || parentNode.name === 'ol') { + if (node.prev && node.prev.name === 'li') { + node.prev.append(node); + } else { + var li = new Node$1('li', 1); + li.attr('style', 'list-style-type: none'); + node.wrap(li); + } + } + } + }); + } + if (settings.validate && schema.getValidClasses()) { + parser.addAttributeFilter('class', function (nodes) { + var i = nodes.length, node, classList, ci, className, classValue; + var validClasses = schema.getValidClasses(); + var validClassesMap, valid; + while (i--) { + node = nodes[i]; + classList = node.attr('class').split(' '); + classValue = ''; + for (ci = 0; ci < classList.length; ci++) { + className = classList[ci]; + valid = false; + validClassesMap = validClasses['*']; + if (validClassesMap && validClassesMap[className]) { + valid = true; + } + validClassesMap = validClasses[node.name]; + if (!valid && validClassesMap && validClassesMap[className]) { + valid = true; + } + if (valid) { + if (classValue) { + classValue += ' '; + } + classValue += className; + } + } + if (!classValue.length) { + classValue = null; + } + node.attr('class', classValue); + } + }); + } + }; + + var makeMap$4 = Tools.makeMap, each$f = Tools.each, explode$2 = Tools.explode, extend$2 = Tools.extend; + var DomParser = function (settings, schema) { + if (schema === void 0) { + schema = Schema(); + } + var nodeFilters = {}; + var attributeFilters = []; + var matchedNodes = {}; + var matchedAttributes = {}; + settings = settings || {}; + settings.validate = 'validate' in settings ? settings.validate : true; + settings.root_name = settings.root_name || 'body'; + var fixInvalidChildren = function (nodes) { + var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i; + var nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode; + nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table'); + nonEmptyElements = schema.getNonEmptyElements(); + whitespaceElements = schema.getWhiteSpaceElements(); + textBlockElements = schema.getTextBlockElements(); + specialElements = schema.getSpecialElements(); + for (ni = 0; ni < nodes.length; ni++) { + node = nodes[ni]; + if (!node.parent || node.fixed) { + continue; + } + if (textBlockElements[node.name] && node.parent.name === 'li') { + sibling = node.next; + while (sibling) { + if (textBlockElements[sibling.name]) { + sibling.name = 'li'; + sibling.fixed = true; + node.parent.insert(sibling, node.parent); + } else { + break; + } + sibling = sibling.next; + } + node.unwrap(node); + continue; + } + parents = [node]; + for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) { + parents.push(parent); + } + if (parent && parents.length > 1) { + parents.reverse(); + newParent = currentNode = filterNode(parents[0].clone()); + for (i = 0; i < parents.length - 1; i++) { + if (schema.isValidChild(currentNode.name, parents[i].name)) { + tempNode = filterNode(parents[i].clone()); + currentNode.append(tempNode); + } else { + tempNode = currentNode; + } + for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) { + nextNode = childNode.next; + tempNode.append(childNode); + childNode = nextNode; + } + currentNode = tempNode; + } + if (!isEmpty$2(schema, nonEmptyElements, whitespaceElements, newParent)) { + parent.insert(newParent, parents[0], true); + parent.insert(node, newParent); + } else { + parent.insert(node, parents[0], true); + } + parent = parents[0]; + if (isEmpty$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) { + parent.empty().remove(); + } + } else if (node.parent) { + if (node.name === 'li') { + sibling = node.prev; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { + sibling.append(node); + continue; + } + sibling = node.next; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { + sibling.insert(node, sibling.firstChild, true); + continue; + } + node.wrap(filterNode(new Node$1('ul', 1))); + continue; + } + if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) { + node.wrap(filterNode(new Node$1('div', 1))); + } else { + if (specialElements[node.name]) { + node.empty().remove(); + } else { + node.unwrap(); + } + } + } + } + }; + var filterNode = function (node) { + var i, name, list; + name = node.name; + if (name in nodeFilters) { + list = matchedNodes[name]; + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + i = attributeFilters.length; + while (i--) { + name = attributeFilters[i].name; + if (name in node.attributes.map) { + list = matchedAttributes[name]; + if (list) { + list.push(node); + } else { + matchedAttributes[name] = [node]; + } + } + } + return node; + }; + var addNodeFilter = function (name, callback) { + each$f(explode$2(name), function (name) { + var list = nodeFilters[name]; + if (!list) { + nodeFilters[name] = list = []; + } + list.push(callback); + }); + }; + var getNodeFilters = function () { + var out = []; + for (var name in nodeFilters) { + if (nodeFilters.hasOwnProperty(name)) { + out.push({ + name: name, + callbacks: nodeFilters[name] + }); + } + } + return out; + }; + var addAttributeFilter = function (name, callback) { + each$f(explode$2(name), function (name) { + var i; + for (i = 0; i < attributeFilters.length; i++) { + if (attributeFilters[i].name === name) { + attributeFilters[i].callbacks.push(callback); + return; + } + } + attributeFilters.push({ + name: name, + callbacks: [callback] + }); + }); + }; + var getAttributeFilters = function () { + return [].concat(attributeFilters); + }; + var parse = function (html, args) { + var parser, nodes, i, l, fi, fl, list, name; + var blockElements; + var invalidChildren = []; + var isInWhiteSpacePreservedElement; + var node; + var getRootBlockName = function (name) { + if (name === false) { + return ''; + } else if (name === true) { + return 'p'; + } else { + return name; + } + }; + args = args || {}; + matchedNodes = {}; + matchedAttributes = {}; + blockElements = extend$2(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements()); + var nonEmptyElements = schema.getNonEmptyElements(); + var children = schema.children; + var validate = settings.validate; + var forcedRootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block; + var rootBlockName = getRootBlockName(forcedRootBlockName); + var whiteSpaceElements = schema.getWhiteSpaceElements(); + var startWhiteSpaceRegExp = /^[ \t\r\n]+/; + var endWhiteSpaceRegExp = /[ \t\r\n]+$/; + var allWhiteSpaceRegExp = /[ \t\r\n]+/g; + var isAllWhiteSpaceRegExp = /^[ \t\r\n]+$/; + isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name); + var addRootBlocks = function () { + var node = rootNode.firstChild, next, rootBlockNode; + var trim = function (rootBlockNode) { + if (rootBlockNode) { + node = rootBlockNode.firstChild; + if (node && node.type === 3) { + node.value = node.value.replace(startWhiteSpaceRegExp, ''); + } + node = rootBlockNode.lastChild; + if (node && node.type === 3) { + node.value = node.value.replace(endWhiteSpaceRegExp, ''); + } + } + }; + if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) { + return; + } + while (node) { + next = node.next; + if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) { + if (!rootBlockNode) { + rootBlockNode = createNode(rootBlockName, 1); + rootBlockNode.attr(settings.forced_root_block_attrs); + rootNode.insert(rootBlockNode, node); + rootBlockNode.append(node); + } else { + rootBlockNode.append(node); + } + } else { + trim(rootBlockNode); + rootBlockNode = null; + } + node = next; + } + trim(rootBlockNode); + }; + var createNode = function (name, type) { + var node = new Node$1(name, type); + var list; + if (name in nodeFilters) { + list = matchedNodes[name]; + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + return node; + }; + var removeWhitespaceBefore = function (node) { + var textNode, textNodeNext, textVal, sibling; + var blockElements = schema.getBlockElements(); + for (textNode = node.prev; textNode && textNode.type === 3;) { + textVal = textNode.value.replace(endWhiteSpaceRegExp, ''); + if (textVal.length > 0) { + textNode.value = textVal; + return; + } + textNodeNext = textNode.next; + if (textNodeNext) { + if (textNodeNext.type === 3 && textNodeNext.value.length) { + textNode = textNode.prev; + continue; + } + if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') { + textNode = textNode.prev; + continue; + } + } + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + } + }; + var cloneAndExcludeBlocks = function (input) { + var name; + var output = {}; + for (name in input) { + if (name !== 'li' && name !== 'p') { + output[name] = input[name]; + } + } + return output; + }; + parser = SaxParser$1({ + validate: validate, + allow_script_urls: settings.allow_script_urls, + allow_conditional_comments: settings.allow_conditional_comments, + self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()), + cdata: function (text) { + node.append(createNode('#cdata', 4)).value = text; + }, + text: function (text, raw) { + var textNode; + if (!isInWhiteSpacePreservedElement) { + text = text.replace(allWhiteSpaceRegExp, ' '); + if (isLineBreakNode(node.lastChild, blockElements)) { + text = text.replace(startWhiteSpaceRegExp, ''); + } + } + if (text.length !== 0) { + textNode = createNode('#text', 3); + textNode.raw = !!raw; + node.append(textNode).value = text; + } + }, + comment: function (text) { + node.append(createNode('#comment', 8)).value = text; + }, + pi: function (name, text) { + node.append(createNode(name, 7)).value = text; + removeWhitespaceBefore(node); + }, + doctype: function (text) { + var newNode; + newNode = node.append(createNode('#doctype', 10)); + newNode.value = text; + removeWhitespaceBefore(node); + }, + start: function (name, attrs, empty) { + var newNode, attrFiltersLen, elementRule, attrName, parent; + elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + newNode = createNode(elementRule.outputName || name, 1); + newNode.attributes = attrs; + newNode.shortEnded = empty; + node.append(newNode); + parent = children[node.name]; + if (parent && children[newNode.name] && !parent[newNode.name]) { + invalidChildren.push(newNode); + } + attrFiltersLen = attributeFilters.length; + while (attrFiltersLen--) { + attrName = attributeFilters[attrFiltersLen].name; + if (attrName in attrs.map) { + list = matchedAttributes[attrName]; + if (list) { + list.push(newNode); + } else { + matchedAttributes[attrName] = [newNode]; + } + } + } + if (blockElements[name]) { + removeWhitespaceBefore(newNode); + } + if (!empty) { + node = newNode; + } + if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = true; + } + } + }, + end: function (name) { + var textNode, elementRule, text, sibling, tempNode; + elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + if (blockElements[name]) { + if (!isInWhiteSpacePreservedElement) { + textNode = node.firstChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(startWhiteSpaceRegExp, ''); + if (text.length > 0) { + textNode.value = text; + textNode = textNode.next; + } else { + sibling = textNode.next; + textNode.remove(); + textNode = sibling; + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.next; + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + textNode = sibling; + } + } + } + textNode = node.lastChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(endWhiteSpaceRegExp, ''); + if (text.length > 0) { + textNode.value = text; + textNode = textNode.prev; + } else { + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.prev; + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + textNode = sibling; + } + } + } + } + } + if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = false; + } + if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) { + if (!node.attr('name') && !node.attr('id')) { + tempNode = node.parent; + if (blockElements[node.name]) { + node.empty().remove(); + } else { + node.unwrap(); + } + node = tempNode; + return; + } + } + if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) { + paddEmptyNode(settings, args, blockElements, node); + } + node = node.parent; + } + } + }, schema); + var rootNode = node = new Node$1(args.context || settings.root_name, 11); + parser.parse(html); + if (validate && invalidChildren.length) { + if (!args.context) { + fixInvalidChildren(invalidChildren); + } else { + args.invalid = true; + } + } + if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) { + addRootBlocks(); + } + if (!args.invalid) { + for (name in matchedNodes) { + if (!matchedNodes.hasOwnProperty(name)) { + continue; + } + list = nodeFilters[name]; + nodes = matchedNodes[name]; + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + for (i = 0, l = list.length; i < l; i++) { + list[i](nodes, name, args); + } + } + for (i = 0, l = attributeFilters.length; i < l; i++) { + list = attributeFilters[i]; + if (list.name in matchedAttributes) { + nodes = matchedAttributes[list.name]; + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) { + list.callbacks[fi](nodes, list.name, args); + } + } + } + } + return rootNode; + }; + var exports = { + schema: schema, + addAttributeFilter: addAttributeFilter, + getAttributeFilters: getAttributeFilters, + addNodeFilter: addNodeFilter, + getNodeFilters: getNodeFilters, + filterNode: filterNode, + parse: parse + }; + register$3(exports, settings); + LegacyFilter.register(exports, settings); + return exports; + }; + + var addTempAttr = function (htmlParser, tempAttrs, name) { + if (Tools.inArray(tempAttrs, name) === -1) { + htmlParser.addAttributeFilter(name, function (nodes, name) { + var i = nodes.length; + while (i--) { + nodes[i].attr(name, null); + } + }); + tempAttrs.push(name); + } + }; + var postProcess$1 = function (editor, args, content) { + if (!args.no_events && editor) { + var outArgs = Events.firePostProcess(editor, merge(args, { content: content })); + return outArgs.content; + } else { + return content; + } + }; + var getHtmlFromNode = function (dom, node, args) { + var html = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node)); + return args.selection || isWsPreserveElement(Element.fromDom(node)) ? html : Tools.trim(html); + }; + var parseHtml = function (htmlParser, html, args) { + var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args; + var rootNode = htmlParser.parse(html, parserArgs); + DomSerializerFilters.trimTrailingBr(rootNode); + return rootNode; + }; + var serializeNode = function (settings, schema, node) { + var htmlSerializer = Serializer(settings, schema); + return htmlSerializer.serialize(node); + }; + var toHtml = function (editor, settings, schema, rootNode, args) { + var content = serializeNode(settings, schema, rootNode); + return postProcess$1(editor, args, content); + }; + var DomSerializer = function (settings, editor) { + var dom, schema, htmlParser; + var tempAttrs = ['data-mce-selected']; + dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM; + schema = editor && editor.schema ? editor.schema : Schema(settings); + settings.entity_encoding = settings.entity_encoding || 'named'; + settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true; + htmlParser = DomParser(settings, schema); + DomSerializerFilters.register(htmlParser, settings, dom); + var serialize = function (node, parserArgs) { + var args = merge({ format: 'html' }, parserArgs ? parserArgs : {}); + var targetNode = DomSerializerPreProcess.process(editor, node, args); + var html = getHtmlFromNode(dom, targetNode, args); + var rootNode = parseHtml(htmlParser, html, args); + return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args); + }; + return { + schema: schema, + addNodeFilter: htmlParser.addNodeFilter, + addAttributeFilter: htmlParser.addAttributeFilter, + serialize: serialize, + addRules: function (rules) { + schema.addValidElements(rules); + }, + setRules: function (rules) { + schema.setValidElements(rules); + }, + addTempAttr: curry(addTempAttr, htmlParser, tempAttrs), + getTempAttrs: function () { + return tempAttrs; + } + }; + }; + + var Serializer$1 = function (settings, editor) { + var domSerializer = DomSerializer(settings, editor); + return { + schema: domSerializer.schema, + addNodeFilter: domSerializer.addNodeFilter, + addAttributeFilter: domSerializer.addAttributeFilter, + serialize: domSerializer.serialize, + addRules: domSerializer.addRules, + setRules: domSerializer.setRules, + addTempAttr: domSerializer.addTempAttr, + getTempAttrs: domSerializer.getTempAttrs + }; + }; + + function BookmarkManager(selection) { + return { + getBookmark: curry(Bookmarks.getBookmark, selection), + moveToBookmark: curry(Bookmarks.moveToBookmark, selection) + }; + } + (function (BookmarkManager) { + BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode; + }(BookmarkManager || (BookmarkManager = {}))); + var BookmarkManager$1 = BookmarkManager; + + var isContentEditableFalse$a = NodeType.isContentEditableFalse; + var isContentEditableTrue$5 = NodeType.isContentEditableTrue; + var getContentEditableRoot$1 = function (root, node) { + while (node && node !== root) { + if (isContentEditableTrue$5(node) || isContentEditableFalse$a(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var ControlSelection = function (selection, editor) { + var dom = editor.dom, each = Tools.each; + var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle; + var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted; + var width, height; + var editableDoc = editor.getDoc(), rootDocument = domGlobals.document; + var abs = Math.abs, round = Math.round, rootElement = editor.getBody(); + var startScrollWidth, startScrollHeight; + resizeHandles = { + nw: [ + 0, + 0, + -1, + -1 + ], + ne: [ + 1, + 0, + 1, + -1 + ], + se: [ + 1, + 1, + 1, + 1 + ], + sw: [ + 0, + 1, + -1, + 1 + ] + }; + var isImage = function (elm) { + return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image')); + }; + var isEventOnImageOutsideRange = function (evt, range) { + return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range); + }; + var contextMenuSelectImage = function (evt) { + var target = evt.target; + if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) { + editor.selection.select(target); + } + }; + var getResizeTarget = function (elm) { + return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm; + }; + var isResizable = function (elm) { + var selector = editor.settings.object_resizing; + if (selector === false || Env.iOS) { + return false; + } + if (typeof selector !== 'string') { + selector = 'table,img,figure.image,div'; + } + if (elm.getAttribute('data-mce-resize') === 'false') { + return false; + } + if (elm === editor.getBody()) { + return false; + } + return is$1(Element.fromDom(elm), selector); + }; + var resizeGhostElement = function (e) { + var deltaX, deltaY, proportional; + var resizeHelperX, resizeHelperY; + deltaX = e.screenX - startX; + deltaY = e.screenY - startY; + width = deltaX * selectedHandle[2] + startW; + height = deltaY * selectedHandle[3] + startH; + width = width < 5 ? 5 : width; + height = height < 5 ? 5 : height; + if (isImage(selectedElm) && editor.settings.resize_img_proportional !== false) { + proportional = !VK.modifierPressed(e); + } else { + proportional = VK.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0; + } + if (proportional) { + if (abs(deltaX) > abs(deltaY)) { + height = round(width * ratio); + width = round(height / ratio); + } else { + width = round(height / ratio); + height = round(width * ratio); + } + } + dom.setStyles(getResizeTarget(selectedElmGhost), { + width: width, + height: height + }); + resizeHelperX = selectedHandle.startPos.x + deltaX; + resizeHelperY = selectedHandle.startPos.y + deltaY; + resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0; + resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0; + dom.setStyles(resizeHelper, { + left: resizeHelperX, + top: resizeHelperY, + display: 'block' + }); + resizeHelper.innerHTML = width + ' × ' + height; + if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) { + dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width)); + } + if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) { + dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height)); + } + deltaX = rootElement.scrollWidth - startScrollWidth; + deltaY = rootElement.scrollHeight - startScrollHeight; + if (deltaX + deltaY !== 0) { + dom.setStyles(resizeHelper, { + left: resizeHelperX - deltaX, + top: resizeHelperY - deltaY + }); + } + if (!resizeStarted) { + Events.fireObjectResizeStart(editor, selectedElm, startW, startH); + resizeStarted = true; + } + }; + var endGhostResize = function () { + resizeStarted = false; + var setSizeProp = function (name, value) { + if (value) { + if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) { + dom.setStyle(getResizeTarget(selectedElm), name, value); + } else { + dom.setAttrib(getResizeTarget(selectedElm), name, value); + } + } + }; + setSizeProp('width', width); + setSizeProp('height', height); + dom.unbind(editableDoc, 'mousemove', resizeGhostElement); + dom.unbind(editableDoc, 'mouseup', endGhostResize); + if (rootDocument !== editableDoc) { + dom.unbind(rootDocument, 'mousemove', resizeGhostElement); + dom.unbind(rootDocument, 'mouseup', endGhostResize); + } + dom.remove(selectedElmGhost); + dom.remove(resizeHelper); + showResizeRect(selectedElm); + Events.fireObjectResized(editor, selectedElm, width, height); + dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style')); + editor.nodeChanged(); + }; + var showResizeRect = function (targetElm) { + var position, targetWidth, targetHeight, e, rect; + hideResizeRect(); + unbindResizeHandleEvents(); + position = dom.getPos(targetElm, rootElement); + selectedElmX = position.x; + selectedElmY = position.y; + rect = targetElm.getBoundingClientRect(); + targetWidth = rect.width || rect.right - rect.left; + targetHeight = rect.height || rect.bottom - rect.top; + if (selectedElm !== targetElm) { + selectedElm = targetElm; + width = height = 0; + } + e = editor.fire('ObjectSelected', { target: targetElm }); + if (isResizable(targetElm) && !e.isDefaultPrevented()) { + each(resizeHandles, function (handle, name) { + var handleElm; + var startDrag = function (e) { + startX = e.screenX; + startY = e.screenY; + startW = getResizeTarget(selectedElm).clientWidth; + startH = getResizeTarget(selectedElm).clientHeight; + ratio = startH / startW; + selectedHandle = handle; + handle.startPos = { + x: targetWidth * handle[0] + selectedElmX, + y: targetHeight * handle[1] + selectedElmY + }; + startScrollWidth = rootElement.scrollWidth; + startScrollHeight = rootElement.scrollHeight; + selectedElmGhost = selectedElm.cloneNode(true); + dom.addClass(selectedElmGhost, 'mce-clonedresizable'); + dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all'); + selectedElmGhost.contentEditable = false; + selectedElmGhost.unSelectabe = true; + dom.setStyles(selectedElmGhost, { + left: selectedElmX, + top: selectedElmY, + margin: 0 + }); + selectedElmGhost.removeAttribute('data-mce-selected'); + rootElement.appendChild(selectedElmGhost); + dom.bind(editableDoc, 'mousemove', resizeGhostElement); + dom.bind(editableDoc, 'mouseup', endGhostResize); + if (rootDocument !== editableDoc) { + dom.bind(rootDocument, 'mousemove', resizeGhostElement); + dom.bind(rootDocument, 'mouseup', endGhostResize); + } + resizeHelper = dom.add(rootElement, 'div', { + 'class': 'mce-resize-helper', + 'data-mce-bogus': 'all' + }, startW + ' × ' + startH); + }; + handleElm = dom.get('mceResizeHandle' + name); + if (handleElm) { + dom.remove(handleElm); + } + handleElm = dom.add(rootElement, 'div', { + 'id': 'mceResizeHandle' + name, + 'data-mce-bogus': 'all', + 'class': 'mce-resizehandle', + 'unselectable': true, + 'style': 'cursor:' + name + '-resize; margin:0; padding:0' + }); + if (Env.ie === 11) { + handleElm.contentEditable = false; + } + dom.bind(handleElm, 'mousedown', function (e) { + e.stopImmediatePropagation(); + e.preventDefault(); + startDrag(e); + }); + handle.elm = handleElm; + dom.setStyles(handleElm, { + left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2, + top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2 + }); + }); + } else { + hideResizeRect(); + } + selectedElm.setAttribute('data-mce-selected', '1'); + }; + var hideResizeRect = function () { + var name, handleElm; + unbindResizeHandleEvents(); + if (selectedElm) { + selectedElm.removeAttribute('data-mce-selected'); + } + for (name in resizeHandles) { + handleElm = dom.get('mceResizeHandle' + name); + if (handleElm) { + dom.unbind(handleElm); + dom.remove(handleElm); + } + } + }; + var updateResizeRect = function (e) { + var startElm, controlElm; + var isChildOrEqual = function (node, parent) { + if (node) { + do { + if (node === parent) { + return true; + } + } while (node = node.parentNode); + } + }; + if (resizeStarted || editor.removed) { + return; + } + each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) { + img.removeAttribute('data-mce-selected'); + }); + controlElm = e.type === 'mousedown' ? e.target : selection.getNode(); + controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[0]; + if (isChildOrEqual(controlElm, rootElement)) { + disableGeckoResize(); + startElm = selection.getStart(true); + if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) { + showResizeRect(controlElm); + return; + } + } + hideResizeRect(); + }; + var isWithinContentEditableFalse = function (elm) { + return isContentEditableFalse$a(getContentEditableRoot$1(editor.getBody(), elm)); + }; + var unbindResizeHandleEvents = function () { + for (var name in resizeHandles) { + var handle = resizeHandles[name]; + if (handle.elm) { + dom.unbind(handle.elm); + delete handle.elm; + } + } + }; + var disableGeckoResize = function () { + try { + editor.getDoc().execCommand('enableObjectResizing', false, false); + } catch (ex) { + } + }; + editor.on('init', function () { + disableGeckoResize(); + if (Env.ie && Env.ie >= 11) { + editor.on('mousedown click', function (e) { + var target = e.target, nodeName = target.nodeName; + if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) { + if (e.button !== 2) { + editor.selection.select(target, nodeName === 'TABLE'); + } + if (e.type === 'mousedown') { + editor.nodeChanged(); + } + } + }); + editor.dom.bind(rootElement, 'mscontrolselect', function (e) { + var delayedSelect = function (node) { + Delay.setEditorTimeout(editor, function () { + editor.selection.select(node); + }); + }; + if (isWithinContentEditableFalse(e.target)) { + e.preventDefault(); + delayedSelect(e.target); + return; + } + if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) { + e.preventDefault(); + if (e.target.tagName === 'IMG') { + delayedSelect(e.target); + } + } + }); + } + var throttledUpdateResizeRect = Delay.throttle(function (e) { + if (!editor.composing) { + updateResizeRect(e); + } + }); + editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect); + editor.on('keyup compositionend', function (e) { + if (selectedElm && selectedElm.nodeName === 'TABLE') { + throttledUpdateResizeRect(e); + } + }); + editor.on('hide blur', hideResizeRect); + editor.on('contextmenu', contextMenuSelectImage, true); + }); + editor.on('remove', unbindResizeHandleEvents); + var destroy = function () { + selectedElm = selectedElmGhost = null; + }; + return { + isResizable: isResizable, + showResizeRect: showResizeRect, + hideResizeRect: hideResizeRect, + updateResizeRect: updateResizeRect, + destroy: destroy + }; + }; + + function Dimension (name, getOffset) { + var set = function (element, h) { + if (!isNumber(h) && !h.match(/^[0-9]+$/)) { + throw new Error(name + '.set accepts only positive integer values. Value was ' + h); + } + var dom = element.dom(); + if (isSupported(dom)) { + dom.style[name] = h + 'px'; + } + }; + var get = function (element) { + var r = getOffset(element); + if (r <= 0 || r === null) { + var css = get$2(element, name); + return parseFloat(css) || 0; + } + return r; + }; + var getOuter = get; + var aggregate = function (element, properties) { + return foldl(properties, function (acc, property) { + var val = get$2(element, property); + var value = val === undefined ? 0 : parseInt(val, 10); + return isNaN(value) ? acc : acc + value; + }, 0); + }; + var max = function (element, value, properties) { + var cumulativeInclusions = aggregate(element, properties); + var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0; + return absoluteMax; + }; + return { + set: set, + get: get, + getOuter: getOuter, + aggregate: aggregate, + max: max + }; + } + + var api$1 = Dimension('height', function (element) { + var dom = element.dom(); + return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight; + }); + var get$7 = function (element) { + return api$1.get(element); + }; + + var attached = function (element, scope) { + var doc = scope || Element.fromDom(domGlobals.document.documentElement); + return ancestor(element, curry(eq, doc)).isSome(); + }; + var windowOf = function (element) { + var dom = element.dom(); + if (dom === dom.window && element instanceof domGlobals.Window) { + return element; + } + return isDocument(element) ? dom.defaultView || dom.parentWindow : null; + }; + + var r = function (left, top) { + var translate = function (x, y) { + return r(left + x, top + y); + }; + return { + left: constant(left), + top: constant(top), + translate: translate + }; + }; + var Position$1 = r; + + var boxPosition = function (dom) { + var box = dom.getBoundingClientRect(); + return Position$1(box.left, box.top); + }; + var firstDefinedOrZero = function (a, b) { + return a !== undefined ? a : b !== undefined ? b : 0; + }; + var absolute = function (element) { + var doc = element.dom().ownerDocument; + var body = doc.body; + var win = windowOf(Element.fromDom(doc)); + var html = doc.documentElement; + var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop); + var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft); + var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop); + var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft); + return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop); + }; + var viewport = function (element) { + var dom = element.dom(); + var doc = dom.ownerDocument; + var body = doc.body; + var html = Element.fromDom(doc.documentElement); + if (body === dom) { + return Position$1(body.offsetLeft, body.offsetTop); + } + if (!attached(element, html)) { + return Position$1(0, 0); + } + return boxPosition(dom); + }; + + var isSafari = PlatformDetection$1.detect().browser.isSafari(); + var get$8 = function (_DOC) { + var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document; + var x = doc.body.scrollLeft || doc.documentElement.scrollLeft; + var y = doc.body.scrollTop || doc.documentElement.scrollTop; + return Position$1(x, y); + }; + var to = function (x, y, _DOC) { + var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document; + var win = doc.defaultView; + win.scrollTo(x, y); + }; + var intoView = function (element, alignToTop) { + if (isSafari && isFunction(element.dom().scrollIntoViewIfNeeded)) { + element.dom().scrollIntoViewIfNeeded(false); + } else { + element.dom().scrollIntoView(alignToTop); + } + }; + + var walkUp = function (navigation, doc) { + var frame = navigation.view(doc); + return frame.fold(constant([]), function (f) { + var parent = navigation.owner(f); + var rest = walkUp(navigation, parent); + return [f].concat(rest); + }); + }; + var pathTo = function (element, navigation) { + var d = navigation.owner(element); + return walkUp(navigation, d); + }; + + var view = function (doc) { + var element = doc.dom() === domGlobals.document ? Option.none() : Option.from(doc.dom().defaultView.frameElement); + return element.map(Element.fromDom); + }; + var owner$1 = function (element) { + return owner(element); + }; + + var Navigation = /*#__PURE__*/Object.freeze({ + view: view, + owner: owner$1 + }); + + var find$4 = function (element) { + var doc = Element.fromDom(domGlobals.document); + var scroll = get$8(doc); + var frames = pathTo(element, Navigation); + var offset = viewport(element); + var r = foldr(frames, function (b, a) { + var loc = viewport(a); + return { + left: b.left + loc.left(), + top: b.top + loc.top() + }; + }, { + left: 0, + top: 0 + }); + return Position$1(r.left + offset.left() + scroll.left(), r.top + offset.top() + scroll.top()); + }; + + var excludeFromDescend = function (element) { + return name(element) === 'textarea'; + }; + var descend = function (element, offset) { + var children$1 = children(element); + if (children$1.length === 0 || excludeFromDescend(element)) { + return { + element: element, + offset: offset + }; + } else if (offset < children$1.length && !excludeFromDescend(children$1[offset])) { + return { + element: children$1[offset], + offset: 0 + }; + } else { + var last = children$1[children$1.length - 1]; + if (excludeFromDescend(last)) { + return { + element: element, + offset: offset + }; + } else { + if (name(last) === 'img') { + return { + element: last, + offset: 1 + }; + } else if (isText(last)) { + return { + element: last, + offset: get$5(last).length + }; + } else { + return { + element: last, + offset: children(last).length + }; + } + } + } + }; + var markerInfo = function (element, cleanupFun) { + var pos = absolute(element); + var height = get$7(element); + return { + element: element, + bottom: pos.top() + height, + pos: pos, + cleanup: cleanupFun + }; + }; + var createMarker = function (element, offset) { + var startPoint = descend(element, offset); + var span = Element.fromHtml('' + Zwsp.ZWSP + ''); + before(startPoint.element, span); + return markerInfo(span, function () { + return remove$1(span); + }); + }; + var elementMarker = function (element) { + return markerInfo(Element.fromDom(element), noop); + }; + var withMarker = function (editor, f, rng, alignToTop) { + preserveWith(editor, function (_s, _e) { + return applyWithMarker(editor, f, rng, alignToTop); + }, rng); + }; + var applyWithMarker = function (editor, f, rng, alignToTop) { + var body = Element.fromDom(editor.getBody()); + var doc = Element.fromDom(editor.getDoc()); + reflow(body); + var scrollTop = get$8(doc).top(); + var marker = createMarker(Element.fromDom(rng.startContainer), rng.startOffset); + f(doc, scrollTop, marker, alignToTop); + marker.cleanup(); + }; + var withElement = function (editor, element, f, alignToTop) { + var doc = Element.fromDom(editor.getDoc()); + var scrollTop = get$8(doc).top(); + f(doc, scrollTop, element, alignToTop); + }; + var preserveWith = function (editor, f, rng) { + var startElement = rng.startContainer; + var startOffset = rng.startOffset; + var endElement = rng.endContainer; + var endOffset = rng.endOffset; + f(Element.fromDom(startElement), Element.fromDom(endElement)); + var newRng = editor.dom.createRng(); + newRng.setStart(startElement, startOffset); + newRng.setEnd(endElement, endOffset); + editor.selection.setRng(rng); + }; + var fireScrollIntoViewEvent = function (editor, elm, alignToTop) { + var scrollEvent = editor.fire('ScrollIntoView', { + elm: elm, + alignToTop: alignToTop + }); + return scrollEvent.isDefaultPrevented(); + }; + var scrollTo = function (marker, viewHeight, alignToTop, doc) { + var pos = marker.pos; + if (alignToTop) { + to(pos.left(), pos.top(), doc); + } else { + var y = pos.top() - viewHeight + (marker.bottom - pos.top()); + to(pos.left(), y, doc); + } + }; + var intoWindowIfNeeded = function (doc, scrollTop, viewHeight, marker, alignToTop) { + if (marker.pos.top() < scrollTop) { + scrollTo(marker, viewHeight, alignToTop !== false, doc); + } else if (marker.bottom > viewHeight + scrollTop) { + scrollTo(marker, viewHeight, alignToTop === true, doc); + } + }; + var intoWindow = function (doc, scrollTop, marker, alignToTop) { + var viewHeight = doc.dom().defaultView.innerHeight; + intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop); + }; + var intoFrame = function (editor, doc, scrollTop, marker, alignToTop) { + var frameViewHeight = doc.dom().defaultView.innerHeight; + intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop); + var op = find$4(marker.element); + var viewTop = get$8().top(); + var viewBot = domGlobals.window.innerHeight + viewTop; + if (op.top() < viewTop) { + intoView(marker.element, alignToTop !== false); + } else if (op.top() > viewBot) { + intoView(marker.element, alignToTop === true); + } + }; + var rangeIntoWindow = function (editor, rng, alignToTop) { + return withMarker(editor, curry(intoWindow), rng, alignToTop); + }; + var elementIntoWindow = function (editor, element, alignToTop) { + return withElement(editor, elementMarker(element), curry(intoWindow), alignToTop); + }; + var rangeIntoFrame = function (editor, rng, alignToTop) { + return withMarker(editor, curry(intoFrame, editor), rng, alignToTop); + }; + var elementIntoFrame = function (editor, element, alignToTop) { + return withElement(editor, elementMarker(element), curry(intoFrame, editor), alignToTop); + }; + var elementIntoView = function (editor, element, alignToTop) { + if (fireScrollIntoViewEvent(editor, element, alignToTop)) { + return; + } + var scroller = editor.inline ? elementIntoWindow : elementIntoFrame; + scroller(editor, element, alignToTop); + }; + var rangeIntoView = function (editor, rng, alignToTop) { + var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame; + scroller(editor, rng, alignToTop); + }; + var ScrollIntoView = { + scrollElementIntoView: elementIntoView, + scrollRangeIntoView: rangeIntoView + }; + + var hasCeProperty = function (node) { + return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node); + }; + var findParent = function (node, rootNode, predicate) { + while (node && node !== rootNode) { + if (predicate(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var findClosestIeRange = function (clientX, clientY, doc) { + var element, rng, rects; + element = doc.elementFromPoint(clientX, clientY); + rng = doc.body.createTextRange(); + if (!element || element.tagName === 'HTML') { + element = doc.body; + } + rng.moveToElementText(element); + rects = Tools.toArray(rng.getClientRects()); + rects = rects.sort(function (a, b) { + a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY)); + b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY)); + return a - b; + }); + if (rects.length > 0) { + clientY = (rects[0].bottom + rects[0].top) / 2; + try { + rng.moveToPoint(clientX, clientY); + rng.collapse(true); + return rng; + } catch (ex) { + } + } + return null; + }; + var moveOutOfContentEditableFalse = function (rng, rootNode) { + var parentElement = rng && rng.parentElement ? rng.parentElement() : null; + return NodeType.isContentEditableFalse(findParent(parentElement, rootNode, hasCeProperty)) ? null : rng; + }; + var fromPoint$1 = function (clientX, clientY, doc) { + var rng, point; + var pointDoc = doc; + if (pointDoc.caretPositionFromPoint) { + point = pointDoc.caretPositionFromPoint(clientX, clientY); + if (point) { + rng = doc.createRange(); + rng.setStart(point.offsetNode, point.offset); + rng.collapse(true); + } + } else if (doc.caretRangeFromPoint) { + rng = doc.caretRangeFromPoint(clientX, clientY); + } else if (pointDoc.body.createTextRange) { + rng = pointDoc.body.createTextRange(); + try { + rng.moveToPoint(clientX, clientY); + rng.collapse(true); + } catch (ex) { + rng = findClosestIeRange(clientX, clientY, doc); + } + return moveOutOfContentEditableFalse(rng, doc.body); + } + return rng; + }; + var CaretRangeFromPoint = { fromPoint: fromPoint$1 }; + + var processRanges = function (editor, ranges) { + return map(ranges, function (range) { + var evt = editor.fire('GetSelectionRange', { range: range }); + return evt.range !== range ? evt.range : range; + }); + }; + var EventProcessRanges = { processRanges: processRanges }; + + var fromElements = function (elements, scope) { + var doc = scope || domGlobals.document; + var fragment = doc.createDocumentFragment(); + each(elements, function (element) { + fragment.appendChild(element.dom()); + }); + return Element.fromDom(fragment); + }; + + var tableModel = Immutable('element', 'width', 'rows'); + var tableRow = Immutable('element', 'cells'); + var cellPosition = Immutable('x', 'y'); + var getSpan = function (td, key) { + var value = parseInt(get$1(td, key), 10); + return isNaN(value) ? 1 : value; + }; + var fillout = function (table, x, y, tr, td) { + var rowspan = getSpan(td, 'rowspan'); + var colspan = getSpan(td, 'colspan'); + var rows = table.rows(); + for (var y2 = y; y2 < y + rowspan; y2++) { + if (!rows[y2]) { + rows[y2] = tableRow(deep(tr), []); + } + for (var x2 = x; x2 < x + colspan; x2++) { + var cells = rows[y2].cells(); + cells[x2] = y2 === y && x2 === x ? td : shallow(td); + } + } + }; + var cellExists = function (table, x, y) { + var rows = table.rows(); + var cells = rows[y] ? rows[y].cells() : []; + return !!cells[x]; + }; + var skipCellsX = function (table, x, y) { + while (cellExists(table, x, y)) { + x++; + } + return x; + }; + var getWidth = function (rows) { + return foldl(rows, function (acc, row) { + return row.cells().length > acc ? row.cells().length : acc; + }, 0); + }; + var findElementPos = function (table, element) { + var rows = table.rows(); + for (var y = 0; y < rows.length; y++) { + var cells = rows[y].cells(); + for (var x = 0; x < cells.length; x++) { + if (eq(cells[x], element)) { + return Option.some(cellPosition(x, y)); + } + } + } + return Option.none(); + }; + var extractRows = function (table, sx, sy, ex, ey) { + var newRows = []; + var rows = table.rows(); + for (var y = sy; y <= ey; y++) { + var cells = rows[y].cells(); + var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1); + newRows.push(tableRow(rows[y].element(), slice)); + } + return newRows; + }; + var subTable = function (table, startPos, endPos) { + var sx = startPos.x(), sy = startPos.y(); + var ex = endPos.x(), ey = endPos.y(); + var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy); + return tableModel(table.element(), getWidth(newRows), newRows); + }; + var createDomTable = function (table, rows) { + var tableElement = shallow(table.element()); + var tableBody = Element.fromTag('tbody'); + append$1(tableBody, rows); + append(tableElement, tableBody); + return tableElement; + }; + var modelRowsToDomRows = function (table) { + return map(table.rows(), function (row) { + var cells = map(row.cells(), function (cell) { + var td = deep(cell); + remove(td, 'colspan'); + remove(td, 'rowspan'); + return td; + }); + var tr = shallow(row.element()); + append$1(tr, cells); + return tr; + }); + }; + var fromDom$1 = function (tableElm) { + var table = tableModel(shallow(tableElm), 0, []); + each(descendants$1(tableElm, 'tr'), function (tr, y) { + each(descendants$1(tr, 'td,th'), function (td, x) { + fillout(table, skipCellsX(table, x, y), y, tr, td); + }); + }); + return tableModel(table.element(), getWidth(table.rows()), table.rows()); + }; + var toDom = function (table) { + return createDomTable(table, modelRowsToDomRows(table)); + }; + var subsection = function (table, startElement, endElement) { + return findElementPos(table, startElement).bind(function (startPos) { + return findElementPos(table, endElement).map(function (endPos) { + return subTable(table, startPos, endPos); + }); + }); + }; + var SimpleTableModel = { + fromDom: fromDom$1, + toDom: toDom, + subsection: subsection + }; + + var getRanges = function (selection) { + var ranges = []; + if (selection) { + for (var i = 0; i < selection.rangeCount; i++) { + ranges.push(selection.getRangeAt(i)); + } + } + return ranges; + }; + var getSelectedNodes = function (ranges) { + return bind(ranges, function (range) { + var node = getSelectedNode(range); + return node ? [Element.fromDom(node)] : []; + }); + }; + var hasMultipleRanges = function (selection) { + return getRanges(selection).length > 1; + }; + var MultiRange = { + getRanges: getRanges, + getSelectedNodes: getSelectedNodes, + hasMultipleRanges: hasMultipleRanges + }; + + var getCellsFromRanges = function (ranges) { + return filter(MultiRange.getSelectedNodes(ranges), isTableCell); + }; + var getCellsFromElement = function (elm) { + return descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]'); + }; + var getCellsFromElementOrRanges = function (ranges, element) { + var selectedCells = getCellsFromElement(element); + var rangeCells = getCellsFromRanges(ranges); + return selectedCells.length > 0 ? selectedCells : rangeCells; + }; + var getCellsFromEditor = function (editor) { + return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element.fromDom(editor.getBody())); + }; + var TableCellSelection = { + getCellsFromRanges: getCellsFromRanges, + getCellsFromElement: getCellsFromElement, + getCellsFromElementOrRanges: getCellsFromElementOrRanges, + getCellsFromEditor: getCellsFromEditor + }; + + var findParentListContainer = function (parents) { + return find(parents, function (elm) { + return name(elm) === 'ul' || name(elm) === 'ol'; + }); + }; + var getFullySelectedListWrappers = function (parents, rng) { + return find(parents, function (elm) { + return name(elm) === 'li' && hasAllContentsSelected(elm, rng); + }).fold(constant([]), function (li) { + return findParentListContainer(parents).map(function (listCont) { + return [ + Element.fromTag('li'), + Element.fromTag(name(listCont)) + ]; + }).getOr([]); + }); + }; + var wrap$3 = function (innerElm, elms) { + var wrapped = foldl(elms, function (acc, elm) { + append(elm, acc); + return elm; + }, innerElm); + return elms.length > 0 ? fromElements([wrapped]) : wrapped; + }; + var directListWrappers = function (commonAnchorContainer) { + if (isListItem(commonAnchorContainer)) { + return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) { + return [ + commonAnchorContainer, + listElm + ]; + }); + } else { + return isList(commonAnchorContainer) ? [commonAnchorContainer] : []; + } + }; + var getWrapElements = function (rootNode, rng) { + var commonAnchorContainer = Element.fromDom(rng.commonAncestorContainer); + var parents = Parents.parentsAndSelf(commonAnchorContainer, rootNode); + var wrapElements = filter(parents, function (elm) { + return isInline(elm) || isHeading(elm); + }); + var listWrappers = getFullySelectedListWrappers(parents, rng); + var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer)); + return map(allWrappers, shallow); + }; + var emptyFragment = function () { + return fromElements([]); + }; + var getFragmentFromRange = function (rootNode, rng) { + return wrap$3(Element.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng)); + }; + var getParentTable = function (rootElm, cell) { + return ancestor$1(cell, 'table', curry(eq, rootElm)); + }; + var getTableFragment = function (rootNode, selectedTableCells) { + return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) { + var firstCell = selectedTableCells[0]; + var lastCell = selectedTableCells[selectedTableCells.length - 1]; + var fullTableModel = SimpleTableModel.fromDom(tableElm); + return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) { + return fromElements([SimpleTableModel.toDom(sectionedTableModel)]); + }); + }).getOrThunk(emptyFragment); + }; + var getSelectionFragment = function (rootNode, ranges) { + return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]); + }; + var read$2 = function (rootNode, ranges) { + var selectedCells = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode); + return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges); + }; + var FragmentReader = { read: read$2 }; + + var getTextContent = function (editor) { + return Option.from(editor.selection.getRng()).map(function (rng) { + var bin = editor.dom.add(editor.getBody(), 'div', { + 'data-mce-bogus': 'all', + 'style': 'overflow: hidden; opacity: 0;' + }, rng.cloneContents()); + var text = Zwsp.trim(bin.innerText); + editor.dom.remove(bin); + return text; + }).getOr(''); + }; + var getHtmlContent = function (editor, args) { + var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body'); + var sel = editor.selection.getSel(); + var fragment; + var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel)); + fragment = args.contextual ? FragmentReader.read(Element.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents(); + if (fragment) { + tmpElm.appendChild(fragment); + } + return editor.selection.serializer.serialize(tmpElm, args); + }; + var getContent$1 = function (editor, args) { + if (args === void 0) { + args = {}; + } + args.get = true; + args.format = args.format || 'html'; + args.selection = true; + args = editor.fire('BeforeGetContent', args); + if (args.isDefaultPrevented()) { + editor.fire('GetContent', args); + return args.content; + } + if (args.format === 'text') { + return getTextContent(editor); + } else { + args.getInner = true; + var content = getHtmlContent(editor, args); + if (args.format === 'tree') { + return content; + } else { + args.content = editor.selection.isCollapsed() ? '' : content; + editor.fire('GetContent', args); + return args.content; + } + } + }; + var GetSelectionContent = { getContent: getContent$1 }; + + var findParent$1 = function (node, rootNode, predicate) { + while (node && node !== rootNode) { + if (predicate(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var hasParent = function (node, rootNode, predicate) { + return findParent$1(node, rootNode, predicate) !== null; + }; + var hasParentWithName = function (node, rootNode, name) { + return hasParent(node, rootNode, function (node) { + return node.nodeName === name; + }); + }; + var isTable$3 = function (node) { + return node && node.nodeName === 'TABLE'; + }; + var isTableCell$3 = function (node) { + return node && /^(TD|TH|CAPTION)$/.test(node.nodeName); + }; + var isCeFalseCaretContainer = function (node, rootNode) { + return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false; + }; + var hasBrBeforeAfter = function (dom, node, left) { + var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot()); + while (node = walker[left ? 'prev' : 'next']()) { + if (NodeType.isBr(node)) { + return true; + } + } + }; + var isPrevNode = function (node, name) { + return node.previousSibling && node.previousSibling.nodeName === name; + }; + var hasContentEditableFalseParent = function (body, node) { + while (node && node !== body) { + if (NodeType.isContentEditableFalse(node)) { + return true; + } + node = node.parentNode; + } + return false; + }; + var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) { + var lastInlineElement; + var body = dom.getRoot(); + var node; + var nonEmptyElementsMap = dom.schema.getNonEmptyElements(); + var parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body; + if (left && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) { + return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode))); + } + var walker = new TreeWalker(startNode, parentBlockContainer); + while (node = walker[left ? 'prev' : 'next']()) { + if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) { + return Option.none(); + } + if (NodeType.isText(node) && node.nodeValue.length > 0) { + if (hasParentWithName(node, body, 'A') === false) { + return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0)); + } + return Option.none(); + } + if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + return Option.none(); + } + lastInlineElement = node; + } + if (collapsed && lastInlineElement) { + return Option.some(CaretPosition(lastInlineElement, 0)); + } + return Option.none(); + }; + var normalizeEndPoint = function (dom, collapsed, start, rng) { + var container, offset; + var body = dom.getRoot(); + var node, nonEmptyElementsMap; + var directionLeft, isAfterNode, normalized = false; + container = rng[(start ? 'start' : 'end') + 'Container']; + offset = rng[(start ? 'start' : 'end') + 'Offset']; + isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length; + nonEmptyElementsMap = dom.schema.getNonEmptyElements(); + directionLeft = start; + if (isCaretContainer(container)) { + return Option.none(); + } + if (NodeType.isElement(container) && offset > container.childNodes.length - 1) { + directionLeft = false; + } + if (NodeType.isDocument(container)) { + container = body; + offset = 0; + } + if (container === body) { + if (directionLeft) { + node = container.childNodes[offset > 0 ? offset - 1 : 0]; + if (node) { + if (isCaretContainer(node)) { + return Option.none(); + } + if (nonEmptyElementsMap[node.nodeName] || isTable$3(node)) { + return Option.none(); + } + } + } + if (container.hasChildNodes()) { + offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1); + container = container.childNodes[offset]; + offset = NodeType.isText(container) && isAfterNode ? container.data.length : 0; + if (!collapsed && container === body.lastChild && isTable$3(container)) { + return Option.none(); + } + if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) { + return Option.none(); + } + if (container.hasChildNodes() && isTable$3(container) === false) { + node = container; + var walker = new TreeWalker(container, body); + do { + if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) { + normalized = false; + break; + } + if (NodeType.isText(node) && node.nodeValue.length > 0) { + offset = directionLeft ? 0 : node.nodeValue.length; + container = node; + normalized = true; + break; + } + if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) { + offset = dom.nodeIndex(node); + container = node.parentNode; + if (!directionLeft) { + offset++; + } + normalized = true; + break; + } + } while (node = directionLeft ? walker.next() : walker.prev()); + } + } + } + if (collapsed) { + if (NodeType.isText(container) && offset === 0) { + findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) { + container = pos.container(); + offset = pos.offset(); + normalized = true; + }); + } + if (NodeType.isElement(container)) { + node = container.childNodes[offset]; + if (!node) { + node = container.childNodes[offset - 1]; + } + if (node && NodeType.isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) { + findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) { + container = pos.container(); + offset = pos.offset(); + normalized = true; + }); + } + } + } + if (directionLeft && !collapsed && NodeType.isText(container) && offset === container.nodeValue.length) { + findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) { + container = pos.container(); + offset = pos.offset(); + normalized = true; + }); + } + return normalized ? Option.some(CaretPosition(container, offset)) : Option.none(); + }; + var normalize$2 = function (dom, rng) { + var collapsed = rng.collapsed, normRng = rng.cloneRange(); + var startPos = CaretPosition.fromRangeStart(rng); + normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) { + if (!collapsed || !CaretPosition.isAbove(startPos, pos)) { + normRng.setStart(pos.container(), pos.offset()); + } + }); + if (!collapsed) { + normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) { + normRng.setEnd(pos.container(), pos.offset()); + }); + } + if (collapsed) { + normRng.collapse(true); + } + return RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng); + }; + var NormalizeRange = { normalize: normalize$2 }; + + var prependData = function (target, data) { + target.insertData(0, data); + }; + var removeEmpty = function (text) { + if (text.dom().length === 0) { + remove$1(text); + return Option.none(); + } + return Option.some(text); + }; + var rngSetContent = function (rng, fragment) { + var firstChild = Option.from(fragment.firstChild).map(Element.fromDom); + var lastChild = Option.from(fragment.lastChild).map(Element.fromDom); + rng.deleteContents(); + rng.insertNode(fragment); + var prevText = firstChild.bind(prevSibling).filter(isText).bind(removeEmpty); + var nextText = lastChild.bind(nextSibling).filter(isText).bind(removeEmpty); + liftN([ + prevText, + firstChild.filter(isText) + ], function (prev, start) { + prependData(start.dom(), prev.dom().data); + remove$1(prev); + }); + liftN([ + nextText, + lastChild.filter(isText) + ], function (next, end) { + var oldLength = end.dom().length; + end.dom().appendData(next.dom().data); + rng.setEnd(end.dom(), oldLength); + remove$1(next); + }); + rng.collapse(false); + }; + var setupArgs = function (args, content) { + args = args || { format: 'html' }; + args.set = true; + args.selection = true; + args.content = content; + return args; + }; + var setContent$1 = function (editor, content, args) { + args = setupArgs(args, content); + if (!args.no_events) { + args = editor.fire('BeforeSetContent', args); + if (args.isDefaultPrevented()) { + editor.fire('SetContent', args); + return; + } + } + var rng = editor.selection.getRng(); + rngSetContent(rng, rng.createContextualFragment(args.content)); + editor.selection.setRng(rng); + ScrollIntoView.scrollRangeIntoView(editor, rng); + if (!args.no_events) { + editor.fire('SetContent', args); + } + }; + var SetSelectionContent = { setContent: setContent$1 }; + + var getEndpointElement = function (root, rng, start, real, resolve) { + var container = start ? rng.startContainer : rng.endContainer; + var offset = start ? rng.startOffset : rng.endOffset; + return Option.from(container).map(Element.fromDom).map(function (elm) { + return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm; + }).bind(function (elm) { + return isElement(elm) ? Option.some(elm) : parent(elm); + }).map(function (elm) { + return elm.dom(); + }).getOr(root); + }; + var getStart$2 = function (root, rng, real) { + return getEndpointElement(root, rng, true, real, function (elm, offset) { + return Math.min(childNodesCount(elm), offset); + }); + }; + var getEnd = function (root, rng, real) { + return getEndpointElement(root, rng, false, real, function (elm, offset) { + return offset > 0 ? offset - 1 : offset; + }); + }; + var skipEmptyTextNodes = function (node, forwards) { + var orig = node; + while (node && NodeType.isText(node) && node.length === 0) { + node = forwards ? node.nextSibling : node.previousSibling; + } + return node || orig; + }; + var getNode$1 = function (root, rng) { + var elm, startContainer, endContainer, startOffset, endOffset; + if (!rng) { + return root; + } + startContainer = rng.startContainer; + endContainer = rng.endContainer; + startOffset = rng.startOffset; + endOffset = rng.endOffset; + elm = rng.commonAncestorContainer; + if (!rng.collapsed) { + if (startContainer === endContainer) { + if (endOffset - startOffset < 2) { + if (startContainer.hasChildNodes()) { + elm = startContainer.childNodes[startOffset]; + } + } + } + if (startContainer.nodeType === 3 && endContainer.nodeType === 3) { + if (startContainer.length === startOffset) { + startContainer = skipEmptyTextNodes(startContainer.nextSibling, true); + } else { + startContainer = startContainer.parentNode; + } + if (endOffset === 0) { + endContainer = skipEmptyTextNodes(endContainer.previousSibling, false); + } else { + endContainer = endContainer.parentNode; + } + if (startContainer && startContainer === endContainer) { + return startContainer; + } + } + } + if (elm && elm.nodeType === 3) { + return elm.parentNode; + } + return elm; + }; + var getSelectedBlocks = function (dom, rng, startElm, endElm) { + var node, root; + var selectedBlocks = []; + root = dom.getRoot(); + startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock); + endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock); + if (startElm && startElm !== root) { + selectedBlocks.push(startElm); + } + if (startElm && endElm && startElm !== endElm) { + node = startElm; + var walker = new TreeWalker(startElm, root); + while ((node = walker.next()) && node !== endElm) { + if (dom.isBlock(node)) { + selectedBlocks.push(node); + } + } + } + if (endElm && startElm !== endElm && endElm !== root) { + selectedBlocks.push(endElm); + } + return selectedBlocks; + }; + var select$1 = function (dom, node, content) { + return Option.from(node).map(function (node) { + var idx = dom.nodeIndex(node); + var rng = dom.createRng(); + rng.setStart(node.parentNode, idx); + rng.setEnd(node.parentNode, idx + 1); + if (content) { + moveEndPoint$1(dom, rng, node, true); + moveEndPoint$1(dom, rng, node, false); + } + return rng; + }); + }; + + var deleteFromCallbackMap = function (callbackMap, selector, callback) { + if (callbackMap && callbackMap.hasOwnProperty(selector)) { + var newCallbacks = filter(callbackMap[selector], function (cb) { + return cb !== callback; + }); + if (newCallbacks.length === 0) { + delete callbackMap[selector]; + } else { + callbackMap[selector] = newCallbacks; + } + } + }; + function SelectorChanged (dom, editor) { + var selectorChangedData, currentSelectors; + return { + selectorChangedWithUnbind: function (selector, callback) { + if (!selectorChangedData) { + selectorChangedData = {}; + currentSelectors = {}; + editor.on('NodeChange', function (e) { + var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {}; + Tools.each(selectorChangedData, function (callbacks, selector) { + Tools.each(parents, function (node) { + if (dom.is(node, selector)) { + if (!currentSelectors[selector]) { + Tools.each(callbacks, function (callback) { + callback(true, { + node: node, + selector: selector, + parents: parents + }); + }); + currentSelectors[selector] = callbacks; + } + matchedSelectors[selector] = callbacks; + return false; + } + }); + }); + Tools.each(currentSelectors, function (callbacks, selector) { + if (!matchedSelectors[selector]) { + delete currentSelectors[selector]; + Tools.each(callbacks, function (callback) { + callback(false, { + node: node, + selector: selector, + parents: parents + }); + }); + } + }); + }); + } + if (!selectorChangedData[selector]) { + selectorChangedData[selector] = []; + } + selectorChangedData[selector].push(callback); + return { + unbind: function () { + deleteFromCallbackMap(selectorChangedData, selector, callback); + deleteFromCallbackMap(currentSelectors, selector, callback); + } + }; + } + }; + } + + var isNativeIeSelection = function (rng) { + return !!rng.select; + }; + var isAttachedToDom = function (node) { + return !!(node && node.ownerDocument) && contains$3(Element.fromDom(node.ownerDocument), Element.fromDom(node)); + }; + var isValidRange = function (rng) { + if (!rng) { + return false; + } else if (isNativeIeSelection(rng)) { + return true; + } else { + return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer); + } + }; + var Selection$1 = function (dom, win, serializer, editor) { + var bookmarkManager, controlSelection; + var selectedRange, explicitRange; + var selectorChangedWithUnbind = SelectorChanged(dom, editor).selectorChangedWithUnbind; + var setCursorLocation = function (node, offset) { + var rng = dom.createRng(); + if (!node) { + moveEndPoint$1(dom, rng, editor.getBody(), true); + setRng(rng); + } else { + rng.setStart(node, offset); + rng.setEnd(node, offset); + setRng(rng); + collapse(false); + } + }; + var getContent = function (args) { + return GetSelectionContent.getContent(editor, args); + }; + var setContent = function (content, args) { + return SetSelectionContent.setContent(editor, content, args); + }; + var getStart = function (real) { + return getStart$2(editor.getBody(), getRng(), real); + }; + var getEnd$1 = function (real) { + return getEnd(editor.getBody(), getRng(), real); + }; + var getBookmark = function (type, normalized) { + return bookmarkManager.getBookmark(type, normalized); + }; + var moveToBookmark = function (bookmark) { + return bookmarkManager.moveToBookmark(bookmark); + }; + var select = function (node, content) { + select$1(dom, node, content).each(setRng); + return node; + }; + var isCollapsed = function () { + var rng = getRng(), sel = getSel(); + if (!rng || rng.item) { + return false; + } + if (rng.compareEndPoints) { + return rng.compareEndPoints('StartToEnd', rng) === 0; + } + return !sel || rng.collapsed; + }; + var collapse = function (toStart) { + var rng = getRng(); + rng.collapse(!!toStart); + setRng(rng); + }; + var getSel = function () { + return win.getSelection ? win.getSelection() : win.document.selection; + }; + var getRng = function () { + var selection, rng, elm, doc; + var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) { + try { + return sourceRange.compareBoundaryPoints(how, destinationRange); + } catch (ex) { + return -1; + } + }; + if (!win) { + return null; + } + doc = win.document; + if (typeof doc === 'undefined' || doc === null) { + return null; + } + if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) { + var bookmark = SelectionBookmark.getRng(editor); + if (bookmark.isSome()) { + return bookmark.map(function (r) { + return EventProcessRanges.processRanges(editor, [r])[0]; + }).getOr(doc.createRange()); + } + } + try { + if ((selection = getSel()) && !NodeType.isRestrictedNode(selection.anchorNode)) { + if (selection.rangeCount > 0) { + rng = selection.getRangeAt(0); + } else { + rng = selection.createRange ? selection.createRange() : doc.createRange(); + } + } + } catch (ex) { + } + rng = EventProcessRanges.processRanges(editor, [rng])[0]; + if (!rng) { + rng = doc.createRange ? doc.createRange() : doc.body.createTextRange(); + } + if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) { + elm = dom.getRoot(); + rng.setStart(elm, 0); + rng.setEnd(elm, 0); + } + if (selectedRange && explicitRange) { + if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) { + rng = explicitRange; + } else { + selectedRange = null; + explicitRange = null; + } + } + return rng; + }; + var setRng = function (rng, forward) { + var sel, node, evt; + if (!isValidRange(rng)) { + return; + } + var ieRange = isNativeIeSelection(rng) ? rng : null; + if (ieRange) { + explicitRange = null; + try { + ieRange.select(); + } catch (ex) { + } + return; + } + sel = getSel(); + evt = editor.fire('SetSelectionRange', { + range: rng, + forward: forward + }); + rng = evt.range; + if (sel) { + explicitRange = rng; + try { + sel.removeAllRanges(); + sel.addRange(rng); + } catch (ex) { + } + if (forward === false && sel.extend) { + sel.collapse(rng.endContainer, rng.endOffset); + sel.extend(rng.startContainer, rng.startOffset); + } + selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null; + } + if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) { + if (rng.endOffset - rng.startOffset < 2) { + if (rng.startContainer.hasChildNodes()) { + node = rng.startContainer.childNodes[rng.startOffset]; + if (node && node.tagName === 'IMG') { + sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset); + if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) { + sel.setBaseAndExtent(node, 0, node, 1); + } + } + } + } + } + editor.fire('AfterSetSelectionRange', { + range: rng, + forward: forward + }); + }; + var setNode = function (elm) { + setContent(dom.getOuterHTML(elm)); + return elm; + }; + var getNode = function () { + return getNode$1(editor.getBody(), getRng()); + }; + var getSelectedBlocks$1 = function (startElm, endElm) { + return getSelectedBlocks(dom, getRng(), startElm, endElm); + }; + var isForward = function () { + var sel = getSel(); + var anchorRange, focusRange; + if (!sel || !sel.anchorNode || !sel.focusNode) { + return true; + } + anchorRange = dom.createRng(); + anchorRange.setStart(sel.anchorNode, sel.anchorOffset); + anchorRange.collapse(true); + focusRange = dom.createRng(); + focusRange.setStart(sel.focusNode, sel.focusOffset); + focusRange.collapse(true); + return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0; + }; + var normalize = function () { + var rng = getRng(); + var sel = getSel(); + if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) { + var normRng = NormalizeRange.normalize(dom, rng); + normRng.each(function (normRng) { + setRng(normRng, isForward()); + }); + return normRng.getOr(rng); + } + return rng; + }; + var selectorChanged = function (selector, callback) { + selectorChangedWithUnbind(selector, callback); + return exports; + }; + var getScrollContainer = function () { + var scrollContainer; + var node = dom.getRoot(); + while (node && node.nodeName !== 'BODY') { + if (node.scrollHeight > node.clientHeight) { + scrollContainer = node; + break; + } + node = node.parentNode; + } + return scrollContainer; + }; + var scrollIntoView = function (elm, alignToTop) { + return ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop); + }; + var placeCaretAt = function (clientX, clientY) { + return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc())); + }; + var getBoundingClientRect = function () { + var rng = getRng(); + return rng.collapsed ? CaretPosition$1.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect(); + }; + var destroy = function () { + win = selectedRange = explicitRange = null; + controlSelection.destroy(); + }; + var exports = { + bookmarkManager: null, + controlSelection: null, + dom: dom, + win: win, + serializer: serializer, + editor: editor, + collapse: collapse, + setCursorLocation: setCursorLocation, + getContent: getContent, + setContent: setContent, + getBookmark: getBookmark, + moveToBookmark: moveToBookmark, + select: select, + isCollapsed: isCollapsed, + isForward: isForward, + setNode: setNode, + getNode: getNode, + getSel: getSel, + setRng: setRng, + getRng: getRng, + getStart: getStart, + getEnd: getEnd$1, + getSelectedBlocks: getSelectedBlocks$1, + normalize: normalize, + selectorChanged: selectorChanged, + selectorChangedWithUnbind: selectorChangedWithUnbind, + getScrollContainer: getScrollContainer, + scrollIntoView: scrollIntoView, + placeCaretAt: placeCaretAt, + getBoundingClientRect: getBoundingClientRect, + destroy: destroy + }; + bookmarkManager = BookmarkManager$1(exports); + controlSelection = ControlSelection(exports, editor); + exports.bookmarkManager = bookmarkManager; + exports.controlSelection = controlSelection; + return exports; + }; + + var isText$8 = NodeType.isText; + var startsWithCaretContainer$1 = function (node) { + return isText$8(node) && node.data[0] === Zwsp.ZWSP; + }; + var endsWithCaretContainer$1 = function (node) { + return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP; + }; + var createZwsp = function (node) { + return node.ownerDocument.createTextNode(Zwsp.ZWSP); + }; + var insertBefore = function (node) { + if (isText$8(node.previousSibling)) { + if (endsWithCaretContainer$1(node.previousSibling)) { + return node.previousSibling; + } else { + node.previousSibling.appendData(Zwsp.ZWSP); + return node.previousSibling; + } + } else if (isText$8(node)) { + if (startsWithCaretContainer$1(node)) { + return node; + } else { + node.insertData(0, Zwsp.ZWSP); + return node; + } + } else { + var newNode = createZwsp(node); + node.parentNode.insertBefore(newNode, node); + return newNode; + } + }; + var insertAfter = function (node) { + if (isText$8(node.nextSibling)) { + if (startsWithCaretContainer$1(node.nextSibling)) { + return node.nextSibling; + } else { + node.nextSibling.insertData(0, Zwsp.ZWSP); + return node.nextSibling; + } + } else if (isText$8(node)) { + if (endsWithCaretContainer$1(node)) { + return node; + } else { + node.appendData(Zwsp.ZWSP); + return node; + } + } else { + var newNode = createZwsp(node); + if (node.nextSibling) { + node.parentNode.insertBefore(newNode, node.nextSibling); + } else { + node.parentNode.appendChild(newNode); + } + return newNode; + } + }; + var insertInline$1 = function (before, node) { + return before ? insertBefore(node) : insertAfter(node); + }; + var insertInlineBefore = curry(insertInline$1, true); + var insertInlineAfter = curry(insertInline$1, false); + + var insertInlinePos = function (pos, before) { + if (NodeType.isText(pos.container())) { + return insertInline$1(before, pos.container()); + } else { + return insertInline$1(before, pos.getNode()); + } + }; + var isPosCaretContainer = function (pos, caret) { + var caretNode = caret.get(); + return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode); + }; + var renderCaret = function (caret, location) { + return location.fold(function (element) { + CaretContainerRemove.remove(caret.get()); + var text = insertInlineBefore(element); + caret.set(text); + return Option.some(CaretPosition$1(text, text.length - 1)); + }, function (element) { + return CaretFinder.firstPositionIn(element).map(function (pos) { + if (!isPosCaretContainer(pos, caret)) { + CaretContainerRemove.remove(caret.get()); + var text = insertInlinePos(pos, true); + caret.set(text); + return CaretPosition$1(text, 1); + } else { + return CaretPosition$1(caret.get(), 1); + } + }); + }, function (element) { + return CaretFinder.lastPositionIn(element).map(function (pos) { + if (!isPosCaretContainer(pos, caret)) { + CaretContainerRemove.remove(caret.get()); + var text = insertInlinePos(pos, false); + caret.set(text); + return CaretPosition$1(text, text.length - 1); + } else { + return CaretPosition$1(caret.get(), caret.get().length - 1); + } + }); + }, function (element) { + CaretContainerRemove.remove(caret.get()); + var text = insertInlineAfter(element); + caret.set(text); + return Option.some(CaretPosition$1(text, 1)); + }); + }; + var BoundaryCaret = { renderCaret: renderCaret }; + + var strongRtl = /[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/; + var hasStrongRtl = function (text) { + return strongRtl.test(text); + }; + + var isInlineTarget = function (editor, elm) { + return is$1(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor)); + }; + var isRtl$1 = function (element) { + return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent); + }; + var findInlineParents = function (isInlineTarget, rootNode, pos) { + return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget); + }; + var findRootInline = function (isInlineTarget, rootNode, pos) { + var parents = findInlineParents(isInlineTarget, rootNode, pos); + return Option.from(parents[parents.length - 1]); + }; + var hasSameParentBlock = function (rootNode, node1, node2) { + var block1 = getParentBlock(node1, rootNode); + var block2 = getParentBlock(node2, rootNode); + return block1 && block1 === block2; + }; + var isAtZwsp = function (pos) { + return isBeforeInline(pos) || isAfterInline(pos); + }; + var normalizePosition = function (forward, pos) { + if (!pos) { + return pos; + } + var container = pos.container(), offset = pos.offset(); + if (forward) { + if (isCaretContainerInline(container)) { + if (NodeType.isText(container.nextSibling)) { + return CaretPosition$1(container.nextSibling, 0); + } else { + return CaretPosition$1.after(container); + } + } else { + return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos; + } + } else { + if (isCaretContainerInline(container)) { + if (NodeType.isText(container.previousSibling)) { + return CaretPosition$1(container.previousSibling, container.previousSibling.data.length); + } else { + return CaretPosition$1.before(container); + } + } else { + return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos; + } + } + }; + var normalizeForwards = curry(normalizePosition, true); + var normalizeBackwards = curry(normalizePosition, false); + var InlineUtils = { + isInlineTarget: isInlineTarget, + findRootInline: findRootInline, + isRtl: isRtl$1, + isAtZwsp: isAtZwsp, + normalizePosition: normalizePosition, + normalizeForwards: normalizeForwards, + normalizeBackwards: normalizeBackwards, + hasSameParentBlock: hasSameParentBlock + }; + + var evaluateUntil = function (fns, args) { + for (var i = 0; i < fns.length; i++) { + var result = fns[i].apply(null, args); + if (result.isSome()) { + return result; + } + } + return Option.none(); + }; + var LazyEvaluator = { evaluateUntil: evaluateUntil }; + + var Location = Adt.generate([ + { before: ['element'] }, + { start: ['element'] }, + { end: ['element'] }, + { after: ['element'] } + ]); + var rescope = function (rootNode, node) { + var parentBlock = getParentBlock(node, rootNode); + return parentBlock ? parentBlock : rootNode; + }; + var before$4 = function (isInlineTarget, rootNode, pos) { + var nPos = InlineUtils.normalizeForwards(pos); + var scope = rescope(rootNode, nPos.container()); + return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () { + return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) { + return Location.before(inline); + }); + }, Option.none); + }; + var isNotInsideFormatCaretContainer = function (rootNode, elm) { + return getParentCaretContainer(rootNode, elm) === null; + }; + var findInsideRootInline = function (isInlineTarget, rootNode, pos) { + return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode)); + }; + var start$1 = function (isInlineTarget, rootNode, pos) { + var nPos = InlineUtils.normalizeBackwards(pos); + return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) { + var prevPos = CaretFinder.prevPosition(inline, nPos); + return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none(); + }); + }; + var end = function (isInlineTarget, rootNode, pos) { + var nPos = InlineUtils.normalizeForwards(pos); + return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) { + var nextPos = CaretFinder.nextPosition(inline, nPos); + return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none(); + }); + }; + var after$3 = function (isInlineTarget, rootNode, pos) { + var nPos = InlineUtils.normalizeBackwards(pos); + var scope = rescope(rootNode, nPos.container()); + return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () { + return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) { + return Location.after(inline); + }); + }, Option.none); + }; + var isValidLocation = function (location) { + return InlineUtils.isRtl(getElement(location)) === false; + }; + var readLocation = function (isInlineTarget, rootNode, pos) { + var location = LazyEvaluator.evaluateUntil([ + before$4, + start$1, + end, + after$3 + ], [ + isInlineTarget, + rootNode, + pos + ]); + return location.filter(isValidLocation); + }; + var getElement = function (location) { + return location.fold(identity, identity, identity, identity); + }; + var getName = function (location) { + return location.fold(constant('before'), constant('start'), constant('end'), constant('after')); + }; + var outside = function (location) { + return location.fold(Location.before, Location.before, Location.after, Location.after); + }; + var inside = function (location) { + return location.fold(Location.start, Location.start, Location.end, Location.end); + }; + var isEq$5 = function (location1, location2) { + return getName(location1) === getName(location2) && getElement(location1) === getElement(location2); + }; + var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) { + return liftN([ + InlineUtils.findRootInline(isInlineTarget, rootNode, from), + InlineUtils.findRootInline(isInlineTarget, rootNode, to) + ], function (fromInline, toInline) { + if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) { + return Location.after(forward ? fromInline : toInline); + } else { + return location; + } + }).getOr(location); + }; + var skipNoMovement = function (fromLocation, toLocation) { + return fromLocation.fold(constant(true), function (fromLocation) { + return !isEq$5(fromLocation, toLocation); + }); + }; + var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) { + var from = InlineUtils.normalizePosition(forward, pos); + var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.normalizePosition, forward)); + var location = to.fold(function () { + return fromLocation.map(outside); + }, function (to) { + return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation)); + }); + return location.filter(isValidLocation); + }; + var findLocationSimple = function (forward, location) { + if (forward) { + return location.fold(compose(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none); + } else { + return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end)); + } + }; + var findLocation = function (forward, isInlineTarget, rootNode, pos) { + var from = InlineUtils.normalizePosition(forward, pos); + var fromLocation = readLocation(isInlineTarget, rootNode, from); + return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () { + return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos); + }); + }; + var BoundaryLocation = { + readLocation: readLocation, + findLocation: findLocation, + prevLocation: curry(findLocation, false), + nextLocation: curry(findLocation, true), + getElement: getElement, + outside: outside, + inside: inside + }; + + var hasSelectionModifyApi = function (editor) { + return isFunction(editor.selection.getSel().modify); + }; + var moveRel = function (forward, selection, pos) { + var delta = forward ? 1 : -1; + selection.setRng(CaretPosition$1(pos.container(), pos.offset() + delta).toRange()); + selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word'); + return true; + }; + var moveByWord = function (forward, editor) { + var rng = editor.selection.getRng(); + var pos = forward ? CaretPosition$1.fromRangeEnd(rng) : CaretPosition$1.fromRangeStart(rng); + if (!hasSelectionModifyApi(editor)) { + return false; + } else if (forward && isBeforeInline(pos)) { + return moveRel(true, editor.selection, pos); + } else if (!forward && isAfterInline(pos)) { + return moveRel(false, editor.selection, pos); + } else { + return false; + } + }; + var WordSelection = { + hasSelectionModifyApi: hasSelectionModifyApi, + moveByWord: moveByWord + }; + + var setCaretPosition = function (editor, pos) { + var rng = editor.dom.createRng(); + rng.setStart(pos.container(), pos.offset()); + rng.setEnd(pos.container(), pos.offset()); + editor.selection.setRng(rng); + }; + var isFeatureEnabled = function (editor) { + return editor.settings.inline_boundaries !== false; + }; + var setSelected = function (state, elm) { + if (state) { + elm.setAttribute('data-mce-selected', 'inline-boundary'); + } else { + elm.removeAttribute('data-mce-selected'); + } + }; + var renderCaretLocation = function (editor, caret, location) { + return BoundaryCaret.renderCaret(caret, location).map(function (pos) { + setCaretPosition(editor, pos); + return location; + }); + }; + var findLocation$1 = function (editor, caret, forward) { + var rootNode = editor.getBody(); + var from = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + var isInlineTarget = curry(InlineUtils.isInlineTarget, editor); + var location = BoundaryLocation.findLocation(forward, isInlineTarget, rootNode, from); + return location.bind(function (location) { + return renderCaretLocation(editor, caret, location); + }); + }; + var toggleInlines = function (isInlineTarget, dom, elms) { + var selectedInlines = filter(dom.select('*[data-mce-selected="inline-boundary"]'), isInlineTarget); + var targetInlines = filter(elms, isInlineTarget); + each(difference(selectedInlines, targetInlines), curry(setSelected, false)); + each(difference(targetInlines, selectedInlines), curry(setSelected, true)); + }; + var safeRemoveCaretContainer = function (editor, caret) { + if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) { + var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) { + setCaretPosition(editor, CaretContainerRemove.removeAndReposition(caret.get(), pos)); + caret.set(null); + } + } + }; + var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) { + if (editor.selection.isCollapsed()) { + var inlines = filter(elms, isInlineTarget); + each(inlines, function (inline) { + var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) { + return renderCaretLocation(editor, caret, location); + }); + }); + } + }; + var move$1 = function (editor, caret, forward) { + return function () { + return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false; + }; + }; + var moveWord = function (forward, editor, caret) { + return function () { + return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false; + }; + }; + var setupSelectedState = function (editor) { + var caret = Cell(null); + var isInlineTarget = curry(InlineUtils.isInlineTarget, editor); + editor.on('NodeChange', function (e) { + if (isFeatureEnabled(editor)) { + toggleInlines(isInlineTarget, editor.dom, e.parents); + safeRemoveCaretContainer(editor, caret); + renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents); + } + }); + return caret; + }; + var moveNextWord = curry(moveWord, true); + var movePrevWord = curry(moveWord, false); + var BoundarySelection = { + move: move$1, + moveNextWord: moveNextWord, + movePrevWord: movePrevWord, + setupSelectedState: setupSelectedState, + setCaretPosition: setCaretPosition + }; + + var BreakType; + (function (BreakType) { + BreakType[BreakType['Br'] = 0] = 'Br'; + BreakType[BreakType['Block'] = 1] = 'Block'; + BreakType[BreakType['Wrap'] = 2] = 'Wrap'; + BreakType[BreakType['Eol'] = 3] = 'Eol'; + }(BreakType || (BreakType = {}))); + var flip = function (direction, positions) { + return direction === HDirection.Backwards ? positions.reverse() : positions; + }; + var walk$3 = function (direction, caretWalker, pos) { + return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos); + }; + var getBreakType = function (scope, direction, currentPos, nextPos) { + if (NodeType.isBr(nextPos.getNode(direction === HDirection.Forwards))) { + return BreakType.Br; + } else if (isInSameBlock(currentPos, nextPos) === false) { + return BreakType.Block; + } else { + return BreakType.Wrap; + } + }; + var getPositionsUntil = function (predicate, direction, scope, start) { + var caretWalker = CaretWalker(scope); + var currentPos = start, nextPos; + var positions = []; + while (currentPos) { + nextPos = walk$3(direction, caretWalker, currentPos); + if (!nextPos) { + break; + } + if (NodeType.isBr(nextPos.getNode(false))) { + if (direction === HDirection.Forwards) { + return { + positions: flip(direction, positions).concat([nextPos]), + breakType: BreakType.Br, + breakAt: Option.some(nextPos) + }; + } else { + return { + positions: flip(direction, positions), + breakType: BreakType.Br, + breakAt: Option.some(nextPos) + }; + } + } + if (!nextPos.isVisible()) { + currentPos = nextPos; + continue; + } + if (predicate(currentPos, nextPos)) { + var breakType = getBreakType(scope, direction, currentPos, nextPos); + return { + positions: flip(direction, positions), + breakType: breakType, + breakAt: Option.some(nextPos) + }; + } + positions.push(nextPos); + currentPos = nextPos; + } + return { + positions: flip(direction, positions), + breakType: BreakType.Eol, + breakAt: Option.none() + }; + }; + var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) { + return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) { + var positions = getPositionsUntilBreak(scope, pos).positions; + return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions); + }).getOr([]); + }; + var findClosestHorizontalPositionFromPoint = function (positions, x) { + return foldl(positions, function (acc, newPos) { + return acc.fold(function () { + return Option.some(newPos); + }, function (lastPos) { + return liftN([ + head(lastPos.getClientRects()), + head(newPos.getClientRects()) + ], function (lastRect, newRect) { + var lastDist = Math.abs(x - lastRect.left); + var newDist = Math.abs(x - newRect.left); + return newDist <= lastDist ? newPos : lastPos; + }).or(acc); + }); + }, Option.none()); + }; + var findClosestHorizontalPosition = function (positions, pos) { + return head(pos.getClientRects()).bind(function (targetRect) { + return findClosestHorizontalPositionFromPoint(positions, targetRect.left); + }); + }; + var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1); + var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1); + var isAtFirstLine = function (scope, pos) { + return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone(); + }; + var isAtLastLine = function (scope, pos) { + return getPositionsUntilNextLine(scope, pos).breakAt.isNone(); + }; + var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine); + var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine); + var getFirstLinePositions = function (scope) { + return CaretFinder.firstPositionIn(scope).map(function (pos) { + return [pos].concat(getPositionsUntilNextLine(scope, pos).positions); + }).getOr([]); + }; + var getLastLinePositions = function (scope) { + return CaretFinder.lastPositionIn(scope).map(function (pos) { + return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos); + }).getOr([]); + }; + + var isContentEditableFalse$b = NodeType.isContentEditableFalse; + var getSelectedNode$1 = getSelectedNode; + var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) { + var forwards = direction === HDirection.Forwards; + var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse : isAfterContentEditableFalse; + if (!range.collapsed) { + var node = getSelectedNode$1(range); + if (isContentEditableFalse$b(node)) { + return showCaret(direction, editor, node, direction === HDirection.Backwards, true); + } + } + var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range); + var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range); + if (isBeforeContentEditableFalseFn(caretPosition)) { + return selectNode(editor, caretPosition.getNode(!forwards)); + } + var nextCaretPosition = InlineUtils.normalizePosition(forwards, getNextPosFn(caretPosition)); + if (!nextCaretPosition) { + if (rangeIsInContainerBlock) { + return range; + } + return null; + } + if (isBeforeContentEditableFalseFn(nextCaretPosition)) { + return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, true); + } + var peekCaretPosition = getNextPosFn(nextCaretPosition); + if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) { + if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) { + return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true); + } + } + if (rangeIsInContainerBlock) { + return renderRangeCaret(editor, nextCaretPosition.toRange(), true); + } + return null; + }; + var moveToCeFalseVertically = function (direction, editor, walkerFn, range) { + var caretPosition, linePositions, nextLinePositions; + var closestNextLineRect, caretClientRect, clientX; + var dist1, dist2, contentEditableFalseNode; + contentEditableFalseNode = getSelectedNode$1(range); + caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range); + linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition); + nextLinePositions = filter(linePositions, isLine(1)); + caretClientRect = ArrUtils.last(caretPosition.getClientRects()); + if (isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition)) { + contentEditableFalseNode = caretPosition.getNode(); + } + if (isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition)) { + contentEditableFalseNode = caretPosition.getNode(true); + } + if (!caretClientRect) { + return null; + } + clientX = caretClientRect.left; + closestNextLineRect = findClosestClientRect(nextLinePositions, clientX); + if (closestNextLineRect) { + if (isContentEditableFalse$b(closestNextLineRect.node)) { + dist1 = Math.abs(clientX - closestNextLineRect.left); + dist2 = Math.abs(clientX - closestNextLineRect.right); + return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true); + } + } + if (contentEditableFalseNode) { + var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode); + closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX); + if (closestNextLineRect) { + return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true); + } + closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0))); + if (closestNextLineRect) { + return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true); + } + } + }; + var createTextBlock = function (editor) { + var textBlock = editor.dom.create(Settings.getForcedRootBlock(editor)); + if (!Env.ie || Env.ie >= 11) { + textBlock.innerHTML = '
'; + } + return textBlock; + }; + var exitPreBlock = function (editor, direction, range) { + var pre, caretPos, newBlock; + var caretWalker = CaretWalker(editor.getBody()); + var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next); + var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev); + if (range.collapsed && editor.settings.forced_root_block) { + pre = editor.dom.getParent(range.startContainer, 'PRE'); + if (!pre) { + return; + } + if (direction === 1) { + caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range)); + } else { + caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range)); + } + if (!caretPos) { + newBlock = createTextBlock(editor); + if (direction === 1) { + editor.$(pre).after(newBlock); + } else { + editor.$(pre).before(newBlock); + } + editor.selection.select(newBlock, true); + editor.selection.collapse(); + } + } + }; + var getHorizontalRange = function (editor, forward) { + var caretWalker = CaretWalker(editor.getBody()); + var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next); + var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev); + var newRange; + var direction = forward ? HDirection.Forwards : HDirection.Backwards; + var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition; + var range = editor.selection.getRng(); + newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range); + if (newRange) { + return newRange; + } + newRange = exitPreBlock(editor, direction, range); + if (newRange) { + return newRange; + } + return null; + }; + var getVerticalRange = function (editor, down) { + var newRange; + var direction = down ? 1 : -1; + var walkerFn = down ? downUntil : upUntil; + var range = editor.selection.getRng(); + newRange = moveToCeFalseVertically(direction, editor, walkerFn, range); + if (newRange) { + return newRange; + } + newRange = exitPreBlock(editor, direction, range); + if (newRange) { + return newRange; + } + return null; + }; + var moveH = function (editor, forward) { + return function () { + var newRng = getHorizontalRange(editor, forward); + if (newRng) { + editor.selection.setRng(newRng); + return true; + } else { + return false; + } + }; + }; + var moveV = function (editor, down) { + return function () { + var newRng = getVerticalRange(editor, down); + if (newRng) { + editor.selection.setRng(newRng); + return true; + } else { + return false; + } + }; + }; + var isCefPosition = function (forward) { + return function (pos) { + return forward ? isAfterContentEditableFalse(pos) : isBeforeContentEditableFalse(pos); + }; + }; + var moveToLineEndPoint = function (editor, forward) { + return function () { + var from = forward ? CaretPosition$1.fromRangeEnd(editor.selection.getRng()) : CaretPosition$1.fromRangeStart(editor.selection.getRng()); + var result = forward ? getPositionsUntilNextLine(editor.getBody(), from) : getPositionsUntilPreviousLine(editor.getBody(), from); + var to = forward ? last(result.positions) : head(result.positions); + return to.filter(isCefPosition(forward)).fold(constant(false), function (pos) { + editor.selection.setRng(pos.toRange()); + return true; + }); + }; + }; + + var deflate = function (rect, delta) { + return { + left: rect.left - delta, + top: rect.top - delta, + right: rect.right + delta * 2, + bottom: rect.bottom + delta * 2, + width: rect.width + delta, + height: rect.height + delta + }; + }; + var getCorners = function (getYAxisValue, tds) { + return bind(tds, function (td) { + var rect = deflate(clone$1(td.getBoundingClientRect()), -1); + return [ + { + x: rect.left, + y: getYAxisValue(rect), + cell: td + }, + { + x: rect.right, + y: getYAxisValue(rect), + cell: td + } + ]; + }); + }; + var findClosestCorner = function (corners, x, y) { + return foldl(corners, function (acc, newCorner) { + return acc.fold(function () { + return Option.some(newCorner); + }, function (oldCorner) { + var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y)); + var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y)); + return Option.some(newDist < oldDist ? newCorner : oldCorner); + }); + }, Option.none()); + }; + var getClosestCell = function (getYAxisValue, isTargetCorner, table, x, y) { + var cells = descendants$1(Element.fromDom(table), 'td,th,caption').map(function (e) { + return e.dom(); + }); + var corners = filter(getCorners(getYAxisValue, cells), function (corner) { + return isTargetCorner(corner, y); + }); + return findClosestCorner(corners, x, y).map(function (corner) { + return corner.cell; + }); + }; + var getBottomValue = function (rect) { + return rect.bottom; + }; + var getTopValue = function (rect) { + return rect.top; + }; + var isAbove$1 = function (corner, y) { + return corner.y < y; + }; + var isBelow$1 = function (corner, y) { + return corner.y > y; + }; + var getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove$1); + var getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow$1); + var findClosestPositionInAboveCell = function (table, pos) { + return head(pos.getClientRects()).bind(function (rect) { + return getClosestCellAbove(table, rect.left, rect.top); + }).bind(function (cell) { + return findClosestHorizontalPosition(getLastLinePositions(cell), pos); + }); + }; + var findClosestPositionInBelowCell = function (table, pos) { + return last(pos.getClientRects()).bind(function (rect) { + return getClosestCellBelow(table, rect.left, rect.top); + }).bind(function (cell) { + return findClosestHorizontalPosition(getFirstLinePositions(cell), pos); + }); + }; + + var moveToRange = function (editor, rng) { + editor.selection.setRng(rng); + ScrollIntoView.scrollRangeIntoView(editor, rng); + }; + var hasNextBreak = function (getPositionsUntil, scope, lineInfo) { + return lineInfo.breakAt.map(function (breakPos) { + return getPositionsUntil(scope, breakPos).breakAt.isSome(); + }).getOr(false); + }; + var startsWithWrapBreak = function (lineInfo) { + return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0; + }; + var startsWithBrBreak = function (lineInfo) { + return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1; + }; + var isAtTableCellLine = function (getPositionsUntil, scope, pos) { + var lineInfo = getPositionsUntil(scope, pos); + if (startsWithWrapBreak(lineInfo) || !NodeType.isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) { + return !hasNextBreak(getPositionsUntil, scope, lineInfo); + } else { + return lineInfo.breakAt.isNone(); + } + }; + var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine); + var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine); + var isCaretAtStartOrEndOfTable = function (forward, rng, table) { + var caretPos = CaretPosition$1.fromRangeStart(rng); + return CaretFinder.positionIn(!forward, table).map(function (pos) { + return pos.isEqual(caretPos); + }).getOr(false); + }; + var navigateHorizontally = function (editor, forward, table, td) { + var rng = editor.selection.getRng(); + var direction = forward ? 1 : -1; + if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) { + var newRng = showCaret(direction, editor, table, !forward, true); + moveToRange(editor, newRng); + return true; + } + return false; + }; + var getClosestAbovePosition = function (root, table, start) { + return findClosestPositionInAboveCell(table, start).orThunk(function () { + return head(start.getClientRects()).bind(function (rect) { + return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition$1.before(table)), rect.left); + }); + }).getOr(CaretPosition$1.before(table)); + }; + var getClosestBelowPosition = function (root, table, start) { + return findClosestPositionInBelowCell(table, start).orThunk(function () { + return head(start.getClientRects()).bind(function (rect) { + return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition$1.after(table)), rect.left); + }); + }).getOr(CaretPosition$1.after(table)); + }; + var getTable = function (previous, pos) { + var node = pos.getNode(previous); + return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none(); + }; + var renderBlock = function (down, editor, table, pos) { + var forcedRootBlock = Settings.getForcedRootBlock(editor); + if (forcedRootBlock) { + editor.undoManager.transact(function () { + var element = Element.fromTag(forcedRootBlock); + setAll(element, Settings.getForcedRootBlockAttrs(editor)); + append(element, Element.fromTag('br')); + if (down) { + after(Element.fromDom(table), element); + } else { + before(Element.fromDom(table), element); + } + var rng = editor.dom.createRng(); + rng.setStart(element.dom(), 0); + rng.setEnd(element.dom(), 0); + moveToRange(editor, rng); + }); + } else { + moveToRange(editor, pos.toRange()); + } + }; + var moveCaret = function (editor, down, pos) { + var table = down ? getTable(true, pos) : getTable(false, pos); + var last = down === false; + table.fold(function () { + return moveToRange(editor, pos.toRange()); + }, function (table) { + return CaretFinder.positionIn(last, editor.getBody()).filter(function (lastPos) { + return lastPos.isEqual(pos); + }).fold(function () { + return moveToRange(editor, pos.toRange()); + }, function (_) { + return renderBlock(down, editor, table, pos); + }); + }); + }; + var navigateVertically = function (editor, down, table, td) { + var rng = editor.selection.getRng(); + var pos = CaretPosition$1.fromRangeStart(rng); + var root = editor.getBody(); + if (!down && isAtFirstTableCellLine(td, pos)) { + var newPos = getClosestAbovePosition(root, table, pos); + moveCaret(editor, down, newPos); + return true; + } else if (down && isAtLastTableCellLine(td, pos)) { + var newPos = getClosestBelowPosition(root, table, pos); + moveCaret(editor, down, newPos); + return true; + } else { + return false; + } + }; + var moveH$1 = function (editor, forward) { + return function () { + return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) { + return Option.from(editor.dom.getParent(td, 'table')).map(function (table) { + return navigateHorizontally(editor, forward, table); + }); + }).getOr(false); + }; + }; + var moveV$1 = function (editor, forward) { + return function () { + return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) { + return Option.from(editor.dom.getParent(td, 'table')).map(function (table) { + return navigateVertically(editor, forward, table, td); + }); + }).getOr(false); + }; + }; + + var isTarget = function (node) { + return contains(['figcaption'], name(node)); + }; + var rangeBefore = function (target) { + var rng = domGlobals.document.createRange(); + rng.setStartBefore(target.dom()); + rng.setEndBefore(target.dom()); + return rng; + }; + var insertElement = function (root, elm, forward) { + if (forward) { + append(root, elm); + } else { + prepend(root, elm); + } + }; + var insertBr = function (root, forward) { + var br = Element.fromTag('br'); + insertElement(root, br, forward); + return rangeBefore(br); + }; + var insertBlock$1 = function (root, forward, blockName, attrs) { + var block = Element.fromTag(blockName); + var br = Element.fromTag('br'); + setAll(block, attrs); + append(block, br); + insertElement(root, block, forward); + return rangeBefore(br); + }; + var insertEmptyLine = function (root, rootBlockName, attrs, forward) { + if (rootBlockName === '') { + return insertBr(root, forward); + } else { + return insertBlock$1(root, forward, rootBlockName, attrs); + } + }; + var getClosestTargetBlock = function (pos, root) { + var isRoot = curry(eq, root); + return closest(Element.fromDom(pos.container()), isBlock, isRoot).filter(isTarget); + }; + var isAtFirstOrLastLine = function (root, forward, pos) { + return forward ? isAtLastLine(root.dom(), pos) : isAtFirstLine(root.dom(), pos); + }; + var moveCaretToNewEmptyLine = function (editor, forward) { + var root = Element.fromDom(editor.getBody()); + var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + var rootBlock = Settings.getForcedRootBlock(editor); + var rootBlockAttrs = Settings.getForcedRootBlockAttrs(editor); + return getClosestTargetBlock(pos, root).exists(function () { + if (isAtFirstOrLastLine(root, forward, pos)) { + var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward); + editor.selection.setRng(rng); + return true; + } else { + return false; + } + }); + }; + var moveV$2 = function (editor, forward) { + return function () { + if (editor.selection.isCollapsed()) { + return moveCaretToNewEmptyLine(editor, forward); + } else { + return false; + } + }; + }; + + var defaultPatterns = function (patterns) { + return map(patterns, function (pattern) { + return merge({ + shiftKey: false, + altKey: false, + ctrlKey: false, + metaKey: false, + keyCode: 0, + action: noop + }, pattern); + }); + }; + var matchesEvent = function (pattern, evt) { + return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey; + }; + var match$1 = function (patterns, evt) { + return bind(defaultPatterns(patterns), function (pattern) { + return matchesEvent(pattern, evt) ? [pattern] : []; + }); + }; + var action = function (f) { + var x = []; + for (var _i = 1; _i < arguments.length; _i++) { + x[_i - 1] = arguments[_i]; + } + var args = Array.prototype.slice.call(arguments, 1); + return function () { + return f.apply(null, args); + }; + }; + var execute = function (patterns, evt) { + return find(match$1(patterns, evt), function (pattern) { + return pattern.action(); + }); + }; + var MatchKeys = { + match: match$1, + action: action, + execute: execute + }; + + var executeKeydownOverride = function (editor, caret, evt) { + var os = PlatformDetection$1.detect().os; + MatchKeys.execute([ + { + keyCode: VK.RIGHT, + action: moveH(editor, true) + }, + { + keyCode: VK.LEFT, + action: moveH(editor, false) + }, + { + keyCode: VK.UP, + action: moveV(editor, false) + }, + { + keyCode: VK.DOWN, + action: moveV(editor, true) + }, + { + keyCode: VK.RIGHT, + action: moveH$1(editor, true) + }, + { + keyCode: VK.LEFT, + action: moveH$1(editor, false) + }, + { + keyCode: VK.UP, + action: moveV$1(editor, false) + }, + { + keyCode: VK.DOWN, + action: moveV$1(editor, true) + }, + { + keyCode: VK.RIGHT, + action: BoundarySelection.move(editor, caret, true) + }, + { + keyCode: VK.LEFT, + action: BoundarySelection.move(editor, caret, false) + }, + { + keyCode: VK.RIGHT, + ctrlKey: !os.isOSX(), + altKey: os.isOSX(), + action: BoundarySelection.moveNextWord(editor, caret) + }, + { + keyCode: VK.LEFT, + ctrlKey: !os.isOSX(), + altKey: os.isOSX(), + action: BoundarySelection.movePrevWord(editor, caret) + }, + { + keyCode: VK.UP, + action: moveV$2(editor, false) + }, + { + keyCode: VK.DOWN, + action: moveV$2(editor, true) + } + ], evt).each(function (_) { + evt.preventDefault(); + }); + }; + var setup$8 = function (editor, caret) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride(editor, caret, evt); + } + }); + }; + var ArrowKeys = { setup: setup$8 }; + + var isBeforeRoot = function (rootNode) { + return function (elm) { + return eq(rootNode, Element.fromDom(elm.dom().parentNode)); + }; + }; + var getParentBlock$1 = function (rootNode, elm) { + return contains$3(rootNode, elm) ? closest(elm, function (element) { + return isTextBlock(element) || isListItem(element); + }, isBeforeRoot(rootNode)) : Option.none(); + }; + var placeCaretInEmptyBody = function (editor) { + var body = editor.getBody(); + var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body; + editor.selection.setCursorLocation(node, 0); + }; + var paddEmptyBody = function (editor) { + if (editor.dom.isEmpty(editor.getBody())) { + editor.setContent(''); + placeCaretInEmptyBody(editor); + } + }; + var willDeleteLastPositionInElement = function (forward, fromPos, elm) { + return liftN([ + CaretFinder.firstPositionIn(elm), + CaretFinder.lastPositionIn(elm) + ], function (firstPos, lastPos) { + var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos); + var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos); + var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos); + if (forward) { + return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) { + return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos); + }).getOr(false); + } else { + return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) { + return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos); + }).getOr(false); + } + }).getOr(true); + }; + var DeleteUtils = { + getParentBlock: getParentBlock$1, + paddEmptyBody: paddEmptyBody, + willDeleteLastPositionInElement: willDeleteLastPositionInElement + }; + + var BlockPosition = Immutable('block', 'position'); + var BlockBoundary = Immutable('from', 'to'); + var getBlockPosition = function (rootNode, pos) { + var rootElm = Element.fromDom(rootNode); + var containerElm = Element.fromDom(pos.container()); + return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) { + return BlockPosition(block, pos); + }); + }; + var isDifferentBlocks = function (blockBoundary) { + return eq(blockBoundary.from().block(), blockBoundary.to().block()) === false; + }; + var hasSameParent = function (blockBoundary) { + return parent(blockBoundary.from().block()).bind(function (parent1) { + return parent(blockBoundary.to().block()).filter(function (parent2) { + return eq(parent1, parent2); + }); + }).isSome(); + }; + var isEditable = function (blockBoundary) { + return NodeType.isContentEditableFalse(blockBoundary.from().block()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block()) === false; + }; + var skipLastBr = function (rootNode, forward, blockPosition) { + if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) { + return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) { + if (lastPositionInBlock.isEqual(blockPosition.position())) { + return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) { + return getBlockPosition(rootNode, to); + }); + } else { + return Option.some(blockPosition); + } + }).getOr(blockPosition); + } else { + return blockPosition; + } + }; + var readFromRange = function (rootNode, forward, rng) { + var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng)); + var toBlockPos = fromBlockPos.bind(function (blockPos) { + return CaretFinder.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) { + return getBlockPosition(rootNode, to).map(function (blockPos) { + return skipLastBr(rootNode, forward, blockPos); + }); + }); + }); + return liftN([ + fromBlockPos, + toBlockPos + ], BlockBoundary).filter(function (blockBoundary) { + return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary); + }); + }; + var read$3 = function (rootNode, forward, rng) { + return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none(); + }; + var BlockMergeBoundary = { read: read$3 }; + + var getChildrenUntilBlockBoundary = function (block) { + var children$1 = children(block); + return findIndex(children$1, isBlock).fold(function () { + return children$1; + }, function (index) { + return children$1.slice(0, index); + }); + }; + var extractChildren = function (block) { + var children = getChildrenUntilBlockBoundary(block); + each(children, remove$1); + return children; + }; + var removeEmptyRoot = function (rootNode, block) { + var parents = Parents.parentsAndSelf(block, rootNode); + return find(parents.reverse(), Empty.isEmpty).each(remove$1); + }; + var isEmptyBefore = function (el) { + return filter(prevSiblings(el), function (el) { + return !Empty.isEmpty(el); + }).length === 0; + }; + var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) { + if (Empty.isEmpty(toBlock)) { + PaddingBr.fillWithPaddingBr(toBlock); + return CaretFinder.firstPositionIn(toBlock.dom()); + } + if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) { + before(insertionPoint, Element.fromTag('br')); + } + var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom())); + each(extractChildren(fromBlock), function (child) { + before(insertionPoint, child); + }); + removeEmptyRoot(rootNode, fromBlock); + return position; + }; + var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) { + if (Empty.isEmpty(toBlock)) { + remove$1(toBlock); + if (Empty.isEmpty(fromBlock)) { + PaddingBr.fillWithPaddingBr(fromBlock); + } + return CaretFinder.firstPositionIn(fromBlock.dom()); + } + var position = CaretFinder.lastPositionIn(toBlock.dom()); + each(extractChildren(fromBlock), function (child) { + append(toBlock, child); + }); + removeEmptyRoot(rootNode, fromBlock); + return position; + }; + var findInsertionPoint = function (toBlock, block) { + var parentsAndSelf = Parents.parentsAndSelf(block, toBlock); + return Option.from(parentsAndSelf[parentsAndSelf.length - 1]); + }; + var getInsertionPoint = function (fromBlock, toBlock) { + return contains$3(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none(); + }; + var trimBr = function (first, block) { + CaretFinder.positionIn(first, block.dom()).map(function (position) { + return position.getNode(); + }).map(Element.fromDom).filter(isBr$1).each(remove$1); + }; + var mergeBlockInto = function (rootNode, fromBlock, toBlock) { + trimBr(true, fromBlock); + trimBr(false, toBlock); + return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock)); + }; + var mergeBlocks = function (rootNode, forward, block1, block2) { + return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2); + }; + var MergeBlocks = { mergeBlocks: mergeBlocks }; + + var backspaceDelete = function (editor, forward) { + var position; + var rootNode = Element.fromDom(editor.getBody()); + position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) { + return MergeBlocks.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block()); + }); + position.each(function (pos) { + editor.selection.setRng(pos.toRange()); + }); + return position.isSome(); + }; + var BlockBoundaryDelete = { backspaceDelete: backspaceDelete }; + + var deleteRangeMergeBlocks = function (rootNode, selection) { + var rng = selection.getRng(); + return liftN([ + DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)), + DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer)) + ], function (block1, block2) { + if (eq(block1, block2) === false) { + rng.deleteContents(); + MergeBlocks.mergeBlocks(rootNode, true, block1, block2).each(function (pos) { + selection.setRng(pos.toRange()); + }); + return true; + } else { + return false; + } + }).getOr(false); + }; + var isRawNodeInTable = function (root, rawNode) { + var node = Element.fromDom(rawNode); + var isRoot = curry(eq, root); + return ancestor(node, isTableCell, isRoot).isSome(); + }; + var isSelectionInTable = function (root, rng) { + return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer); + }; + var isEverythingSelected = function (root, rng) { + var noPrevious = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone(); + var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone(); + return !isSelectionInTable(root, rng) && noPrevious && noNext; + }; + var emptyEditor = function (editor) { + editor.setContent(''); + editor.selection.setCursorLocation(); + return true; + }; + var deleteRange = function (editor) { + var rootNode = Element.fromDom(editor.getBody()); + var rng = editor.selection.getRng(); + return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection); + }; + var backspaceDelete$1 = function (editor, forward) { + return editor.selection.isCollapsed() ? false : deleteRange(editor); + }; + var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 }; + + var isBr$5 = function (pos) { + return getElementFromPosition(pos).exists(isBr$1); + }; + var findBr = function (forward, root, pos) { + var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock); + var scope = head(parentBlocks).getOr(root); + return CaretFinder.fromPosition(forward, scope.dom(), pos).filter(isBr$5); + }; + var isBeforeBr = function (root, pos) { + return getElementFromPosition(pos).exists(isBr$1) || findBr(true, root, pos).isSome(); + }; + var isAfterBr = function (root, pos) { + return getElementFromPrevPosition(pos).exists(isBr$1) || findBr(false, root, pos).isSome(); + }; + var findPreviousBr = curry(findBr, false); + var findNextBr = curry(findBr, true); + + var isCompoundElement = function (node) { + return isTableCell(Element.fromDom(node)) || isListItem(Element.fromDom(node)); + }; + var DeleteAction = Adt.generate([ + { remove: ['element'] }, + { moveToElement: ['element'] }, + { moveToPosition: ['position'] } + ]); + var isAtContentEditableBlockCaret = function (forward, from) { + var elm = from.getNode(forward === false); + var caretLocation = forward ? 'after' : 'before'; + return NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation; + }; + var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) { + var inSameBlock = function (elm) { + return isInline(Element.fromDom(elm)) && !isInSameBlock(from, to, root); + }; + return getRelativeCefElm(!forward, from).fold(function () { + return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock); + }, inSameBlock); + }; + var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) { + var toCefElm = to.getNode(forward === false); + return DeleteUtils.getParentBlock(Element.fromDom(root), Element.fromDom(from.getNode())).map(function (blockElm) { + return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm); + }).orThunk(function () { + return Option.some(DeleteAction.moveToElement(toCefElm)); + }); + }; + var findCefPosition = function (root, forward, from) { + return CaretFinder.fromPosition(forward, root, from).bind(function (to) { + if (isCompoundElement(to.getNode())) { + return Option.none(); + } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) { + return Option.none(); + } else if (forward && NodeType.isContentEditableFalse(to.getNode())) { + return deleteEmptyBlockOrMoveToCef(root, forward, from, to); + } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) { + return deleteEmptyBlockOrMoveToCef(root, forward, from, to); + } else if (forward && isAfterContentEditableFalse(from)) { + return Option.some(DeleteAction.moveToPosition(to)); + } else if (forward === false && isBeforeContentEditableFalse(from)) { + return Option.some(DeleteAction.moveToPosition(to)); + } else { + return Option.none(); + } + }); + }; + var getContentEditableBlockAction = function (forward, elm) { + if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) { + return Option.some(DeleteAction.moveToElement(elm.nextSibling)); + } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) { + return Option.some(DeleteAction.moveToElement(elm.previousSibling)); + } else { + return Option.none(); + } + }; + var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) { + return deleteAction.fold(function (elm) { + return Option.some(DeleteAction.remove(elm)); + }, function (elm) { + return Option.some(DeleteAction.moveToElement(elm)); + }, function (to) { + if (isInSameBlock(from, to, root)) { + return Option.none(); + } else { + return Option.some(DeleteAction.moveToPosition(to)); + } + }); + }; + var getContentEditableAction = function (root, forward, from) { + if (isAtContentEditableBlockCaret(forward, from)) { + return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () { + return findCefPosition(root, forward, from); + }, Option.some); + } else { + return findCefPosition(root, forward, from).bind(function (deleteAction) { + return skipMoveToActionFromInlineCefToContent(root, from, deleteAction); + }); + } + }; + var read$4 = function (root, forward, rng) { + var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng); + var from = CaretPosition$1.fromRangeStart(normalizedRange); + var rootElement = Element.fromDom(root); + if (forward === false && isAfterContentEditableFalse(from)) { + return Option.some(DeleteAction.remove(from.getNode(true))); + } else if (forward && isBeforeContentEditableFalse(from)) { + return Option.some(DeleteAction.remove(from.getNode())); + } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) { + return findPreviousBr(rootElement, from).map(function (br) { + return DeleteAction.remove(br.getNode()); + }); + } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr(rootElement, from)) { + return findNextBr(rootElement, from).map(function (br) { + return DeleteAction.remove(br.getNode()); + }); + } else { + return getContentEditableAction(root, forward, from); + } + }; + + var deleteElement$1 = function (editor, forward) { + return function (element) { + editor._selectionOverrides.hideFakeCaret(); + DeleteElement.deleteElement(editor, forward, Element.fromDom(element)); + return true; + }; + }; + var moveToElement = function (editor, forward) { + return function (element) { + var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element); + editor.selection.setRng(pos.toRange()); + return true; + }; + }; + var moveToPosition = function (editor) { + return function (pos) { + editor.selection.setRng(pos.toRange()); + return true; + }; + }; + var backspaceDeleteCaret = function (editor, forward) { + var result = read$4(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) { + return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor)); + }); + return result.getOr(false); + }; + var deleteOffscreenSelection = function (rootElement) { + each(descendants$1(rootElement, '.mce-offscreen-selection'), remove$1); + }; + var backspaceDeleteRange = function (editor, forward) { + var selectedElement = editor.selection.getNode(); + if (NodeType.isContentEditableFalse(selectedElement)) { + deleteOffscreenSelection(Element.fromDom(editor.getBody())); + DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode())); + DeleteUtils.paddEmptyBody(editor); + return true; + } else { + return false; + } + }; + var getContentEditableRoot$2 = function (root, node) { + while (node && node !== root) { + if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var paddEmptyElement = function (editor) { + var br; + var ceRoot = getContentEditableRoot$2(editor.getBody(), editor.selection.getNode()); + if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) { + br = editor.dom.create('br', { 'data-mce-bogus': '1' }); + editor.dom.setHTML(ceRoot, ''); + ceRoot.appendChild(br); + editor.selection.setRng(CaretPosition$1.before(br).toRange()); + } + return true; + }; + var backspaceDelete$2 = function (editor, forward) { + if (editor.selection.isCollapsed()) { + return backspaceDeleteCaret(editor, forward); + } else { + return backspaceDeleteRange(editor, forward); + } + }; + var CefDelete = { + backspaceDelete: backspaceDelete$2, + paddEmptyElement: paddEmptyElement + }; + + var trimEmptyTextNode$1 = function (dom, node) { + if (NodeType.isText(node) && node.data.length === 0) { + dom.remove(node); + } + }; + var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) { + var caretRange = showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true); + if (range.collapsed) { + var deleteRange = range.cloneRange(); + if (forward) { + deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset); + } else { + deleteRange.setStart(caretRange.endContainer, caretRange.endOffset); + } + deleteRange.deleteContents(); + } else { + range.deleteContents(); + } + editor.selection.setRng(caretRange); + trimEmptyTextNode$1(editor.dom, node); + return true; + }; + var deleteCefBoundaryText = function (editor, forward) { + var range = editor.selection.getRng(); + if (!NodeType.isText(range.commonAncestorContainer)) { + return false; + } + var direction = forward ? HDirection.Forwards : HDirection.Backwards; + var caretWalker = CaretWalker(editor.getBody()); + var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next); + var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev); + var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition; + var isBeforeContentEditableFalseFn = forward ? isBeforeContentEditableFalse : isAfterContentEditableFalse; + var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range); + var nextCaretPosition = InlineUtils.normalizePosition(forward, getNextPosFn(caretPosition)); + if (!nextCaretPosition) { + return false; + } else if (isBeforeContentEditableFalseFn(nextCaretPosition)) { + return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition); + } + var peekCaretPosition = getNextPosFn(nextCaretPosition); + if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) { + if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) { + return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition); + } + } + return false; + }; + var backspaceDelete$3 = function (editor, forward) { + return deleteCefBoundaryText(editor, forward); + }; + var CefBoundaryDelete = { backspaceDelete: backspaceDelete$3 }; + + var isFeatureEnabled$1 = function (editor) { + return editor.settings.inline_boundaries !== false; + }; + var rangeFromPositions = function (from, to) { + var range = domGlobals.document.createRange(); + range.setStart(from.container(), from.offset()); + range.setEnd(to.container(), to.offset()); + return range; + }; + var hasOnlyTwoOrLessPositionsLeft = function (elm) { + return liftN([ + CaretFinder.firstPositionIn(elm), + CaretFinder.lastPositionIn(elm) + ], function (firstPos, lastPos) { + var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos); + var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos); + return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) { + return pos.isEqual(normalizedLastPos); + }).getOr(true); + }).getOr(true); + }; + var setCaretLocation = function (editor, caret) { + return function (location) { + return BoundaryCaret.renderCaret(caret, location).map(function (pos) { + BoundarySelection.setCaretPosition(editor, pos); + return true; + }).getOr(false); + }; + }; + var deleteFromTo = function (editor, caret, from, to) { + var rootNode = editor.getBody(); + var isInlineTarget = curry(InlineUtils.isInlineTarget, editor); + editor.undoManager.ignore(function () { + editor.selection.setRng(rangeFromPositions(from, to)); + editor.execCommand('Delete'); + BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.inside).map(setCaretLocation(editor, caret)); + }); + editor.nodeChanged(); + }; + var rescope$1 = function (rootNode, node) { + var parentBlock = getParentBlock(node, rootNode); + return parentBlock ? parentBlock : rootNode; + }; + var backspaceDeleteCollapsed = function (editor, caret, forward, from) { + var rootNode = rescope$1(editor.getBody(), from.container()); + var isInlineTarget = curry(InlineUtils.isInlineTarget, editor); + var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from); + return fromLocation.bind(function (location) { + if (forward) { + return location.fold(constant(Option.some(BoundaryLocation.inside(location))), Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none); + } else { + return location.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none, constant(Option.some(BoundaryLocation.inside(location)))); + } + }).map(setCaretLocation(editor, caret)).getOrThunk(function () { + var toPosition = CaretFinder.navigate(forward, rootNode, from); + var toLocation = toPosition.bind(function (pos) { + return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos); + }); + if (fromLocation.isSome() && toLocation.isSome()) { + return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) { + if (hasOnlyTwoOrLessPositionsLeft(elm)) { + DeleteElement.deleteElement(editor, forward, Element.fromDom(elm)); + return true; + } else { + return false; + } + }).getOr(false); + } else { + return toLocation.bind(function (_) { + return toPosition.map(function (to) { + if (forward) { + deleteFromTo(editor, caret, from, to); + } else { + deleteFromTo(editor, caret, to, from); + } + return true; + }); + }).getOr(false); + } + }); + }; + var backspaceDelete$4 = function (editor, caret, forward) { + if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) { + var from = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + return backspaceDeleteCollapsed(editor, caret, forward, from); + } + return false; + }; + var BoundaryDelete = { backspaceDelete: backspaceDelete$4 }; + + var getParentInlines = function (rootElm, startElm) { + var parents = Parents.parentsAndSelf(startElm, rootElm); + return findIndex(parents, isBlock).fold(constant(parents), function (index) { + return parents.slice(0, index); + }); + }; + var hasOnlyOneChild = function (elm) { + return children(elm).length === 1; + }; + var deleteLastPosition = function (forward, editor, target, parentInlines) { + var isFormatElement$1 = curry(isFormatElement, editor); + var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) { + return elm.dom(); + }); + if (formatNodes.length === 0) { + DeleteElement.deleteElement(editor, forward, target); + } else { + var pos = replaceWithCaretFormat(target.dom(), formatNodes); + editor.selection.setRng(pos.toRange()); + } + }; + var deleteCaret = function (editor, forward) { + var rootElm = Element.fromDom(editor.getBody()); + var startElm = Element.fromDom(editor.selection.getStart()); + var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild); + return last(parentInlines).map(function (target) { + var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) { + deleteLastPosition(forward, editor, target, parentInlines); + return true; + } else { + return false; + } + }).getOr(false); + }; + var backspaceDelete$5 = function (editor, forward) { + return editor.selection.isCollapsed() ? deleteCaret(editor, forward) : false; + }; + var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 }; + + var tableCellRng = Immutable('start', 'end'); + var tableSelection = Immutable('rng', 'table', 'cells'); + var deleteAction = Adt.generate([ + { removeTable: ['element'] }, + { emptyCells: ['cells'] } + ]); + var isRootFromElement = function (root) { + return curry(eq, root); + }; + var getClosestCell$1 = function (container, isRoot) { + return closest$1(Element.fromDom(container), 'td,th', isRoot); + }; + var getClosestTable = function (cell, isRoot) { + return ancestor$1(cell, 'table', isRoot); + }; + var isExpandedCellRng = function (cellRng) { + return eq(cellRng.start(), cellRng.end()) === false; + }; + var getTableFromCellRng = function (cellRng, isRoot) { + return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) { + return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) { + return eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none(); + }); + }); + }; + var getTableCells = function (table) { + return descendants$1(table, 'td,th'); + }; + var getCellRangeFromStartTable = function (cellRng, isRoot) { + return getClosestTable(cellRng.start(), isRoot).bind(function (table) { + return last(getTableCells(table)).map(function (endCell) { + return tableCellRng(cellRng.start(), endCell); + }); + }); + }; + var partialSelection = function (isRoot, rng) { + var startCell = getClosestCell$1(rng.startContainer, isRoot); + var endCell = getClosestCell$1(rng.endContainer, isRoot); + return rng.collapsed ? Option.none() : liftN([ + startCell, + endCell + ], tableCellRng).fold(function () { + return startCell.fold(function () { + return endCell.bind(function (endCell) { + return getClosestTable(endCell, isRoot).bind(function (table) { + return head(getTableCells(table)).map(function (startCell) { + return tableCellRng(startCell, endCell); + }); + }); + }); + }, function (startCell) { + return getClosestTable(startCell, isRoot).bind(function (table) { + return last(getTableCells(table)).map(function (endCell) { + return tableCellRng(startCell, endCell); + }); + }); + }); + }, function (cellRng) { + return isWithinSameTable(isRoot, cellRng) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot); + }); + }; + var isWithinSameTable = function (isRoot, cellRng) { + return getTableFromCellRng(cellRng, isRoot).isSome(); + }; + var getCellRng = function (rng, isRoot) { + var startCell = getClosestCell$1(rng.startContainer, isRoot); + var endCell = getClosestCell$1(rng.endContainer, isRoot); + return liftN([ + startCell, + endCell + ], tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) { + return isWithinSameTable(isRoot, cellRng); + }).orThunk(function () { + return partialSelection(isRoot, rng); + }); + }; + var getTableSelectionFromCellRng = function (cellRng, isRoot) { + return getTableFromCellRng(cellRng, isRoot).map(function (table) { + return tableSelection(cellRng, table, getTableCells(table)); + }); + }; + var getTableSelectionFromRng = function (root, rng) { + var isRoot = isRootFromElement(root); + return getCellRng(rng, isRoot).bind(function (cellRng) { + return getTableSelectionFromCellRng(cellRng, isRoot); + }); + }; + var getCellIndex = function (cells, cell) { + return findIndex(cells, function (x) { + return eq(x, cell); + }); + }; + var getSelectedCells = function (tableSelection) { + return liftN([ + getCellIndex(tableSelection.cells(), tableSelection.rng().start()), + getCellIndex(tableSelection.cells(), tableSelection.rng().end()) + ], function (startIndex, endIndex) { + return tableSelection.cells().slice(startIndex, endIndex + 1); + }); + }; + var getAction = function (tableSelection) { + return getSelectedCells(tableSelection).map(function (selected) { + var cells = tableSelection.cells(); + return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table()) : deleteAction.emptyCells(selected); + }); + }; + var getActionFromCells = function (cells) { + return deleteAction.emptyCells(cells); + }; + var getActionFromRange = function (root, rng) { + return getTableSelectionFromRng(root, rng).bind(getAction); + }; + var TableDeleteAction = { + getActionFromRange: getActionFromRange, + getActionFromCells: getActionFromCells + }; + + var emptyCells = function (editor, cells) { + each(cells, PaddingBr.fillWithPaddingBr); + editor.selection.setCursorLocation(cells[0].dom(), 0); + return true; + }; + var deleteTableElement = function (editor, table) { + DeleteElement.deleteElement(editor, false, table); + return true; + }; + var deleteCellRange = function (editor, rootElm, rng) { + return TableDeleteAction.getActionFromRange(rootElm, rng).map(function (action) { + return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor)); + }); + }; + var deleteCaptionRange = function (editor, caption) { + return emptyElement(editor, caption); + }; + var deleteTableRange = function (editor, rootElm, rng, startElm) { + return getParentCaption(rootElm, startElm).fold(function () { + return deleteCellRange(editor, rootElm, rng); + }, function (caption) { + return deleteCaptionRange(editor, caption); + }).getOr(false); + }; + var deleteRange$1 = function (editor, startElm) { + var rootNode = Element.fromDom(editor.getBody()); + var rng = editor.selection.getRng(); + var selectedCells = TableCellSelection.getCellsFromEditor(editor); + return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm); + }; + var getParentCell = function (rootElm, elm) { + return find(Parents.parentsAndSelf(elm, rootElm), isTableCell); + }; + var getParentCaption = function (rootElm, elm) { + return find(Parents.parentsAndSelf(elm, rootElm), function (elm) { + return name(elm) === 'caption'; + }); + }; + var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) { + return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) { + return getParentCell(rootElm, Element.fromDom(to.getNode())).map(function (toCell) { + return eq(toCell, fromCell) === false; + }); + }); + }; + var emptyElement = function (editor, elm) { + PaddingBr.fillWithPaddingBr(elm); + editor.selection.setCursorLocation(elm.dom(), 0); + return Option.some(true); + }; + var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) { + return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) { + return CaretFinder.lastPositionIn(fromCaption.dom()).map(function (last) { + return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first); + }); + }).getOr(true); + }; + var emptyCaretCaption = function (editor, elm) { + return emptyElement(editor, elm); + }; + var validateCaretCaption = function (rootElm, fromCaption, to) { + return getParentCaption(rootElm, Element.fromDom(to.getNode())).map(function (toCaption) { + return eq(toCaption, fromCaption) === false; + }); + }; + var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) { + return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) { + return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to); + }).or(Option.some(true)); + }; + var deleteCaretCells = function (editor, forward, rootElm, startElm) { + var from = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + return getParentCell(rootElm, startElm).bind(function (fromCell) { + return Empty.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from); + }).getOr(false); + }; + var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) { + var from = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + return Empty.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from); + }; + var isNearTable = function (forward, pos) { + return forward ? isBeforeTable(pos) : isAfterTable(pos); + }; + var isBeforeOrAfterTable = function (editor, forward) { + var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + return isNearTable(forward, fromPos) || CaretFinder.fromPosition(forward, editor.getBody(), fromPos).map(function (pos) { + return isNearTable(forward, pos); + }).getOr(false); + }; + var deleteCaret$1 = function (editor, forward, startElm) { + var rootElm = Element.fromDom(editor.getBody()); + return getParentCaption(rootElm, startElm).fold(function () { + return deleteCaretCells(editor, forward, rootElm, startElm) || isBeforeOrAfterTable(editor, forward); + }, function (fromCaption) { + return deleteCaretCaption(editor, forward, rootElm, fromCaption).getOr(false); + }); + }; + var backspaceDelete$6 = function (editor, forward) { + var startElm = Element.fromDom(editor.selection.getStart(true)); + var cells = TableCellSelection.getCellsFromEditor(editor); + return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$1(editor, forward, startElm) : deleteRange$1(editor, startElm); + }; + var TableDelete = { backspaceDelete: backspaceDelete$6 }; + + var deleteCaret$2 = function (editor, forward) { + var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + return CaretFinder.fromPosition(forward, editor.getBody(), fromPos).filter(function (pos) { + return forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos); + }).bind(function (pos) { + return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, pos)); + }).map(function (elm) { + editor.selection.select(elm); + return true; + }).getOr(false); + }; + var backspaceDelete$7 = function (editor, forward) { + return editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : false; + }; + var PageBreakDelete = { backspaceDelete: backspaceDelete$7 }; + + var isEditable$1 = function (target) { + return closest(target, function (elm) { + return NodeType.isContentEditableTrue(elm.dom()) || NodeType.isContentEditableFalse(elm.dom()); + }).exists(function (elm) { + return NodeType.isContentEditableTrue(elm.dom()); + }); + }; + var parseIndentValue = function (value) { + var number = parseInt(value, 10); + return isNaN(number) ? 0 : number; + }; + var getIndentStyleName = function (useMargin, element) { + var indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding'; + var suffix = get$2(element, 'direction') === 'rtl' ? '-right' : '-left'; + return indentStyleName + suffix; + }; + var indentElement = function (dom, command, useMargin, value, unit, element) { + var indentStyleName = getIndentStyleName(useMargin, Element.fromDom(element)); + if (command === 'outdent') { + var styleValue = Math.max(0, parseIndentValue(element.style[indentStyleName]) - value); + dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : ''); + } else { + var styleValue = parseIndentValue(element.style[indentStyleName]) + value + unit; + dom.setStyle(element, indentStyleName, styleValue); + } + }; + var validateBlocks = function (editor, blocks) { + return forall(blocks, function (block) { + var indentStyleName = getIndentStyleName(Settings.shouldIndentUseMargin(editor), block); + var intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0); + var contentEditable = editor.dom.getContentEditable(block.dom()); + return contentEditable !== 'false' && intentValue > 0; + }); + }; + var canOutdent = function (editor) { + var blocks = getBlocksToIndent(editor); + return editor.readonly !== true && (blocks.length > 1 || validateBlocks(editor, blocks)); + }; + var isListComponent = function (el) { + return isList(el) || isListItem(el); + }; + var parentIsListComponent = function (el) { + return parent(el).map(isListComponent).getOr(false); + }; + var getBlocksToIndent = function (editor) { + return filter(map(editor.selection.getSelectedBlocks(), Element.fromDom), function (el) { + return !isListComponent(el) && !parentIsListComponent(el) && isEditable$1(el); + }); + }; + var handle = function (editor, command) { + var dom = editor.dom, selection = editor.selection, formatter = editor.formatter; + var indentation = Settings.getIndentation(editor); + var indentUnit = /[a-z%]+$/i.exec(indentation)[0]; + var indentValue = parseInt(indentation, 10); + var useMargin = Settings.shouldIndentUseMargin(editor); + var forcedRootBlock = Settings.getForcedRootBlock(editor); + if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) { + if (forcedRootBlock === '' && !dom.getParent(selection.getNode(), dom.isBlock)) { + formatter.apply('div'); + } + } + each(getBlocksToIndent(editor), function (block) { + indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom()); + }); + }; + + var navigateIgnoreEmptyTextNodes = function (forward, root, from) { + return CaretFinder.navigateIgnore(forward, root, from, isEmptyText); + }; + var getClosestBlock = function (root, pos) { + return find(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock); + }; + var isAtBeforeAfterBlockBoundary = function (forward, root, pos) { + return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) { + return getClosestBlock(root, pos).fold(function () { + return isInSameBlock(newPos, pos, root.dom()) === false; + }, function (fromBlock) { + return isInSameBlock(newPos, pos, root.dom()) === false && contains$3(fromBlock, Element.fromDom(newPos.container())); + }); + }); + }; + var isAtBlockBoundary = function (forward, root, pos) { + return getClosestBlock(root, pos).fold(function () { + return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) { + return isInSameBlock(newPos, pos, root.dom()) === false; + }); + }, function (parent) { + return navigateIgnoreEmptyTextNodes(forward, parent.dom(), pos).isNone(); + }); + }; + var isAtStartOfBlock = curry(isAtBlockBoundary, false); + var isAtEndOfBlock = curry(isAtBlockBoundary, true); + var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false); + var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true); + + var backspaceDelete$8 = function (editor, _caret, _forward) { + if (editor.selection.isCollapsed() && canOutdent(editor)) { + var dom = editor.dom; + var rng = editor.selection.getRng(); + var pos = CaretPosition$1.fromRangeStart(rng); + var block = Element.fromDom(dom.getParent(rng.startContainer, dom.isBlock)); + if (isAtStartOfBlock(block, pos)) { + handle(editor, 'outdent'); + return true; + } + } + return false; + }; + var Outdent = { backspaceDelete: backspaceDelete$8 }; + + var executeKeydownOverride$1 = function (editor, caret, evt) { + MatchKeys.execute([ + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(Outdent.backspaceDelete, editor, false) + }, + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(CefDelete.backspaceDelete, editor, false) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(CefDelete.backspaceDelete, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, false) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(BoundaryDelete.backspaceDelete, editor, caret, false) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(BoundaryDelete.backspaceDelete, editor, caret, true) + }, + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(TableDelete.backspaceDelete, editor, false) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(TableDelete.backspaceDelete, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(PageBreakDelete.backspaceDelete, editor, false) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(PageBreakDelete.backspaceDelete, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true) + }, + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true) + } + ], evt).each(function (_) { + evt.preventDefault(); + }); + }; + var executeKeyupOverride = function (editor, evt) { + MatchKeys.execute([ + { + keyCode: VK.BACKSPACE, + action: MatchKeys.action(CefDelete.paddEmptyElement, editor) + }, + { + keyCode: VK.DELETE, + action: MatchKeys.action(CefDelete.paddEmptyElement, editor) + } + ], evt); + }; + var setup$9 = function (editor, caret) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride$1(editor, caret, evt); + } + }); + editor.on('keyup', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeyupOverride(editor, evt); + } + }); + }; + var DeleteBackspaceKeys = { setup: setup$9 }; + + var firstNonWhiteSpaceNodeSibling = function (node) { + while (node) { + if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\r\n\s]/.test(node.data)) { + return node; + } + node = node.nextSibling; + } + }; + var moveToCaretPosition = function (editor, root) { + var node, rng, lastNode = root; + var dom = editor.dom; + var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements(); + if (!root) { + return; + } + if (/^(LI|DT|DD)$/.test(root.nodeName)) { + var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild); + if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) { + root.insertBefore(dom.doc.createTextNode('\xA0'), root.firstChild); + } + } + rng = dom.createRng(); + root.normalize(); + if (root.hasChildNodes()) { + var walker = new TreeWalker(root, root); + while (node = walker.current()) { + if (NodeType.isText(node)) { + rng.setStart(node, 0); + rng.setEnd(node, 0); + break; + } + if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) { + rng.setStartBefore(node); + rng.setEndBefore(node); + break; + } + lastNode = node; + node = walker.next(); + } + if (!node) { + rng.setStart(lastNode, 0); + rng.setEnd(lastNode, 0); + } + } else { + if (NodeType.isBr(root)) { + if (root.nextSibling && dom.isBlock(root.nextSibling)) { + rng.setStartBefore(root); + rng.setEndBefore(root); + } else { + rng.setStartAfter(root); + rng.setEndAfter(root); + } + } else { + rng.setStart(root, 0); + rng.setEnd(root, 0); + } + } + editor.selection.setRng(rng); + editor.selection.scrollIntoView(root); + }; + var getEditableRoot = function (dom, node) { + var root = dom.getRoot(); + var parent, editableRoot; + parent = node; + while (parent !== root && dom.getContentEditable(parent) !== 'false') { + if (dom.getContentEditable(parent) === 'true') { + editableRoot = parent; + } + parent = parent.parentNode; + } + return parent !== root ? editableRoot : root; + }; + var getParentBlock$2 = function (editor) { + return Option.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock)); + }; + var getParentBlockName = function (editor) { + return getParentBlock$2(editor).fold(constant(''), function (parentBlock) { + return parentBlock.nodeName.toUpperCase(); + }); + }; + var isListItemParentBlock = function (editor) { + return getParentBlock$2(editor).filter(function (elm) { + return isListItem(Element.fromDom(elm)); + }).isSome(); + }; + var NewLineUtils = { + moveToCaretPosition: moveToCaretPosition, + getEditableRoot: getEditableRoot, + getParentBlock: getParentBlock$2, + getParentBlockName: getParentBlockName, + isListItemParentBlock: isListItemParentBlock + }; + + var hasFirstChild = function (elm, name) { + return elm.firstChild && elm.firstChild.nodeName === name; + }; + var hasParent$1 = function (elm, parentName) { + return elm && elm.parentNode && elm.parentNode.nodeName === parentName; + }; + var isListBlock = function (elm) { + return elm && /^(OL|UL|LI)$/.test(elm.nodeName); + }; + var isNestedList = function (elm) { + return isListBlock(elm) && isListBlock(elm.parentNode); + }; + var getContainerBlock = function (containerBlock) { + var containerBlockParent = containerBlock.parentNode; + if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) { + return containerBlockParent; + } + return containerBlock; + }; + var isFirstOrLastLi = function (containerBlock, parentBlock, first) { + var node = containerBlock[first ? 'firstChild' : 'lastChild']; + while (node) { + if (NodeType.isElement(node)) { + break; + } + node = node[first ? 'nextSibling' : 'previousSibling']; + } + return node === parentBlock; + }; + var insert = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) { + var dom = editor.dom; + var rng = editor.selection.getRng(); + if (containerBlock === editor.getBody()) { + return; + } + if (isNestedList(containerBlock)) { + newBlockName = 'LI'; + } + var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR'); + if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) { + if (hasParent$1(containerBlock, 'LI')) { + dom.insertAfter(newBlock, getContainerBlock(containerBlock)); + } else { + dom.replace(newBlock, containerBlock); + } + } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) { + if (hasParent$1(containerBlock, 'LI')) { + dom.insertAfter(newBlock, getContainerBlock(containerBlock)); + newBlock.appendChild(dom.doc.createTextNode(' ')); + newBlock.appendChild(containerBlock); + } else { + containerBlock.parentNode.insertBefore(newBlock, containerBlock); + } + } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) { + dom.insertAfter(newBlock, getContainerBlock(containerBlock)); + } else { + containerBlock = getContainerBlock(containerBlock); + var tmpRng = rng.cloneRange(); + tmpRng.setStartAfter(parentBlock); + tmpRng.setEndAfter(containerBlock); + var fragment = tmpRng.extractContents(); + if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) { + newBlock = fragment.firstChild; + dom.insertAfter(fragment, containerBlock); + } else { + dom.insertAfter(fragment, containerBlock); + dom.insertAfter(newBlock, containerBlock); + } + } + dom.remove(parentBlock); + NewLineUtils.moveToCaretPosition(editor, newBlock); + }; + var InsertLi = { insert: insert }; + + var trimZwsp = function (fragment) { + each(descendants(Element.fromDom(fragment), isText), function (text) { + var rawNode = text.dom(); + rawNode.nodeValue = Zwsp.trim(rawNode.nodeValue); + }); + }; + var isEmptyAnchor = function (dom, elm) { + return elm && elm.nodeName === 'A' && dom.isEmpty(elm); + }; + var isTableCell$4 = function (node) { + return node && /^(TD|TH|CAPTION)$/.test(node.nodeName); + }; + var emptyBlock = function (elm) { + elm.innerHTML = '
'; + }; + var containerAndSiblingName = function (container, nodeName) { + return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName; + }; + var canSplitBlock = function (dom, node) { + return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true'; + }; + var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) { + var node = block; + var firstChilds = []; + var i; + if (!node) { + return; + } + while (node = node.firstChild) { + if (dom.isBlock(node)) { + return; + } + if (NodeType.isElement(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + firstChilds.push(node); + } + } + i = firstChilds.length; + while (i--) { + node = firstChilds[i]; + if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') { + dom.remove(node); + } else { + if (isEmptyAnchor(dom, node)) { + dom.remove(node); + } + } + } + }; + var normalizeZwspOffset = function (start, container, offset) { + if (NodeType.isText(container) === false) { + return offset; + } else if (start) { + return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset; + } else { + return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.ZWSP ? container.data.length : offset; + } + }; + var includeZwspInRange = function (rng) { + var newRng = rng.cloneRange(); + newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset)); + newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset)); + return newRng; + }; + var trimLeadingLineBreaks = function (node) { + do { + if (NodeType.isText(node)) { + node.nodeValue = node.nodeValue.replace(/^[\r\n]+/, ''); + } + node = node.firstChild; + } while (node); + }; + var getEditableRoot$1 = function (dom, node) { + var root = dom.getRoot(); + var parent, editableRoot; + parent = node; + while (parent !== root && dom.getContentEditable(parent) !== 'false') { + if (dom.getContentEditable(parent) === 'true') { + editableRoot = parent; + } + parent = parent.parentNode; + } + return parent !== root ? editableRoot : root; + }; + var setForcedBlockAttrs = function (editor, node) { + var forcedRootBlockName = Settings.getForcedRootBlock(editor); + if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) { + editor.dom.setAttribs(node, Settings.getForcedRootBlockAttrs(editor)); + } + }; + var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) { + var newBlock, parentBlock, startNode, node, next, rootBlockName; + var blockName = newBlockName || 'P'; + var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container); + parentBlock = dom.getParent(container, dom.isBlock); + if (!parentBlock || !canSplitBlock(dom, parentBlock)) { + parentBlock = parentBlock || editableRoot; + if (parentBlock === editor.getBody() || isTableCell$4(parentBlock)) { + rootBlockName = parentBlock.nodeName.toLowerCase(); + } else { + rootBlockName = parentBlock.parentNode.nodeName.toLowerCase(); + } + if (!parentBlock.hasChildNodes()) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(editor, newBlock); + parentBlock.appendChild(newBlock); + rng.setStart(newBlock, 0); + rng.setEnd(newBlock, 0); + return newBlock; + } + node = container; + while (node.parentNode !== parentBlock) { + node = node.parentNode; + } + while (node && !dom.isBlock(node)) { + startNode = node; + node = node.previousSibling; + } + if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(editor, newBlock); + startNode.parentNode.insertBefore(newBlock, startNode); + node = startNode; + while (node && !dom.isBlock(node)) { + next = node.nextSibling; + newBlock.appendChild(node); + node = next; + } + rng.setStart(container, offset); + rng.setEnd(container, offset); + } + } + return container; + }; + var addBrToBlockIfNeeded = function (dom, block) { + var lastChild; + block.normalize(); + lastChild = block.lastChild; + if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) { + dom.add(block, 'br'); + } + }; + var insert$1 = function (editor, evt) { + var tmpRng, editableRoot, container, offset, parentBlock, shiftKey; + var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer; + var dom = editor.dom; + var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements(); + var rng = editor.selection.getRng(); + var createNewBlock = function (name) { + var node = container, block, clonedNode, caretNode; + var textInlineElements = schema.getTextInlineElements(); + if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') { + block = dom.create(name || newBlockName); + setForcedBlockAttrs(editor, block); + } else { + block = parentBlock.cloneNode(false); + } + caretNode = block; + if (Settings.shouldKeepStyles(editor) === false) { + dom.setAttrib(block, 'style', null); + dom.setAttrib(block, 'class', null); + } else { + do { + if (textInlineElements[node.nodeName]) { + if (isCaretNode(node) || Bookmarks.isBookmarkNode(node)) { + continue; + } + clonedNode = node.cloneNode(false); + dom.setAttrib(clonedNode, 'id', ''); + if (block.hasChildNodes()) { + clonedNode.appendChild(block.firstChild); + block.appendChild(clonedNode); + } else { + caretNode = clonedNode; + block.appendChild(clonedNode); + } + } + } while ((node = node.parentNode) && node !== editableRoot); + } + emptyBlock(caretNode); + return block; + }; + var isCaretAtStartOrEndOfBlock = function (start) { + var node, name; + var normalizedOffset = normalizeZwspOffset(start, container, offset); + if (NodeType.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) { + return false; + } + if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) { + return true; + } + if (start && NodeType.isElement(container) && container === parentBlock.firstChild) { + return true; + } + if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) { + return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start; + } + var walker = new TreeWalker(container, parentBlock); + if (NodeType.isText(container)) { + if (start && normalizedOffset === 0) { + walker.prev(); + } else if (!start && normalizedOffset === container.nodeValue.length) { + walker.next(); + } + } + while (node = walker.current()) { + if (NodeType.isElement(node)) { + if (!node.getAttribute('data-mce-bogus')) { + name = node.nodeName.toLowerCase(); + if (nonEmptyElementsMap[name] && name !== 'br') { + return false; + } + } + } else if (NodeType.isText(node) && !/^[ \t\r\n]*$/.test(node.nodeValue)) { + return false; + } + if (start) { + walker.prev(); + } else { + walker.next(); + } + } + return true; + }; + var insertNewBlockAfter = function () { + if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') { + newBlock = createNewBlock(newBlockName); + } else { + newBlock = createNewBlock(); + } + if (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) { + newBlock = dom.split(containerBlock, parentBlock); + } else { + dom.insertAfter(newBlock, parentBlock); + } + NewLineUtils.moveToCaretPosition(editor, newBlock); + }; + NormalizeRange.normalize(dom, rng).each(function (normRng) { + rng.setStart(normRng.startContainer, normRng.startOffset); + rng.setEnd(normRng.endContainer, normRng.endOffset); + }); + container = rng.startContainer; + offset = rng.startOffset; + newBlockName = Settings.getForcedRootBlock(editor); + shiftKey = !!(evt && evt.shiftKey); + var ctrlKey = !!(evt && evt.ctrlKey); + if (NodeType.isElement(container) && container.hasChildNodes()) { + isAfterLastNodeInContainer = offset > container.childNodes.length - 1; + container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; + if (isAfterLastNodeInContainer && NodeType.isText(container)) { + offset = container.nodeValue.length; + } else { + offset = 0; + } + } + editableRoot = getEditableRoot$1(dom, container); + if (!editableRoot) { + return; + } + if (newBlockName && !shiftKey || !newBlockName && shiftKey) { + container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset); + } + parentBlock = dom.getParent(container, dom.isBlock); + containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null; + parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : ''; + containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; + if (containerBlockName === 'LI' && !ctrlKey) { + parentBlock = containerBlock; + containerBlock = containerBlock.parentNode; + parentBlockName = containerBlockName; + } + if (/^(LI|DT|DD)$/.test(parentBlockName)) { + if (dom.isEmpty(parentBlock)) { + InsertLi.insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName); + return; + } + } + if (newBlockName && parentBlock === editor.getBody()) { + return; + } + newBlockName = newBlockName || 'P'; + if (isCaretContainerBlock(parentBlock)) { + newBlock = showCaretContainerBlock(parentBlock); + if (dom.isEmpty(parentBlock)) { + emptyBlock(parentBlock); + } + NewLineUtils.moveToCaretPosition(editor, newBlock); + } else if (isCaretAtStartOrEndOfBlock()) { + insertNewBlockAfter(); + } else if (isCaretAtStartOrEndOfBlock(true)) { + newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock); + NewLineUtils.moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock); + } else { + tmpRng = includeZwspInRange(rng).cloneRange(); + tmpRng.setEndAfter(parentBlock); + fragment = tmpRng.extractContents(); + trimZwsp(fragment); + trimLeadingLineBreaks(fragment); + newBlock = fragment.firstChild; + dom.insertAfter(fragment, parentBlock); + trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock); + addBrToBlockIfNeeded(dom, parentBlock); + if (dom.isEmpty(parentBlock)) { + emptyBlock(parentBlock); + } + newBlock.normalize(); + if (dom.isEmpty(newBlock)) { + dom.remove(newBlock); + insertNewBlockAfter(); + } else { + NewLineUtils.moveToCaretPosition(editor, newBlock); + } + } + dom.setAttrib(newBlock, 'id', ''); + editor.fire('NewBlock', { newBlock: newBlock }); + }; + var InsertBlock = { insert: insert$1 }; + + var hasRightSideContent = function (schema, container, parentBlock) { + var walker = new TreeWalker(container, parentBlock); + var node; + var nonEmptyElementsMap = schema.getNonEmptyElements(); + while (node = walker.next()) { + if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) { + return true; + } + } + }; + var scrollToBr = function (dom, selection, brElm) { + var marker = dom.create('span', {}, ' '); + brElm.parentNode.insertBefore(marker, brElm); + selection.scrollIntoView(marker); + dom.remove(marker); + }; + var moveSelectionToBr = function (dom, selection, brElm, extraBr) { + var rng = dom.createRng(); + if (!extraBr) { + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + } else { + rng.setStartBefore(brElm); + rng.setEndBefore(brElm); + } + selection.setRng(rng); + }; + var insertBrAtCaret = function (editor, evt) { + var selection = editor.selection; + var dom = editor.dom; + var rng = selection.getRng(); + var brElm; + var extraBr; + NormalizeRange.normalize(dom, rng).each(function (normRng) { + rng.setStart(normRng.startContainer, normRng.startOffset); + rng.setEnd(normRng.endContainer, normRng.endOffset); + }); + var offset = rng.startOffset; + var container = rng.startContainer; + if (container.nodeType === 1 && container.hasChildNodes()) { + var isAfterLastNodeInContainer = offset > container.childNodes.length - 1; + container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; + if (isAfterLastNodeInContainer && container.nodeType === 3) { + offset = container.nodeValue.length; + } else { + offset = 0; + } + } + var parentBlock = dom.getParent(container, dom.isBlock); + var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null; + var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; + var isControlKey = !!(evt && evt.ctrlKey); + if (containerBlockName === 'LI' && !isControlKey) { + parentBlock = containerBlock; + } + if (container && container.nodeType === 3 && offset >= container.nodeValue.length) { + if (!hasRightSideContent(editor.schema, container, parentBlock)) { + brElm = dom.create('br'); + rng.insertNode(brElm); + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + extraBr = true; + } + } + brElm = dom.create('br'); + rangeInsertNode(dom, rng, brElm); + scrollToBr(dom, selection, brElm); + moveSelectionToBr(dom, selection, brElm, extraBr); + editor.undoManager.add(); + }; + var insertBrBefore = function (editor, inline) { + var br = Element.fromTag('br'); + before(Element.fromDom(inline), br); + editor.undoManager.add(); + }; + var insertBrAfter = function (editor, inline) { + if (!hasBrAfter(editor.getBody(), inline)) { + after(Element.fromDom(inline), Element.fromTag('br')); + } + var br = Element.fromTag('br'); + after(Element.fromDom(inline), br); + scrollToBr(editor.dom, editor.selection, br.dom()); + moveSelectionToBr(editor.dom, editor.selection, br.dom(), false); + editor.undoManager.add(); + }; + var isBeforeBr$1 = function (pos) { + return NodeType.isBr(pos.getNode()); + }; + var hasBrAfter = function (rootNode, startNode) { + if (isBeforeBr$1(CaretPosition$1.after(startNode))) { + return true; + } else { + return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) { + return NodeType.isBr(pos.getNode()); + }).getOr(false); + } + }; + var isAnchorLink = function (elm) { + return elm && elm.nodeName === 'A' && 'href' in elm; + }; + var isInsideAnchor = function (location) { + return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false)); + }; + var readInlineAnchorLocation = function (editor) { + var isInlineTarget = curry(InlineUtils.isInlineTarget, editor); + var position = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor); + }; + var insertBrOutsideAnchor = function (editor, location) { + location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop); + }; + var insert$2 = function (editor, evt) { + var anchorLocation = readInlineAnchorLocation(editor); + if (anchorLocation.isSome()) { + anchorLocation.each(curry(insertBrOutsideAnchor, editor)); + } else { + insertBrAtCaret(editor, evt); + } + }; + var InsertBr = { insert: insert$2 }; + + var matchesSelector = function (editor, selector) { + return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) { + return selector.length > 0 && is$1(Element.fromDom(parentBlock), selector); + }).isSome(); + }; + var shouldInsertBr = function (editor) { + return matchesSelector(editor, Settings.getBrNewLineSelector(editor)); + }; + var shouldBlockNewLine = function (editor) { + return matchesSelector(editor, Settings.getNoNewLineSelector(editor)); + }; + var ContextSelectors = { + shouldInsertBr: shouldInsertBr, + shouldBlockNewLine: shouldBlockNewLine + }; + + var newLineAction = Adt.generate([ + { br: [] }, + { block: [] }, + { none: [] } + ]); + var shouldBlockNewLine$1 = function (editor, shiftKey) { + return ContextSelectors.shouldBlockNewLine(editor); + }; + var isBrMode = function (requiredState) { + return function (editor, shiftKey) { + var brMode = Settings.getForcedRootBlock(editor) === ''; + return brMode === requiredState; + }; + }; + var inListBlock = function (requiredState) { + return function (editor, shiftKey) { + return NewLineUtils.isListItemParentBlock(editor) === requiredState; + }; + }; + var inBlock = function (blockName, requiredState) { + return function (editor, shiftKey) { + var state = NewLineUtils.getParentBlockName(editor) === blockName.toUpperCase(); + return state === requiredState; + }; + }; + var inPreBlock = function (requiredState) { + return inBlock('pre', requiredState); + }; + var inSummaryBlock = function () { + return inBlock('summary', true); + }; + var shouldPutBrInPre$1 = function (requiredState) { + return function (editor, shiftKey) { + return Settings.shouldPutBrInPre(editor) === requiredState; + }; + }; + var inBrContext = function (editor, shiftKey) { + return ContextSelectors.shouldInsertBr(editor); + }; + var hasShiftKey = function (editor, shiftKey) { + return shiftKey; + }; + var canInsertIntoEditableRoot = function (editor) { + var forcedRootBlock = Settings.getForcedRootBlock(editor); + var rootEditable = NewLineUtils.getEditableRoot(editor.dom, editor.selection.getStart()); + return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P'); + }; + var match$2 = function (predicates, action) { + return function (editor, shiftKey) { + var isMatch = foldl(predicates, function (res, p) { + return res && p(editor, shiftKey); + }, true); + return isMatch ? Option.some(action) : Option.none(); + }; + }; + var getAction$1 = function (editor, evt) { + return LazyEvaluator.evaluateUntil([ + match$2([shouldBlockNewLine$1], newLineAction.none()), + match$2([inSummaryBlock()], newLineAction.br()), + match$2([ + inPreBlock(true), + shouldPutBrInPre$1(false), + hasShiftKey + ], newLineAction.br()), + match$2([ + inPreBlock(true), + shouldPutBrInPre$1(false) + ], newLineAction.block()), + match$2([ + inPreBlock(true), + shouldPutBrInPre$1(true), + hasShiftKey + ], newLineAction.block()), + match$2([ + inPreBlock(true), + shouldPutBrInPre$1(true) + ], newLineAction.br()), + match$2([ + inListBlock(true), + hasShiftKey + ], newLineAction.br()), + match$2([inListBlock(true)], newLineAction.block()), + match$2([ + isBrMode(true), + hasShiftKey, + canInsertIntoEditableRoot + ], newLineAction.block()), + match$2([isBrMode(true)], newLineAction.br()), + match$2([inBrContext], newLineAction.br()), + match$2([ + isBrMode(false), + hasShiftKey + ], newLineAction.br()), + match$2([canInsertIntoEditableRoot], newLineAction.block()) + ], [ + editor, + !!(evt && evt.shiftKey) + ]).getOr(newLineAction.none()); + }; + var NewLineAction = { getAction: getAction$1 }; + + var insert$3 = function (editor, evt) { + NewLineAction.getAction(editor, evt).fold(function () { + InsertBr.insert(editor, evt); + }, function () { + InsertBlock.insert(editor, evt); + }, noop); + }; + var InsertNewLine = { insert: insert$3 }; + + var endTypingLevel = function (undoManager) { + if (undoManager.typing) { + undoManager.typing = false; + undoManager.add(); + } + }; + var handleEnterKeyEvent = function (editor, event) { + if (event.isDefaultPrevented()) { + return; + } + event.preventDefault(); + endTypingLevel(editor.undoManager); + editor.undoManager.transact(function () { + if (editor.selection.isCollapsed() === false) { + editor.execCommand('Delete'); + } + InsertNewLine.insert(editor, event); + }); + }; + var setup$a = function (editor) { + editor.on('keydown', function (event) { + if (event.keyCode === VK.ENTER) { + handleEnterKeyEvent(editor, event); + } + }); + }; + var EnterKey = { setup: setup$a }; + + var insertTextAtPosition = function (text, pos) { + var container = pos.container(); + var offset = pos.offset(); + if (NodeType.isText(container)) { + container.insertData(offset, text); + return Option.some(CaretPosition(container, offset + text.length)); + } else { + return getElementFromPosition(pos).map(function (elm) { + var textNode = Element.fromText(text); + if (pos.isAtEnd()) { + after(elm, textNode); + } else { + before(elm, textNode); + } + return CaretPosition(textNode.dom(), text.length); + }); + } + }; + var insertNbspAtPosition = curry(insertTextAtPosition, '\xA0'); + var insertSpaceAtPosition = curry(insertTextAtPosition, ' '); + + var nbsp = '\xA0'; + var isInMiddleOfText = function (pos) { + return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd(); + }; + var getClosestBlock$1 = function (root, pos) { + var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock); + return head(parentBlocks).getOr(root); + }; + var hasSpaceBefore = function (root, pos) { + if (isInMiddleOfText(pos)) { + return isAfterSpace(pos); + } else { + return isAfterSpace(pos) || CaretFinder.prevPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isAfterSpace); + } + }; + var hasSpaceAfter = function (root, pos) { + if (isInMiddleOfText(pos)) { + return isBeforeSpace(pos); + } else { + return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isBeforeSpace); + } + }; + var isPreValue = function (value) { + return contains([ + 'pre', + 'pre-wrap' + ], value); + }; + var isInPre = function (pos) { + return getElementFromPosition(pos).bind(function (elm) { + return closest(elm, isElement); + }).exists(function (elm) { + return isPreValue(get$2(elm, 'white-space')); + }); + }; + var isAtBeginningOfBody = function (root, pos) { + return CaretFinder.prevPosition(root.dom(), pos).isNone(); + }; + var isAtEndOfBody = function (root, pos) { + return CaretFinder.nextPosition(root.dom(), pos).isNone(); + }; + var isAtLineBoundary = function (root, pos) { + return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos); + }; + var needsToHaveNbsp = function (root, pos) { + if (isInPre(pos)) { + return false; + } else { + return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos); + } + }; + var needsToBeNbspLeft = function (root, pos) { + if (isInPre(pos)) { + return false; + } else { + return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos); + } + }; + var leanRight = function (pos) { + var container = pos.container(); + var offset = pos.offset(); + if (NodeType.isText(container) && offset < container.data.length) { + return CaretPosition(container, offset + 1); + } else { + return pos; + } + }; + var needsToBeNbspRight = function (root, pos) { + var afterPos = leanRight(pos); + if (isInPre(afterPos)) { + return false; + } else { + return isAtEndOfBlock(root, afterPos) || isAfterBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos); + } + }; + var needsToBeNbsp = function (root, pos) { + return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, pos); + }; + var isNbspAt = function (text, offset) { + return isNbsp(text.charAt(offset)); + }; + var hasNbsp = function (pos) { + var container = pos.container(); + return NodeType.isText(container) && contains$2(container.data, nbsp); + }; + var normalizeNbspMiddle = function (text) { + return map(text.split(''), function (chr, i, chars) { + if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) { + return ' '; + } else { + return chr; + } + }).join(''); + }; + var normalizeNbspAtStart = function (root, node) { + var text = node.data; + var firstPos = CaretPosition(node, 0); + if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) { + node.data = ' ' + text.slice(1); + return true; + } else { + return false; + } + }; + var normalizeNbspInMiddleOfTextNode = function (node) { + var text = node.data; + var newText = normalizeNbspMiddle(text); + if (newText !== text) { + node.data = newText; + return true; + } else { + return false; + } + }; + var normalizeNbspAtEnd = function (root, node) { + var text = node.data; + var lastPos = CaretPosition(node, text.length - 1); + if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) { + node.data = text.slice(0, -1) + ' '; + return true; + } else { + return false; + } + }; + var normalizeNbsps = function (root, pos) { + return Option.some(pos).filter(hasNbsp).bind(function (pos) { + var container = pos.container(); + var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container); + return normalized ? Option.some(pos) : Option.none(); + }); + }; + var normalizeNbspsInEditor = function (editor) { + var root = Element.fromDom(editor.getBody()); + if (editor.selection.isCollapsed()) { + normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) { + editor.selection.setRng(pos.toRange()); + }); + } + }; + + var locationToCaretPosition = function (root) { + return function (location) { + return location.fold(function (element) { + return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element)); + }, function (element) { + return CaretFinder.firstPositionIn(element); + }, function (element) { + return CaretFinder.lastPositionIn(element); + }, function (element) { + return CaretFinder.nextPosition(root.dom(), CaretPosition$1.after(element)); + }); + }; + }; + var insertInlineBoundarySpaceOrNbsp = function (root, pos) { + return function (checkPos) { + return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos); + }; + }; + var setSelection$1 = function (editor) { + return function (pos) { + editor.selection.setRng(pos.toRange()); + editor.nodeChanged(); + return true; + }; + }; + var insertSpaceOrNbspAtSelection = function (editor) { + var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + var root = Element.fromDom(editor.getBody()); + if (editor.selection.isCollapsed()) { + var isInlineTarget = curry(InlineUtils.isInlineTarget, editor); + var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng()); + return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor)); + } else { + return false; + } + }; + + var executeKeydownOverride$2 = function (editor, evt) { + MatchKeys.execute([{ + keyCode: VK.SPACEBAR, + action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor) + }], evt).each(function (_) { + evt.preventDefault(); + }); + }; + var setup$b = function (editor) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride$2(editor, evt); + } + }); + }; + var SpaceKey = { setup: setup$b }; + + var findBlockCaretContainer = function (editor) { + return descendant(Element.fromDom(editor.getBody()), '*[data-mce-caret]').fold(constant(null), function (elm) { + return elm.dom(); + }); + }; + var removeIeControlRect = function (editor) { + editor.selection.setRng(editor.selection.getRng()); + }; + var showBlockCaretContainer = function (editor, blockCaretContainer) { + if (blockCaretContainer.hasAttribute('data-mce-caret')) { + showCaretContainerBlock(blockCaretContainer); + removeIeControlRect(editor); + editor.selection.scrollIntoView(blockCaretContainer); + } + }; + var handleBlockContainer = function (editor, e) { + var blockCaretContainer = findBlockCaretContainer(editor); + if (!blockCaretContainer) { + return; + } + if (e.type === 'compositionstart') { + e.preventDefault(); + e.stopPropagation(); + showBlockCaretContainer(editor, blockCaretContainer); + return; + } + if (hasContent(blockCaretContainer)) { + showBlockCaretContainer(editor, blockCaretContainer); + editor.undoManager.add(); + } + }; + var setup$c = function (editor) { + editor.on('keyup compositionstart', curry(handleBlockContainer, editor)); + }; + var CaretContainerInput = { setup: setup$c }; + + var browser$4 = PlatformDetection$1.detect().browser; + var setupIeInput = function (editor) { + var keypressThrotter = first(function () { + if (!editor.composing) { + normalizeNbspsInEditor(editor); + } + }, 0); + if (browser$4.isIE()) { + editor.on('keypress', function (e) { + keypressThrotter.throttle(); + }); + editor.on('remove', function (e) { + keypressThrotter.cancel(); + }); + } + }; + var setup$d = function (editor) { + setupIeInput(editor); + editor.on('input', function (e) { + if (e.isComposing === false) { + normalizeNbspsInEditor(editor); + } + }); + }; + + var executeKeydownOverride$3 = function (editor, evt) { + MatchKeys.execute([ + { + keyCode: VK.END, + action: moveToLineEndPoint(editor, true) + }, + { + keyCode: VK.HOME, + action: moveToLineEndPoint(editor, false) + } + ], evt).each(function (_) { + evt.preventDefault(); + }); + }; + var setup$e = function (editor) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride$3(editor, evt); + } + }); + }; + var HomeEndKeys = { setup: setup$e }; + + var setup$f = function (editor) { + var caret = BoundarySelection.setupSelectedState(editor); + CaretContainerInput.setup(editor); + ArrowKeys.setup(editor, caret); + DeleteBackspaceKeys.setup(editor, caret); + EnterKey.setup(editor); + SpaceKey.setup(editor); + setup$d(editor); + HomeEndKeys.setup(editor); + }; + var KeyboardOverrides = { setup: setup$f }; + + var Quirks = function (editor) { + var each = Tools.each; + var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, parser = editor.parser; + var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit; + var mceInternalUrlPrefix = 'data:text/mce-internal,'; + var mceInternalDataType = isIE ? 'Text' : 'URL'; + var setEditorCommandState = function (cmd, state) { + try { + editor.getDoc().execCommand(cmd, false, state); + } catch (ex) { + } + }; + var isDefaultPrevented = function (e) { + return e.isDefaultPrevented(); + }; + var setMceInternalContent = function (e) { + var selectionHtml, internalContent; + if (e.dataTransfer) { + if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') { + selection.select(e.target); + } + selectionHtml = editor.selection.getContent(); + if (selectionHtml.length > 0) { + internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml); + e.dataTransfer.setData(mceInternalDataType, internalContent); + } + } + }; + var getMceInternalContent = function (e) { + var internalContent; + if (e.dataTransfer) { + internalContent = e.dataTransfer.getData(mceInternalDataType); + if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) { + internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(','); + return { + id: unescape(internalContent[0]), + html: unescape(internalContent[1]) + }; + } + } + return null; + }; + var insertClipboardContents = function (content, internal) { + if (editor.queryCommandSupported('mceInsertClipboardContent')) { + editor.execCommand('mceInsertClipboardContent', false, { + content: content, + internal: internal + }); + } else { + editor.execCommand('mceInsertContent', false, content); + } + }; + var emptyEditorWhenDeleting = function () { + var serializeRng = function (rng) { + var body = dom.create('body'); + var contents = rng.cloneContents(); + body.appendChild(contents); + return selection.serializer.serialize(body, { format: 'html' }); + }; + var allContentsSelected = function (rng) { + var selection = serializeRng(rng); + var allRng = dom.createRng(); + allRng.selectNode(editor.getBody()); + var allSelection = serializeRng(allRng); + return selection === allSelection; + }; + editor.on('keydown', function (e) { + var keyCode = e.keyCode; + var isCollapsed, body; + if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) { + isCollapsed = editor.selection.isCollapsed(); + body = editor.getBody(); + if (isCollapsed && !dom.isEmpty(body)) { + return; + } + if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) { + return; + } + e.preventDefault(); + editor.setContent(''); + if (body.firstChild && dom.isBlock(body.firstChild)) { + editor.selection.setCursorLocation(body.firstChild, 0); + } else { + editor.selection.setCursorLocation(body, 0); + } + editor.nodeChanged(); + } + }); + }; + var selectAll = function () { + editor.shortcuts.add('meta+a', null, 'SelectAll'); + }; + var inputMethodFocus = function () { + if (!editor.inline) { + dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) { + var rng; + if (e.target === editor.getDoc().documentElement) { + rng = selection.getRng(); + editor.getBody().focus(); + if (e.type === 'mousedown') { + if (isCaretContainer(rng.startContainer)) { + return; + } + selection.placeCaretAt(e.clientX, e.clientY); + } else { + selection.setRng(rng); + } + } + }); + } + }; + var removeHrOnBackspace = function () { + editor.on('keydown', function (e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (!editor.getBody().getElementsByTagName('hr').length) { + return; + } + if (selection.isCollapsed() && selection.getRng().startOffset === 0) { + var node = selection.getNode(); + var previousSibling = node.previousSibling; + if (node.nodeName === 'HR') { + dom.remove(node); + e.preventDefault(); + return; + } + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') { + dom.remove(previousSibling); + e.preventDefault(); + } + } + } + }); + }; + var focusBody = function () { + if (!domGlobals.Range.prototype.getClientRects) { + editor.on('mousedown', function (e) { + if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') { + var body_1 = editor.getBody(); + body_1.blur(); + Delay.setEditorTimeout(editor, function () { + body_1.focus(); + }); + } + }); + } + }; + var selectControlElements = function () { + editor.on('click', function (e) { + var target = e.target; + if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') { + e.preventDefault(); + editor.selection.select(target); + editor.nodeChanged(); + } + if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) { + e.preventDefault(); + selection.select(target); + } + }); + }; + var removeStylesWhenDeletingAcrossBlockElements = function () { + var getAttributeApplyFunction = function () { + var template = dom.getAttribs(selection.getStart().cloneNode(false)); + return function () { + var target = selection.getStart(); + if (target !== editor.getBody()) { + dom.setAttrib(target, 'style', null); + each(template, function (attr) { + target.setAttributeNode(attr.cloneNode(true)); + }); + } + }; + }; + var isSelectionAcrossElements = function () { + return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock); + }; + editor.on('keypress', function (e) { + var applyAttributes; + if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + editor.getDoc().execCommand('delete', false, null); + applyAttributes(); + e.preventDefault(); + return false; + } + }); + dom.bind(editor.getDoc(), 'cut', function (e) { + var applyAttributes; + if (!isDefaultPrevented(e) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + Delay.setEditorTimeout(editor, function () { + applyAttributes(); + }); + } + }); + }; + var disableBackspaceIntoATable = function () { + editor.on('keydown', function (e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (selection.isCollapsed() && selection.getRng().startOffset === 0) { + var previousSibling = selection.getNode().previousSibling; + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') { + e.preventDefault(); + return false; + } + } + } + }); + }; + var removeBlockQuoteOnBackSpace = function () { + editor.on('keydown', function (e) { + var rng, container, offset, root, parent; + if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) { + return; + } + rng = selection.getRng(); + container = rng.startContainer; + offset = rng.startOffset; + root = dom.getRoot(); + parent = container; + if (!rng.collapsed || offset !== 0) { + return; + } + while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) { + parent = parent.parentNode; + } + if (parent.tagName === 'BLOCKQUOTE') { + editor.formatter.toggle('blockquote', null, parent); + rng = dom.createRng(); + rng.setStart(container, 0); + rng.setEnd(container, 0); + selection.setRng(rng); + } + }); + }; + var setGeckoEditingOptions = function () { + var setOpts = function () { + setEditorCommandState('StyleWithCSS', false); + setEditorCommandState('enableInlineTableEditing', false); + if (!settings.object_resizing) { + setEditorCommandState('enableObjectResizing', false); + } + }; + if (!settings.readonly) { + editor.on('BeforeExecCommand mousedown', setOpts); + } + }; + var addBrAfterLastLinks = function () { + var fixLinks = function () { + each(dom.select('a'), function (node) { + var parentNode = node.parentNode; + var root = dom.getRoot(); + if (parentNode.lastChild === node) { + while (parentNode && !dom.isBlock(parentNode)) { + if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) { + return; + } + parentNode = parentNode.parentNode; + } + dom.add(parentNode, 'br', { 'data-mce-bogus': 1 }); + } + }); + }; + editor.on('SetContent ExecCommand', function (e) { + if (e.type === 'setcontent' || e.command === 'mceInsertLink') { + fixLinks(); + } + }); + }; + var setDefaultBlockType = function () { + if (settings.forced_root_block) { + editor.on('init', function () { + setEditorCommandState('DefaultParagraphSeparator', Settings.getForcedRootBlock(editor)); + }); + } + }; + var normalizeSelection = function () { + editor.on('keyup focusin mouseup', function (e) { + if (!VK.modifierPressed(e)) { + selection.normalize(); + } + }, true); + }; + var showBrokenImageIcon = function () { + editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}'); + }; + var restoreFocusOnKeyDown = function () { + if (!editor.inline) { + editor.on('keydown', function () { + if (domGlobals.document.activeElement === domGlobals.document.body) { + editor.getWin().focus(); + } + }); + } + }; + var bodyHeight = function () { + if (!editor.inline) { + editor.contentStyles.push('body {min-height: 150px}'); + editor.on('click', function (e) { + var rng; + if (e.target.nodeName === 'HTML') { + if (Env.ie > 11) { + editor.getBody().focus(); + return; + } + rng = editor.selection.getRng(); + editor.getBody().focus(); + editor.selection.setRng(rng); + editor.selection.normalize(); + editor.nodeChanged(); + } + }); + } + }; + var blockCmdArrowNavigation = function () { + if (Env.mac) { + editor.on('keydown', function (e) { + if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) { + e.preventDefault(); + var selection_1 = editor.selection.getSel(); + selection_1.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary'); + } + }); + } + }; + var disableAutoUrlDetect = function () { + setEditorCommandState('AutoUrlDetect', false); + }; + var tapLinksAndImages = function () { + editor.on('click', function (e) { + var elm = e.target; + do { + if (elm.tagName === 'A') { + e.preventDefault(); + return; + } + } while (elm = elm.parentNode); + }); + editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}'); + }; + var blockFormSubmitInsideEditor = function () { + editor.on('init', function () { + editor.dom.bind(editor.getBody(), 'submit', function (e) { + e.preventDefault(); + }); + }); + }; + var removeAppleInterchangeBrs = function () { + parser.addNodeFilter('br', function (nodes) { + var i = nodes.length; + while (i--) { + if (nodes[i].attr('class') === 'Apple-interchange-newline') { + nodes[i].remove(); + } + } + }); + }; + var ieInternalDragAndDrop = function () { + editor.on('dragstart', function (e) { + setMceInternalContent(e); + }); + editor.on('drop', function (e) { + if (!isDefaultPrevented(e)) { + var internalContent = getMceInternalContent(e); + if (internalContent && internalContent.id !== editor.id) { + e.preventDefault(); + var rng = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc()); + selection.setRng(rng); + insertClipboardContents(internalContent.html, true); + } + } + }); + }; + var refreshContentEditable = function () { + }; + var isHidden = function () { + var sel; + if (!isGecko || editor.removed) { + return false; + } + sel = editor.selection.getSel(); + return !sel || !sel.rangeCount || sel.rangeCount === 0; + }; + removeBlockQuoteOnBackSpace(); + emptyEditorWhenDeleting(); + if (!Env.windowsPhone) { + normalizeSelection(); + } + if (isWebKit) { + inputMethodFocus(); + selectControlElements(); + setDefaultBlockType(); + blockFormSubmitInsideEditor(); + disableBackspaceIntoATable(); + removeAppleInterchangeBrs(); + if (Env.iOS) { + restoreFocusOnKeyDown(); + bodyHeight(); + tapLinksAndImages(); + } else { + selectAll(); + } + } + if (Env.ie >= 11) { + bodyHeight(); + disableBackspaceIntoATable(); + } + if (Env.ie) { + selectAll(); + disableAutoUrlDetect(); + ieInternalDragAndDrop(); + } + if (isGecko) { + removeHrOnBackspace(); + focusBody(); + removeStylesWhenDeletingAcrossBlockElements(); + setGeckoEditingOptions(); + addBrAfterLastLinks(); + showBrokenImageIcon(); + blockCmdArrowNavigation(); + disableBackspaceIntoATable(); + } + return { + refreshContentEditable: refreshContentEditable, + isHidden: isHidden + }; + }; + + var isTextBlockNode = function (node) { + return NodeType.isElement(node) && isTextBlock(Element.fromDom(node)); + }; + var normalizeSelection$1 = function (editor) { + var rng = editor.selection.getRng(); + var startPos = CaretPosition.fromRangeStart(rng); + var endPos = CaretPosition.fromRangeEnd(rng); + if (CaretPosition.isElementPosition(startPos)) { + var container = startPos.container(); + if (isTextBlockNode(container)) { + CaretFinder.firstPositionIn(container).each(function (pos) { + return rng.setStart(pos.container(), pos.offset()); + }); + } + } + if (CaretPosition.isElementPosition(endPos)) { + var container = startPos.container(); + if (isTextBlockNode(container)) { + CaretFinder.lastPositionIn(container).each(function (pos) { + return rng.setEnd(pos.container(), pos.offset()); + }); + } + } + editor.selection.setRng(RangeNormalizer.normalize(rng)); + }; + var setup$g = function (editor) { + editor.on('click', function (e) { + if (e.detail >= 3) { + normalizeSelection$1(editor); + } + }); + }; + + var preventSummaryToggle = function (editor) { + editor.on('click', function (e) { + if (editor.dom.getParent(e.target, 'details')) { + e.preventDefault(); + } + }); + }; + var filterDetails = function (editor) { + editor.parser.addNodeFilter('details', function (elms) { + each(elms, function (details) { + details.attr('data-mce-open', details.attr('open')); + details.attr('open', 'open'); + }); + }); + editor.serializer.addNodeFilter('details', function (elms) { + each(elms, function (details) { + var open = details.attr('data-mce-open'); + details.attr('open', isString(open) ? open : null); + details.attr('data-mce-open', null); + }); + }); + }; + var setup$h = function (editor) { + preventSummaryToggle(editor); + filterDetails(editor); + }; + + var DOM$3 = DOMUtils$1.DOM; + var appendStyle = function (editor, text) { + var head = Element.fromDom(editor.getDoc().head); + var tag = Element.fromTag('style'); + set(tag, 'type', 'text/css'); + append(tag, Element.fromText(text)); + append(head, tag); + }; + var createParser = function (editor) { + var parser = DomParser(editor.settings, editor.schema); + parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) { + var i = nodes.length, node; + var dom = editor.dom; + var value, internalName; + while (i--) { + node = nodes[i]; + value = node.attr(name); + internalName = 'data-mce-' + name; + if (!node.attr(internalName)) { + if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) { + continue; + } + if (name === 'style') { + value = dom.serializeStyle(dom.parseStyle(value), node.name); + if (!value.length) { + value = null; + } + node.attr(internalName, value); + node.attr(name, value); + } else if (name === 'tabindex') { + node.attr(internalName, value); + node.attr(name, null); + } else { + node.attr(internalName, editor.convertURL(value, name, node.name)); + } + } + } + }); + parser.addNodeFilter('script', function (nodes) { + var i = nodes.length, node, type; + while (i--) { + node = nodes[i]; + type = node.attr('type') || 'no/type'; + if (type.indexOf('mce-') !== 0) { + node.attr('type', 'mce-' + type); + } + } + }); + parser.addNodeFilter('#cdata', function (nodes) { + var i = nodes.length, node; + while (i--) { + node = nodes[i]; + node.type = 8; + node.name = '#comment'; + node.value = '[CDATA[' + node.value + ']]'; + } + }); + parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) { + var i = nodes.length, node; + var nonEmptyElements = editor.schema.getNonEmptyElements(); + while (i--) { + node = nodes[i]; + if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) { + node.append(new Node$1('br', 1)).shortEnded = true; + } + } + }); + return parser; + }; + var autoFocus = function (editor) { + if (editor.settings.auto_focus) { + Delay.setEditorTimeout(editor, function () { + var focusEditor; + if (editor.settings.auto_focus === true) { + focusEditor = editor; + } else { + focusEditor = editor.editorManager.get(editor.settings.auto_focus); + } + if (!focusEditor.destroyed) { + focusEditor.focus(); + } + }, 100); + } + }; + var initEditor = function (editor) { + editor.bindPendingEventDelegates(); + editor.initialized = true; + editor.fire('init'); + editor.focus(true); + editor.nodeChanged({ initial: true }); + editor.execCallback('init_instance_callback', editor); + autoFocus(editor); + }; + var getStyleSheetLoader = function (editor) { + return editor.inline ? DOM$3.styleSheetLoader : editor.dom.styleSheetLoader; + }; + var initContentBody = function (editor, skipWrite) { + var settings = editor.settings; + var targetElm = editor.getElement(); + var doc = editor.getDoc(), body, contentCssText; + if (!settings.inline) { + editor.getElement().style.visibility = editor.orgVisibility; + } + if (!skipWrite && !editor.inline) { + doc.open(); + doc.write(editor.iframeHTML); + doc.close(); + } + if (editor.inline) { + editor.on('remove', function () { + var bodyEl = this.getBody(); + DOM$3.removeClass(bodyEl, 'mce-content-body'); + DOM$3.removeClass(bodyEl, 'mce-edit-focus'); + DOM$3.setAttrib(bodyEl, 'contentEditable', null); + }); + DOM$3.addClass(targetElm, 'mce-content-body'); + editor.contentDocument = doc = domGlobals.document; + editor.contentWindow = domGlobals.window; + editor.bodyElement = targetElm; + editor.contentAreaContainer = targetElm; + settings.root_name = targetElm.nodeName.toLowerCase(); + } + body = editor.getBody(); + body.disabled = true; + editor.readonly = settings.readonly; + if (!editor.readonly) { + if (editor.inline && DOM$3.getStyle(body, 'position', true) === 'static') { + body.style.position = 'relative'; + } + body.contentEditable = editor.getParam('content_editable_state', true); + } + body.disabled = false; + editor.editorUpload = EditorUpload(editor); + editor.schema = Schema(settings); + editor.dom = DOMUtils$1(doc, { + keep_values: true, + url_converter: editor.convertURL, + url_converter_scope: editor, + hex_colors: settings.force_hex_style_colors, + update_styles: true, + root_element: editor.inline ? editor.getBody() : null, + collect: function () { + return editor.inline; + }, + schema: editor.schema, + contentCssCors: Settings.shouldUseContentCssCors(editor), + onSetAttrib: function (e) { + editor.fire('SetAttrib', e); + } + }); + editor.parser = createParser(editor); + editor.serializer = Serializer$1(settings, editor); + editor.selection = Selection$1(editor.dom, editor.getWin(), editor.serializer, editor); + editor.annotator = Annotator(editor); + editor.formatter = Formatter(editor); + editor.undoManager = UndoManager(editor); + editor._nodeChangeDispatcher = new NodeChange(editor); + editor._selectionOverrides = SelectionOverrides(editor); + setup$h(editor); + setup$g(editor); + KeyboardOverrides.setup(editor); + ForceBlocks.setup(editor); + editor.fire('PreInit'); + if (!settings.browser_spellcheck && !settings.gecko_spellcheck) { + doc.body.spellcheck = false; + DOM$3.setAttrib(body, 'spellcheck', 'false'); + } + editor.quirks = Quirks(editor); + editor.fire('PostRender'); + var directionality = Settings.getDirectionality(editor); + if (directionality !== undefined) { + body.dir = directionality; + } + if (settings.protect) { + editor.on('BeforeSetContent', function (e) { + Tools.each(settings.protect, function (pattern) { + e.content = e.content.replace(pattern, function (str) { + return ''; + }); + }); + }); + } + editor.on('SetContent', function () { + editor.addVisual(editor.getBody()); + }); + editor.load({ + initial: true, + format: 'html' + }); + editor.startContent = editor.getContent({ format: 'raw' }); + editor.on('compositionstart compositionend', function (e) { + editor.composing = e.type === 'compositionstart'; + }); + if (editor.contentStyles.length > 0) { + contentCssText = ''; + Tools.each(editor.contentStyles, function (style) { + contentCssText += style + '\r\n'; + }); + editor.dom.addStyle(contentCssText); + } + getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) { + initEditor(editor); + }, function (urls) { + initEditor(editor); + }); + if (settings.content_style) { + appendStyle(editor, settings.content_style); + } + }; + var InitContentBody = { initContentBody: initContentBody }; + + var DOM$4 = DOMUtils$1.DOM; + var relaxDomain = function (editor, ifr) { + if (domGlobals.document.domain !== domGlobals.window.location.hostname && Env.ie && Env.ie < 12) { + var bodyUuid = Uuid.uuid('mce'); + editor[bodyUuid] = function () { + InitContentBody.initContentBody(editor); + }; + var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain="' + domGlobals.document.domain + '";' + 'var ed = window.parent.tinymce.get("' + editor.id + '");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()'; + DOM$4.setAttrib(ifr, 'src', domainRelaxUrl); + return true; + } + return false; + }; + var createIframeElement = function (id, title, height, customAttrs) { + var iframe = Element.fromTag('iframe'); + setAll(iframe, customAttrs); + setAll(iframe, { + id: id + '_ifr', + frameBorder: '0', + allowTransparency: 'true', + title: title + }); + add$3(iframe, 'tox-edit-area__iframe'); + return iframe; + }; + var getIframeHtml = function (editor) { + var bodyId, bodyClass, iframeHTML; + iframeHTML = Settings.getDocType(editor) + ''; + if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) { + iframeHTML += ''; + } + iframeHTML += ''; + bodyId = Settings.getBodyId(editor); + bodyClass = Settings.getBodyClass(editor); + if (Settings.getContentSecurityPolicy(editor)) { + iframeHTML += ''; + } + iframeHTML += '
'; + return iframeHTML; + }; + var createIframe = function (editor, o) { + var title = editor.editorManager.translate('Rich Text Area. Press ALT-0 for help.'); + var ifr = createIframeElement(editor.id, title, o.height, Settings.getIframeAttrs(editor)).dom(); + ifr.onload = function () { + ifr.onload = null; + editor.fire('load'); + }; + var isDomainRelaxed = relaxDomain(editor, ifr); + editor.contentAreaContainer = o.iframeContainer; + editor.iframeElement = ifr; + editor.iframeHTML = getIframeHtml(editor); + DOM$4.add(o.iframeContainer, ifr); + return isDomainRelaxed; + }; + var init$1 = function (editor, boxInfo) { + var isDomainRelaxed = createIframe(editor, boxInfo); + if (boxInfo.editorContainer) { + DOM$4.get(boxInfo.editorContainer).style.display = editor.orgDisplay; + editor.hidden = DOM$4.isHidden(boxInfo.editorContainer); + } + editor.getElement().style.display = 'none'; + DOM$4.setAttrib(editor.id, 'aria-hidden', 'true'); + if (!isDomainRelaxed) { + InitContentBody.initContentBody(editor); + } + }; + var InitIframe = { init: init$1 }; + + var isContentCssSkinName = function (url) { + return /^[a-z0-9\-]+$/i.test(url); + }; + var getContentCssUrls = function (editor) { + var contentCss = Settings.getContentCss(editor); + var skinUrl = editor.editorManager.baseURL + '/skins/content'; + var suffix = editor.editorManager.suffix; + var contentCssFile = 'content' + suffix + '.css'; + var inline = editor.inline === true; + return map(contentCss, function (url) { + if (isContentCssSkinName(url) && !inline) { + return skinUrl + '/' + url + '/' + contentCssFile; + } else { + return editor.documentBaseURI.toAbsolute(url); + } + }); + }; + var appendContentCssFromSettings = function (editor) { + editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor)); + }; + + var DOM$5 = DOMUtils$1.DOM; + var initPlugin = function (editor, initializedPlugins, plugin) { + var Plugin = PluginManager.get(plugin); + var pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\/$/, ''); + plugin = Tools.trim(plugin); + if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) { + Tools.each(PluginManager.dependencies(plugin), function (dep) { + initPlugin(editor, initializedPlugins, dep); + }); + if (editor.plugins[plugin]) { + return; + } + try { + var pluginInstance = new Plugin(editor, pluginUrl, editor.$); + editor.plugins[plugin] = pluginInstance; + if (pluginInstance.init) { + pluginInstance.init(editor, pluginUrl); + initializedPlugins.push(plugin); + } + } catch (e) { + ErrorReporter.pluginInitError(editor, plugin, e); + } + } + }; + var trimLegacyPrefix = function (name) { + return name.replace(/^\-/, ''); + }; + var initPlugins = function (editor) { + var initializedPlugins = []; + Tools.each(editor.settings.plugins.split(/[ ,]/), function (name) { + initPlugin(editor, initializedPlugins, trimLegacyPrefix(name)); + }); + }; + var initIcons = function (editor) { + var iconPackName = Tools.trim(editor.settings.icons); + var currentIcons = editor.ui.registry.getAll().icons; + var defaultIcons = getAll(); + var loadIcons = __assign({}, defaultIcons, IconManager.get(iconPackName).icons); + each$3(loadIcons, function (svgData, icon) { + if (!has(currentIcons, icon)) { + editor.ui.registry.addIcon(icon, svgData); + } + }); + }; + var initTheme = function (editor) { + var theme = editor.settings.theme; + if (isString(theme)) { + editor.settings.theme = trimLegacyPrefix(theme); + var Theme = ThemeManager.get(theme); + editor.theme = new Theme(editor, ThemeManager.urls[theme]); + if (editor.theme.init) { + editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\/$/, ''), editor.$); + } + } else { + editor.theme = {}; + } + }; + var renderFromLoadedTheme = function (editor) { + return editor.theme.renderUI(); + }; + var renderFromThemeFunc = function (editor) { + var elm = editor.getElement(); + var theme = editor.settings.theme; + var info = theme(editor, elm); + if (info.editorContainer.nodeType) { + info.editorContainer.id = info.editorContainer.id || editor.id + '_parent'; + } + if (info.iframeContainer && info.iframeContainer.nodeType) { + info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer'; + } + info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight; + return info; + }; + var createThemeFalseResult = function (element) { + return { + editorContainer: element, + iframeContainer: element + }; + }; + var renderThemeFalseIframe = function (targetElement) { + var iframeContainer = DOM$5.create('div'); + DOM$5.insertAfter(iframeContainer, targetElement); + return createThemeFalseResult(iframeContainer); + }; + var renderThemeFalse = function (editor) { + var targetElement = editor.getElement(); + return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement); + }; + var renderThemeUi = function (editor) { + var elm = editor.getElement(); + editor.orgDisplay = elm.style.display; + if (isString(editor.settings.theme)) { + return renderFromLoadedTheme(editor); + } else if (isFunction(editor.settings.theme)) { + return renderFromThemeFunc(editor); + } else { + return renderThemeFalse(editor); + } + }; + var init$2 = function (editor) { + editor.fire('ScriptsLoaded'); + initIcons(editor); + initTheme(editor); + initPlugins(editor); + var boxInfo = renderThemeUi(editor); + editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null; + appendContentCssFromSettings(editor); + if (editor.inline) { + return InitContentBody.initContentBody(editor); + } else { + return InitIframe.init(editor, boxInfo); + } + }; + var Init = { init: init$2 }; + + var DOM$6 = DOMUtils$1.DOM; + var hasSkipLoadPrefix = function (name) { + return name.charAt(0) === '-'; + }; + var loadLanguage = function (scriptLoader, editor) { + var languageCode = Settings.getLanguageCode(editor); + var languageUrl = Settings.getLanguageUrl(editor); + if (I18n.hasCode(languageCode) === false && languageCode !== 'en') { + var url_1 = languageUrl !== '' ? languageUrl : editor.editorManager.baseURL + '/langs/' + languageCode + '.js'; + scriptLoader.add(url_1, noop, undefined, function () { + ErrorReporter.languageLoadError(url_1, languageCode); + }); + } + }; + var loadTheme = function (scriptLoader, editor, suffix, callback) { + var settings = editor.settings, theme = settings.theme; + if (isString(theme)) { + if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) { + var themeUrl = settings.theme_url; + if (themeUrl) { + ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl)); + } else { + ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js'); + } + } + scriptLoader.loadQueue(function () { + ThemeManager.waitFor(theme, callback); + }); + } else { + callback(); + } + }; + var getIconsUrlMetaFromUrl = function (editor) { + return Option.from(Settings.getIconsUrl(editor)).filter(function (url) { + return url.length > 0; + }).map(function (url) { + return { + url: url, + name: Option.none() + }; + }); + }; + var getIconsUrlMetaFromName = function (editor) { + return Option.from(Settings.getIconPackName(editor)).filter(function (name) { + return name.length > 0 && !IconManager.has(name); + }).map(function (name) { + return { + url: editor.editorManager.baseURL + '/icons/' + name + '/icons.js', + name: Option.some(name) + }; + }); + }; + var loadIcons = function (scriptLoader, editor) { + getIconsUrlMetaFromUrl(editor).orThunk(function () { + return getIconsUrlMetaFromName(editor); + }).each(function (urlMeta) { + scriptLoader.add(urlMeta.url, noop, undefined, function () { + ErrorReporter.iconsLoadError(urlMeta.url, urlMeta.name.getOrUndefined()); + }); + }); + }; + var loadPlugins = function (settings, suffix) { + if (isArray(settings.plugins)) { + settings.plugins = settings.plugins.join(' '); + } + Tools.each(settings.external_plugins, function (url, name) { + PluginManager.load(name, url, noop, undefined, function () { + ErrorReporter.pluginLoadError(name, url); + }); + settings.plugins += ' ' + name; + }); + Tools.each(settings.plugins.split(/[ ,]/), function (plugin) { + plugin = Tools.trim(plugin); + if (plugin && !PluginManager.urls[plugin]) { + if (hasSkipLoadPrefix(plugin)) { + plugin = plugin.substr(1, plugin.length); + var dependencies = PluginManager.dependencies(plugin); + Tools.each(dependencies, function (dep) { + var defaultSettings = { + prefix: 'plugins/', + resource: dep, + suffix: '/plugin' + suffix + '.js' + }; + dep = PluginManager.createUrl(defaultSettings, dep); + PluginManager.load(dep.resource, dep, noop, undefined, function () { + ErrorReporter.pluginLoadError(dep.prefix + dep.resource + dep.suffix, dep.resource); + }); + }); + } else { + var url_2 = { + prefix: 'plugins/', + resource: plugin, + suffix: '/plugin' + suffix + '.js' + }; + PluginManager.load(plugin, url_2, noop, undefined, function () { + ErrorReporter.pluginLoadError(url_2.prefix + url_2.resource + url_2.suffix, plugin); + }); + } + } + }); + }; + var loadScripts = function (editor, suffix) { + var scriptLoader = ScriptLoader.ScriptLoader; + loadTheme(scriptLoader, editor, suffix, function () { + loadLanguage(scriptLoader, editor); + loadIcons(scriptLoader, editor); + loadPlugins(editor.settings, suffix); + scriptLoader.loadQueue(function () { + if (!editor.removed) { + Init.init(editor); + } + }, editor, function () { + if (!editor.removed) { + Init.init(editor); + } + }); + }); + }; + var render = function (editor) { + var settings = editor.settings, id = editor.id; + I18n.setCode(Settings.getLanguageCode(editor)); + var readyHandler = function () { + DOM$6.unbind(domGlobals.window, 'ready', readyHandler); + editor.render(); + }; + if (!EventUtils.Event.domLoaded) { + DOM$6.bind(domGlobals.window, 'ready', readyHandler); + return; + } + if (!editor.getElement()) { + return; + } + if (!Env.contentEditable) { + return; + } + if (!settings.inline) { + editor.orgVisibility = editor.getElement().style.visibility; + editor.getElement().style.visibility = 'hidden'; + } else { + editor.inline = true; + } + var form = editor.getElement().form || DOM$6.getParent(id, 'form'); + if (form) { + editor.formElement = form; + if (settings.hidden_input && !NodeType.isTextareaOrInput(editor.getElement())) { + DOM$6.insertAfter(DOM$6.create('input', { + type: 'hidden', + name: id + }), id); + editor.hasHiddenInput = true; + } + editor.formEventDelegate = function (e) { + editor.fire(e.type, e); + }; + DOM$6.bind(form, 'submit reset', editor.formEventDelegate); + editor.on('reset', function () { + editor.resetContent(); + }); + if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) { + form._mceOldSubmit = form.submit; + form.submit = function () { + editor.editorManager.triggerSave(); + editor.setDirty(false); + return form._mceOldSubmit(form); + }; + } + } + editor.windowManager = WindowManager(editor); + editor.notificationManager = NotificationManager(editor); + if (settings.encoding === 'xml') { + editor.on('GetContent', function (e) { + if (e.save) { + e.content = DOM$6.encode(e.content); + } + }); + } + if (settings.add_form_submit_trigger) { + editor.on('submit', function () { + if (editor.initialized) { + editor.save(); + } + }); + } + if (settings.add_unload_trigger) { + editor._beforeUnload = function () { + if (editor.initialized && !editor.destroyed && !editor.isHidden()) { + editor.save({ + format: 'raw', + no_events: true, + set_dirty: false + }); + } + }; + editor.editorManager.on('BeforeUnload', editor._beforeUnload); + } + editor.editorManager.add(editor); + loadScripts(editor, editor.suffix); + }; + var Render = { render: render }; + + var internalContentEditableAttr = 'data-mce-contenteditable'; + var toggleClass = function (elm, cls, state) { + if (has$2(elm, cls) && state === false) { + remove$4(elm, cls); + } else if (state) { + add$3(elm, cls); + } + }; + var setEditorCommandState = function (editor, cmd, state) { + try { + editor.getDoc().execCommand(cmd, false, state); + } catch (ex) { + } + }; + var setContentEditable = function (elm, state) { + elm.dom().contentEditable = state ? 'true' : 'false'; + }; + var switchOffContentEditableTrue = function (elm) { + each(descendants$1(elm, '*[contenteditable="true"]'), function (elm) { + set(elm, internalContentEditableAttr, 'true'); + setContentEditable(elm, false); + }); + }; + var switchOnContentEditableTrue = function (elm) { + each(descendants$1(elm, '*[' + internalContentEditableAttr + '="true"]'), function (elm) { + remove(elm, internalContentEditableAttr); + setContentEditable(elm, true); + }); + }; + var removeFakeSelection = function (editor) { + Option.from(editor.selection.getNode()).each(function (elm) { + elm.removeAttribute('data-mce-selected'); + }); + }; + var restoreFakeSelection = function (editor) { + editor.selection.setRng(editor.selection.getRng()); + }; + var toggleReadOnly = function (editor, state) { + var body = Element.fromDom(editor.getBody()); + toggleClass(body, 'mce-content-readonly', state); + if (state) { + editor.selection.controlSelection.hideResizeRect(); + editor._selectionOverrides.hideFakeCaret(); + removeFakeSelection(editor); + editor.readonly = true; + setContentEditable(body, false); + switchOffContentEditableTrue(body); + } else { + editor.readonly = false; + setContentEditable(body, true); + switchOnContentEditableTrue(body); + setEditorCommandState(editor, 'StyleWithCSS', false); + setEditorCommandState(editor, 'enableInlineTableEditing', false); + setEditorCommandState(editor, 'enableObjectResizing', false); + if (EditorFocus.hasEditorOrUiFocus(editor)) { + editor.focus(); + } + restoreFakeSelection(editor); + editor.nodeChanged(); + } + }; + var isReadOnly = function (editor) { + return editor.readonly === true; + }; + var registerFilters = function (editor) { + editor.parser.addAttributeFilter('contenteditable', function (nodes) { + if (isReadOnly(editor)) { + each(nodes, function (node) { + node.attr(internalContentEditableAttr, node.attr('contenteditable')); + node.attr('contenteditable', 'false'); + }); + } + }); + editor.serializer.addAttributeFilter(internalContentEditableAttr, function (nodes) { + if (isReadOnly(editor)) { + each(nodes, function (node) { + node.attr('contenteditable', node.attr(internalContentEditableAttr)); + }); + } + }); + editor.serializer.addTempAttr(internalContentEditableAttr); + }; + var registerReadOnlyContentFilters = function (editor) { + if (editor.serializer) { + registerFilters(editor); + } else { + editor.on('PreInit', function () { + registerFilters(editor); + }); + } + }; + var preventReadOnlyEvents = function (e) { + var target = e.target; + if (e.type === 'click' && target.tagName === 'A') { + e.preventDefault(); + } + }; + var registerReadOnlySelectionBlockers = function (editor) { + editor.on('ShowCaret', function (e) { + if (isReadOnly(editor)) { + e.preventDefault(); + } + }); + editor.on('ObjectSelected', function (e) { + if (isReadOnly(editor)) { + e.preventDefault(); + } + }); + }; + + var defaultModes = [ + 'design', + 'readonly' + ]; + var switchToMode = function (editor, activeMode, availableModes, mode) { + var oldMode = availableModes[activeMode.get()]; + var newMode = availableModes[mode]; + try { + newMode.activate(); + } catch (e) { + domGlobals.console.error('problem while activating editor mode ' + mode + ':', e); + return; + } + oldMode.deactivate(); + if (oldMode.editorReadOnly !== newMode.editorReadOnly) { + toggleReadOnly(editor, newMode.editorReadOnly); + } + activeMode.set(mode); + Events.fireSwitchMode(editor, mode); + }; + var setMode = function (editor, availableModes, activeMode, mode) { + if (mode === activeMode.get()) { + return; + } else if (!has(availableModes, mode)) { + throw new Error('Editor mode \'' + mode + '\' is invalid'); + } + if (editor.initialized) { + switchToMode(editor, activeMode, availableModes, mode); + } else { + editor.on('init', function () { + return switchToMode(editor, activeMode, availableModes, mode); + }); + } + }; + var registerMode = function (availableModes, mode, api) { + var _a; + if (contains(defaultModes, mode)) { + throw new Error('Cannot override default mode ' + mode); + } + return __assign({}, availableModes, (_a = {}, _a[mode] = __assign({}, api, { + deactivate: function () { + try { + api.deactivate(); + } catch (e) { + domGlobals.console.error('problem while deactivating editor mode ' + mode + ':', e); + } + } + }), _a)); + }; + + var create$4 = function (editor) { + var activeMode = Cell('design'); + var availableModes = Cell({ + design: { + activate: noop, + deactivate: noop, + editorReadOnly: false + }, + readonly: { + activate: noop, + deactivate: noop, + editorReadOnly: true + } + }); + registerReadOnlyContentFilters(editor); + registerReadOnlySelectionBlockers(editor); + return { + isReadOnly: function () { + return isReadOnly(editor); + }, + set: function (mode) { + return setMode(editor, availableModes.get(), activeMode, mode); + }, + get: function () { + return activeMode.get(); + }, + register: function (mode, api) { + availableModes.set(registerMode(availableModes.get(), mode, api)); + } + }; + }; + + var hasOnlyOneChild$1 = function (node) { + return node.firstChild && node.firstChild === node.lastChild; + }; + var isPaddingNode = function (node) { + return node.name === 'br' || node.value === '\xA0'; + }; + var isPaddedEmptyBlock = function (schema, node) { + var blockElements = schema.getBlockElements(); + return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild); + }; + var isEmptyFragmentElement = function (schema, node) { + var nonEmptyElements = schema.getNonEmptyElements(); + return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node)); + }; + var isListFragment = function (schema, fragment) { + var firstChild = fragment.firstChild; + var lastChild = fragment.lastChild; + if (firstChild && firstChild.name === 'meta') { + firstChild = firstChild.next; + } + if (lastChild && lastChild.attr('id') === 'mce_marker') { + lastChild = lastChild.prev; + } + if (isEmptyFragmentElement(schema, lastChild)) { + lastChild = lastChild.prev; + } + if (!firstChild || firstChild !== lastChild) { + return false; + } + return firstChild.name === 'ul' || firstChild.name === 'ol'; + }; + var cleanupDomFragment = function (domFragment) { + var firstChild = domFragment.firstChild; + var lastChild = domFragment.lastChild; + if (firstChild && firstChild.nodeName === 'META') { + firstChild.parentNode.removeChild(firstChild); + } + if (lastChild && lastChild.id === 'mce_marker') { + lastChild.parentNode.removeChild(lastChild); + } + return domFragment; + }; + var toDomFragment = function (dom, serializer, fragment) { + var html = serializer.serialize(fragment); + var domFragment = dom.createFragment(html); + return cleanupDomFragment(domFragment); + }; + var listItems$1 = function (elm) { + return Tools.grep(elm.childNodes, function (child) { + return child.nodeName === 'LI'; + }); + }; + var isPadding = function (node) { + return node.data === '\xA0' || NodeType.isBr(node); + }; + var isListItemPadded = function (node) { + return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild); + }; + var isEmptyOrPadded = function (elm) { + return !elm.firstChild || isListItemPadded(elm); + }; + var trimListItems = function (elms) { + return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms; + }; + var getParentLi = function (dom, node) { + var parentBlock = dom.getParent(node, dom.isBlock); + return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null; + }; + var isParentBlockLi = function (dom, node) { + return !!getParentLi(dom, node); + }; + var getSplit = function (parentNode, rng) { + var beforeRng = rng.cloneRange(); + var afterRng = rng.cloneRange(); + beforeRng.setStartBefore(parentNode); + afterRng.setEndAfter(parentNode); + return [ + beforeRng.cloneContents(), + afterRng.cloneContents() + ]; + }; + var findFirstIn = function (node, rootNode) { + var caretPos = CaretPosition$1.before(node); + var caretWalker = CaretWalker(rootNode); + var newCaretPos = caretWalker.next(caretPos); + return newCaretPos ? newCaretPos.toRange() : null; + }; + var findLastOf = function (node, rootNode) { + var caretPos = CaretPosition$1.after(node); + var caretWalker = CaretWalker(rootNode); + var newCaretPos = caretWalker.prev(caretPos); + return newCaretPos ? newCaretPos.toRange() : null; + }; + var insertMiddle = function (target, elms, rootNode, rng) { + var parts = getSplit(target, rng); + var parentElm = target.parentNode; + parentElm.insertBefore(parts[0], target); + Tools.each(elms, function (li) { + parentElm.insertBefore(li, target); + }); + parentElm.insertBefore(parts[1], target); + parentElm.removeChild(target); + return findLastOf(elms[elms.length - 1], rootNode); + }; + var insertBefore$1 = function (target, elms, rootNode) { + var parentElm = target.parentNode; + Tools.each(elms, function (elm) { + parentElm.insertBefore(elm, target); + }); + return findFirstIn(target, rootNode); + }; + var insertAfter$1 = function (target, elms, rootNode, dom) { + dom.insertAfter(elms.reverse(), target); + return findLastOf(elms[0], rootNode); + }; + var insertAtCaret = function (serializer, dom, rng, fragment) { + var domFragment = toDomFragment(dom, serializer, fragment); + var liTarget = getParentLi(dom, rng.startContainer); + var liElms = trimListItems(listItems$1(domFragment.firstChild)); + var BEGINNING = 1, END = 2; + var rootNode = dom.getRoot(); + var isAt = function (location) { + var caretPos = CaretPosition$1.fromRangeStart(rng); + var caretWalker = CaretWalker(dom.getRoot()); + var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos); + return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true; + }; + if (isAt(BEGINNING)) { + return insertBefore$1(liTarget, liElms, rootNode); + } else if (isAt(END)) { + return insertAfter$1(liTarget, liElms, rootNode, dom); + } + return insertMiddle(liTarget, liElms, rootNode, rng); + }; + var InsertList = { + isListFragment: isListFragment, + insertAtCaret: insertAtCaret, + isParentBlockLi: isParentBlockLi, + trimListItems: trimListItems, + listItems: listItems$1 + }; + + var isAfterNbsp = function (container, offset) { + return NodeType.isText(container) && container.nodeValue[offset - 1] === '\xA0'; + }; + var trimOrPadLeftRight = function (rng, html) { + var container, offset; + container = rng.startContainer; + offset = rng.startOffset; + var hasSiblingText = function (siblingName) { + return container[siblingName] && container[siblingName].nodeType === 3; + }; + if (container.nodeType === 3) { + if (offset > 0) { + html = html.replace(/^ /, ' '); + } else if (!hasSiblingText('previousSibling')) { + html = html.replace(/^ /, ' '); + } + if (offset < container.length) { + html = html.replace(/ (
|)$/, ' '); + } else if (!hasSiblingText('nextSibling')) { + html = html.replace(/( | )(
|)$/, ' '); + } + } + return html; + }; + var trimNbspAfterDeleteAndPadValue = function (rng, value) { + var container, offset; + container = rng.startContainer; + offset = rng.startOffset; + if (container.nodeType === 3 && rng.collapsed) { + if (container.data[offset] === '\xA0') { + container.deleteData(offset, 1); + if (!/[\u00a0| ]$/.test(value)) { + value += ' '; + } + } else if (container.data[offset - 1] === '\xA0') { + container.deleteData(offset - 1, 1); + if (!/[\u00a0| ]$/.test(value)) { + value = ' ' + value; + } + } + } + return value; + }; + + var isTableCell$5 = NodeType.matchNodeNames([ + 'td', + 'th' + ]); + var selectionSetContent = function (editor, content) { + var rng = editor.selection.getRng(); + var container = rng.startContainer; + var offset = rng.startOffset; + if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) { + container.insertData(offset - 1, ' '); + container.deleteData(offset, 1); + rng.setStart(container, offset); + rng.setEnd(container, offset); + editor.selection.setRng(rng); + } + editor.selection.setContent(content); + }; + var validInsertion = function (editor, value, parentNode) { + if (parentNode.getAttribute('data-mce-bogus') === 'all') { + parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode); + } else { + var node = parentNode.firstChild; + var node2 = parentNode.lastChild; + if (!node || node === node2 && node.nodeName === 'BR') { + editor.dom.setHTML(parentNode, value); + } else { + selectionSetContent(editor, value); + } + } + }; + var trimBrsFromTableCell = function (dom, elm) { + Option.from(dom.getParent(elm, 'td,th')).map(Element.fromDom).each(PaddingBr.trimBlockTrailingBr); + }; + var reduceInlineTextElements = function (editor, merge) { + var textInlineElements = editor.schema.getTextInlineElements(); + var dom = editor.dom; + if (merge) { + var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom); + Tools.each(dom.select('*[data-mce-fragment]'), function (node) { + for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) { + if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) { + dom.remove(node, true); + } + } + }); + } + }; + var markFragmentElements = function (fragment) { + var node = fragment; + while (node = node.walk()) { + if (node.type === 1) { + node.attr('data-mce-fragment', '1'); + } + } + }; + var umarkFragmentElements = function (elm) { + Tools.each(elm.getElementsByTagName('*'), function (elm) { + elm.removeAttribute('data-mce-fragment'); + }); + }; + var isPartOfFragment = function (node) { + return !!node.getAttribute('data-mce-fragment'); + }; + var canHaveChildren = function (editor, node) { + return node && !editor.schema.getShortEndedElements()[node.nodeName]; + }; + var moveSelectionToMarker = function (editor, marker) { + var parentEditableFalseElm, parentBlock, nextRng; + var dom = editor.dom, selection = editor.selection; + var node, node2; + var getContentEditableFalseParent = function (node) { + var root = editor.getBody(); + for (; node && node !== root; node = node.parentNode) { + if (editor.dom.getContentEditable(node) === 'false') { + return node; + } + } + return null; + }; + if (!marker) { + return; + } + editor.selection.scrollIntoView(marker); + parentEditableFalseElm = getContentEditableFalseParent(marker); + if (parentEditableFalseElm) { + dom.remove(marker); + selection.select(parentEditableFalseElm); + return; + } + var rng = dom.createRng(); + node = marker.previousSibling; + if (node && node.nodeType === 3) { + rng.setStart(node, node.nodeValue.length); + if (!Env.ie) { + node2 = marker.nextSibling; + if (node2 && node2.nodeType === 3) { + node.appendData(node2.data); + node2.parentNode.removeChild(node2); + } + } + } else { + rng.setStartBefore(marker); + rng.setEndBefore(marker); + } + var findNextCaretRng = function (rng) { + var caretPos = CaretPosition$1.fromRangeStart(rng); + var caretWalker = CaretWalker(editor.getBody()); + caretPos = caretWalker.next(caretPos); + if (caretPos) { + return caretPos.toRange(); + } + }; + parentBlock = dom.getParent(marker, dom.isBlock); + dom.remove(marker); + if (parentBlock && dom.isEmpty(parentBlock)) { + editor.$(parentBlock).empty(); + rng.setStart(parentBlock, 0); + rng.setEnd(parentBlock, 0); + if (!isTableCell$5(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) { + rng = nextRng; + dom.remove(parentBlock); + } else { + dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' })); + } + } + selection.setRng(rng); + }; + var insertHtmlAtCaret = function (editor, value, details) { + var parser, serializer, parentNode, rootNode, fragment, args; + var marker, rng, node, bookmarkHtml, merge; + var selection = editor.selection, dom = editor.dom; + if (/^ | $/.test(value)) { + value = trimOrPadLeftRight(selection.getRng(), value); + } + parser = editor.parser; + merge = details.merge; + serializer = Serializer({ validate: editor.settings.validate }, editor.schema); + bookmarkHtml = '​'; + args = { + content: value, + format: 'html', + selection: true, + paste: details.paste + }; + args = editor.fire('BeforeSetContent', args); + if (args.isDefaultPrevented()) { + editor.fire('SetContent', { + content: args.content, + format: 'html', + selection: true, + paste: details.paste + }); + return; + } + value = args.content; + if (value.indexOf('{$caret}') === -1) { + value += '{$caret}'; + } + value = value.replace(/\{\$caret\}/, bookmarkHtml); + rng = selection.getRng(); + var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null); + var body = editor.getBody(); + if (caretElement === body && selection.isCollapsed()) { + if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) { + rng = dom.createRng(); + rng.setStart(body.firstChild, 0); + rng.setEnd(body.firstChild, 0); + selection.setRng(rng); + } + } + if (!selection.isCollapsed()) { + editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng())); + editor.getDoc().execCommand('Delete', false, null); + value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value); + } + parentNode = selection.getNode(); + var parserArgs = { + context: parentNode.nodeName.toLowerCase(), + data: details.data, + insert: true + }; + fragment = parser.parse(value, parserArgs); + if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) { + rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment); + editor.selection.setRng(rng); + editor.fire('SetContent', args); + return; + } + markFragmentElements(fragment); + node = fragment.lastChild; + if (node.attr('id') === 'mce_marker') { + marker = node; + for (node = node.prev; node; node = node.walk(true)) { + if (node.type === 3 || !dom.isBlock(node.name)) { + if (editor.schema.isValidChild(node.parent.name, 'span')) { + node.parent.insert(marker, node, node.name === 'br'); + } + break; + } + } + } + editor._selectionOverrides.showBlockCaretContainer(parentNode); + if (!parserArgs.invalid) { + value = serializer.serialize(fragment); + validInsertion(editor, value, parentNode); + } else { + selectionSetContent(editor, bookmarkHtml); + parentNode = selection.getNode(); + rootNode = editor.getBody(); + if (parentNode.nodeType === 9) { + parentNode = node = rootNode; + } else { + node = parentNode; + } + while (node !== rootNode) { + parentNode = node; + node = node.parentNode; + } + value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode); + value = serializer.serialize(parser.parse(value.replace(//i, function () { + return serializer.serialize(fragment); + }))); + if (parentNode === rootNode) { + dom.setHTML(rootNode, value); + } else { + dom.setOuterHTML(parentNode, value); + } + } + reduceInlineTextElements(editor, merge); + moveSelectionToMarker(editor, dom.get('mce_marker')); + umarkFragmentElements(editor.getBody()); + trimBrsFromTableCell(editor.dom, editor.selection.getStart()); + editor.fire('SetContent', args); + editor.addVisual(); + }; + var processValue = function (value) { + var details; + if (typeof value !== 'string') { + details = Tools.extend({ + paste: value.paste, + data: { paste: value.paste } + }, value); + return { + content: value.content, + details: details + }; + } + return { + content: value, + details: {} + }; + }; + var insertAtCaret$1 = function (editor, value) { + var result = processValue(value); + insertHtmlAtCaret(editor, result.content, result.details); + }; + var InsertContent = { insertAtCaret: insertAtCaret$1 }; + + var nativeCommand = function (editor, command) { + editor.getDoc().execCommand(command, false, null); + }; + var deleteCommand = function (editor) { + if (Outdent.backspaceDelete(editor, false)) { + return; + } else if (CefDelete.backspaceDelete(editor, false)) { + return; + } else if (CefBoundaryDelete.backspaceDelete(editor, false)) { + return; + } else if (BoundaryDelete.backspaceDelete(editor, false)) { + return; + } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) { + return; + } else if (TableDelete.backspaceDelete(editor)) { + return; + } else if (BlockRangeDelete.backspaceDelete(editor, false)) { + return; + } else if (InlineFormatDelete.backspaceDelete(editor, false)) { + return; + } else { + nativeCommand(editor, 'Delete'); + DeleteUtils.paddEmptyBody(editor); + } + }; + var forwardDeleteCommand = function (editor) { + if (CefDelete.backspaceDelete(editor, true)) { + return; + } else if (CefBoundaryDelete.backspaceDelete(editor, true)) { + return; + } else if (BoundaryDelete.backspaceDelete(editor, true)) { + return; + } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) { + return; + } else if (TableDelete.backspaceDelete(editor)) { + return; + } else if (BlockRangeDelete.backspaceDelete(editor, true)) { + return; + } else if (InlineFormatDelete.backspaceDelete(editor, true)) { + return; + } else { + nativeCommand(editor, 'ForwardDelete'); + } + }; + var DeleteCommands = { + deleteCommand: deleteCommand, + forwardDeleteCommand: forwardDeleteCommand + }; + + var getSpecifiedFontProp = function (propName, rootElm, elm) { + var getProperty = function (elm) { + return getRaw(elm, propName); + }; + var isRoot = function (elm) { + return eq(Element.fromDom(rootElm), elm); + }; + return closest(Element.fromDom(elm), function (elm) { + return getProperty(elm).isSome(); + }, isRoot).bind(getProperty); + }; + var round$1 = function (number, precision) { + var factor = Math.pow(10, precision); + return Math.round(number * factor) / factor; + }; + var toPt = function (fontSize, precision) { + if (/[0-9.]+px$/.test(fontSize)) { + return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt'; + } + return fontSize; + }; + var normalizeFontFamily = function (fontFamily) { + return fontFamily.replace(/[\'\"\\]/g, '').replace(/,\s+/g, ','); + }; + var getComputedFontProp = function (propName, elm) { + return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true)); + }; + var getFontProp = function (propName) { + return function (rootElm, elm) { + return Option.from(elm).map(Element.fromDom).filter(isElement).bind(function (element) { + return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom())); + }).getOr(''); + }; + }; + var FontInfo = { + getFontSize: getFontProp('font-size'), + getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')), + toPt: toPt + }; + + var findFirstCaretElement = function (editor) { + return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) { + var container = caret.container(); + return NodeType.isText(container) ? container.parentNode : container; + }); + }; + var isRangeAtStartOfNode = function (rng, root) { + return rng.startContainer === root && rng.startOffset === 0; + }; + var getCaretElement = function (editor) { + return Option.from(editor.selection.getRng()).bind(function (rng) { + var root = editor.getBody(); + return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true)); + }); + }; + var fromFontSizeNumber = function (editor, value) { + if (/^[0-9\.]+$/.test(value)) { + var fontSizeNumber = parseInt(value, 10); + if (fontSizeNumber >= 1 && fontSizeNumber <= 7) { + var fontSizes = Settings.getFontStyleValues(editor); + var fontClasses = Settings.getFontSizeClasses(editor); + if (fontClasses) { + return fontClasses[fontSizeNumber - 1] || value; + } else { + return fontSizes[fontSizeNumber - 1] || value; + } + } else { + return value; + } + } else { + return value; + } + }; + var normalizeFontNames = function (font) { + var fonts = font.split(/\s*,\s*/); + return map(fonts, function (font) { + if (font.indexOf(' ') !== -1 && !(startsWith(font, '"') || startsWith(font, '\''))) { + return '"' + font + '"'; + } else { + return font; + } + }).join(','); + }; + var fontNameAction = function (editor, value) { + var font = fromFontSizeNumber(editor, value); + editor.formatter.toggle('fontname', { value: normalizeFontNames(font) }); + editor.nodeChanged(); + }; + var fontNameQuery = function (editor) { + return getCaretElement(editor).fold(function () { + return findFirstCaretElement(editor).map(function (caretElement) { + return FontInfo.getFontFamily(editor.getBody(), caretElement); + }).getOr(''); + }, function (caretElement) { + return FontInfo.getFontFamily(editor.getBody(), caretElement); + }); + }; + var fontSizeAction = function (editor, value) { + editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) }); + editor.nodeChanged(); + }; + var fontSizeQuery = function (editor) { + return getCaretElement(editor).fold(function () { + return findFirstCaretElement(editor).map(function (caretElement) { + return FontInfo.getFontSize(editor.getBody(), caretElement); + }).getOr(''); + }, function (caretElement) { + return FontInfo.getFontSize(editor.getBody(), caretElement); + }); + }; + + var each$g = Tools.each; + var map$3 = Tools.map, inArray$2 = Tools.inArray; + var EditorCommands = function () { + function EditorCommands(editor) { + this.commands = { + state: {}, + exec: {}, + value: {} + }; + this.editor = editor; + this.setupCommands(editor); + } + EditorCommands.prototype.execCommand = function (command, ui, value, args) { + var func, customCommand, state = false; + var self = this; + if (self.editor.removed) { + return; + } + if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) { + self.editor.focus(); + } else { + SelectionBookmark.restore(self.editor); + } + args = self.editor.fire('BeforeExecCommand', { + command: command, + ui: ui, + value: value + }); + if (args.isDefaultPrevented()) { + return false; + } + customCommand = command.toLowerCase(); + if (func = self.commands.exec[customCommand]) { + func(customCommand, ui, value); + self.editor.fire('ExecCommand', { + command: command, + ui: ui, + value: value + }); + return true; + } + each$g(this.editor.plugins, function (p) { + if (p.execCommand && p.execCommand(command, ui, value)) { + self.editor.fire('ExecCommand', { + command: command, + ui: ui, + value: value + }); + state = true; + return false; + } + }); + if (state) { + return state; + } + if (self.editor.theme && self.editor.theme.execCommand && self.editor.theme.execCommand(command, ui, value)) { + self.editor.fire('ExecCommand', { + command: command, + ui: ui, + value: value + }); + return true; + } + try { + state = self.editor.getDoc().execCommand(command, ui, value); + } catch (ex) { + } + if (state) { + self.editor.fire('ExecCommand', { + command: command, + ui: ui, + value: value + }); + return true; + } + return false; + }; + EditorCommands.prototype.queryCommandState = function (command) { + var func; + if (this.editor.quirks.isHidden() || this.editor.removed) { + return; + } + command = command.toLowerCase(); + if (func = this.commands.state[command]) { + return func(command); + } + try { + return this.editor.getDoc().queryCommandState(command); + } catch (ex) { + } + return false; + }; + EditorCommands.prototype.queryCommandValue = function (command) { + var func; + if (this.editor.quirks.isHidden() || this.editor.removed) { + return; + } + command = command.toLowerCase(); + if (func = this.commands.value[command]) { + return func(command); + } + try { + return this.editor.getDoc().queryCommandValue(command); + } catch (ex) { + } + }; + EditorCommands.prototype.addCommands = function (commandList, type) { + var self = this; + type = type || 'exec'; + each$g(commandList, function (callback, command) { + each$g(command.toLowerCase().split(','), function (command) { + self.commands[type][command] = callback; + }); + }); + }; + EditorCommands.prototype.addCommand = function (command, callback, scope) { + var _this = this; + command = command.toLowerCase(); + this.commands.exec[command] = function (command, ui, value, args) { + return callback.call(scope || _this.editor, ui, value, args); + }; + }; + EditorCommands.prototype.queryCommandSupported = function (command) { + command = command.toLowerCase(); + if (this.commands.exec[command]) { + return true; + } + try { + return this.editor.getDoc().queryCommandSupported(command); + } catch (ex) { + } + return false; + }; + EditorCommands.prototype.addQueryStateHandler = function (command, callback, scope) { + var _this = this; + command = command.toLowerCase(); + this.commands.state[command] = function () { + return callback.call(scope || _this.editor); + }; + }; + EditorCommands.prototype.addQueryValueHandler = function (command, callback, scope) { + var _this = this; + command = command.toLowerCase(); + this.commands.value[command] = function () { + return callback.call(scope || _this.editor); + }; + }; + EditorCommands.prototype.hasCustomCommand = function (command) { + command = command.toLowerCase(); + return !!this.commands.exec[command]; + }; + EditorCommands.prototype.execNativeCommand = function (command, ui, value) { + if (ui === undefined) { + ui = false; + } + if (value === undefined) { + value = null; + } + return this.editor.getDoc().execCommand(command, ui, value); + }; + EditorCommands.prototype.isFormatMatch = function (name) { + return this.editor.formatter.match(name); + }; + EditorCommands.prototype.toggleFormat = function (name, value) { + this.editor.formatter.toggle(name, value ? { value: value } : undefined); + this.editor.nodeChanged(); + }; + EditorCommands.prototype.storeSelection = function (type) { + this.selectionBookmark = this.editor.selection.getBookmark(type); + }; + EditorCommands.prototype.restoreSelection = function () { + this.editor.selection.moveToBookmark(this.selectionBookmark); + }; + EditorCommands.prototype.setupCommands = function (editor) { + var self = this; + this.addCommands({ + 'mceResetDesignMode,mceBeginUndoLevel': function () { + }, + 'mceEndUndoLevel,mceAddUndoLevel': function () { + editor.undoManager.add(); + }, + 'Cut,Copy,Paste': function (command) { + var doc = editor.getDoc(); + var failed; + try { + self.execNativeCommand(command); + } catch (ex) { + failed = true; + } + if (command === 'paste' && !doc.queryCommandEnabled(command)) { + failed = true; + } + if (failed || !doc.queryCommandSupported(command)) { + var msg = editor.translate('Your browser doesn\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.'); + if (Env.mac) { + msg = msg.replace(/Ctrl\+/g, '\u2318+'); + } + editor.notificationManager.open({ + text: msg, + type: 'error' + }); + } + }, + 'unlink': function () { + if (editor.selection.isCollapsed()) { + var elm = editor.dom.getParent(editor.selection.getStart(), 'a'); + if (elm) { + editor.dom.remove(elm, true); + } + return; + } + editor.formatter.remove('link'); + }, + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) { + var align = command.substring(7); + if (align === 'full') { + align = 'justify'; + } + each$g('left,center,right,justify'.split(','), function (name) { + if (align !== name) { + editor.formatter.remove('align' + name); + } + }); + if (align !== 'none') { + self.toggleFormat('align' + align); + } + }, + 'InsertUnorderedList,InsertOrderedList': function (command) { + var listElm, listParent; + self.execNativeCommand(command); + listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul'); + if (listElm) { + listParent = listElm.parentNode; + if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) { + self.storeSelection(); + editor.dom.split(listParent, listElm); + self.restoreSelection(); + } + } + }, + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) { + self.toggleFormat(command); + }, + 'ForeColor,HiliteColor': function (command, ui, value) { + self.toggleFormat(command, value); + }, + 'FontName': function (command, ui, value) { + fontNameAction(editor, value); + }, + 'FontSize': function (command, ui, value) { + fontSizeAction(editor, value); + }, + 'RemoveFormat': function (command) { + editor.formatter.remove(command); + }, + 'mceBlockQuote': function () { + self.toggleFormat('blockquote'); + }, + 'FormatBlock': function (command, ui, value) { + return self.toggleFormat(value || 'p'); + }, + 'mceCleanup': function () { + var bookmark = editor.selection.getBookmark(); + editor.setContent(editor.getContent()); + editor.selection.moveToBookmark(bookmark); + }, + 'mceRemoveNode': function (command, ui, value) { + var node = value || editor.selection.getNode(); + if (node !== editor.getBody()) { + self.storeSelection(); + editor.dom.remove(node, true); + self.restoreSelection(); + } + }, + 'mceSelectNodeDepth': function (command, ui, value) { + var counter = 0; + editor.dom.getParent(editor.selection.getNode(), function (node) { + if (node.nodeType === 1 && counter++ === value) { + editor.selection.select(node); + return false; + } + }, editor.getBody()); + }, + 'mceSelectNode': function (command, ui, value) { + editor.selection.select(value); + }, + 'mceInsertContent': function (command, ui, value) { + InsertContent.insertAtCaret(editor, value); + }, + 'mceInsertRawHTML': function (command, ui, value) { + editor.selection.setContent('tiny_mce_marker'); + var content = editor.getContent(); + editor.setContent(content.replace(/tiny_mce_marker/g, function () { + return value; + })); + }, + 'mceInsertNewLine': function (command, ui, value) { + InsertNewLine.insert(editor, value); + }, + 'mceToggleFormat': function (command, ui, value) { + self.toggleFormat(value); + }, + 'mceSetContent': function (command, ui, value) { + editor.setContent(value); + }, + 'Indent,Outdent': function (command) { + handle(editor, command); + }, + 'mceRepaint': function () { + }, + 'InsertHorizontalRule': function () { + editor.execCommand('mceInsertContent', false, '
'); + }, + 'mceToggleVisualAid': function () { + editor.hasVisual = !editor.hasVisual; + editor.addVisual(); + }, + 'mceReplaceContent': function (command, ui, value) { + editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, editor.selection.getContent({ format: 'text' }))); + }, + 'mceInsertLink': function (command, ui, value) { + var anchor; + if (typeof value === 'string') { + value = { href: value }; + } + anchor = editor.dom.getParent(editor.selection.getNode(), 'a'); + value.href = value.href.replace(/ /g, '%20'); + if (!anchor || !value.href) { + editor.formatter.remove('link'); + } + if (value.href) { + editor.formatter.apply('link', value, anchor); + } + }, + 'selectAll': function () { + var editingHost = editor.dom.getParent(editor.selection.getStart(), NodeType.isContentEditableTrue); + if (editingHost) { + var rng = editor.dom.createRng(); + rng.selectNodeContents(editingHost); + editor.selection.setRng(rng); + } + }, + 'delete': function () { + DeleteCommands.deleteCommand(editor); + }, + 'forwardDelete': function () { + DeleteCommands.forwardDeleteCommand(editor); + }, + 'mceNewDocument': function () { + editor.setContent(''); + }, + 'InsertLineBreak': function (command, ui, value) { + InsertBr.insert(editor, value); + return true; + } + }); + var alignStates = function (name) { + return function () { + var nodes = editor.selection.isCollapsed() ? [editor.dom.getParent(editor.selection.getNode(), editor.dom.isBlock)] : editor.selection.getSelectedBlocks(); + var matches = map$3(nodes, function (node) { + return !!editor.formatter.matchNode(node, name); + }); + return inArray$2(matches, true) !== -1; + }; + }; + self.addCommands({ + 'JustifyLeft': alignStates('alignleft'), + 'JustifyCenter': alignStates('aligncenter'), + 'JustifyRight': alignStates('alignright'), + 'JustifyFull': alignStates('alignjustify'), + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) { + return self.isFormatMatch(command); + }, + 'mceBlockQuote': function () { + return self.isFormatMatch('blockquote'); + }, + 'Outdent': function () { + return canOutdent(editor); + }, + 'InsertUnorderedList,InsertOrderedList': function (command) { + var list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol'); + return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL'); + } + }, 'state'); + self.addCommands({ + Undo: function () { + editor.undoManager.undo(); + }, + Redo: function () { + editor.undoManager.redo(); + } + }); + self.addQueryValueHandler('FontName', function () { + return fontNameQuery(editor); + }, this); + self.addQueryValueHandler('FontSize', function () { + return fontSizeQuery(editor); + }, this); + }; + return EditorCommands; + }(); + + var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' '); + var EventDispatcher = function () { + function EventDispatcher(settings) { + this.bindings = {}; + this.settings = settings || {}; + this.scope = this.settings.scope || this; + this.toggleEvent = this.settings.toggleEvent || never; + } + EventDispatcher.isNative = function (name) { + return !!nativeEvents[name.toLowerCase()]; + }; + EventDispatcher.prototype.fire = function (name, args) { + var handlers, i, l, callback; + name = name.toLowerCase(); + args = args || {}; + args.type = name; + if (!args.target) { + args.target = this.scope; + } + if (!args.preventDefault) { + args.preventDefault = function () { + args.isDefaultPrevented = always; + }; + args.stopPropagation = function () { + args.isPropagationStopped = always; + }; + args.stopImmediatePropagation = function () { + args.isImmediatePropagationStopped = always; + }; + args.isDefaultPrevented = never; + args.isPropagationStopped = never; + args.isImmediatePropagationStopped = never; + } + if (this.settings.beforeFire) { + this.settings.beforeFire(args); + } + handlers = this.bindings[name]; + if (handlers) { + for (i = 0, l = handlers.length; i < l; i++) { + callback = handlers[i]; + if (callback.once) { + this.off(name, callback.func); + } + if (args.isImmediatePropagationStopped()) { + args.stopPropagation(); + return args; + } + if (callback.func.call(this.scope, args) === false) { + args.preventDefault(); + return args; + } + } + } + return args; + }; + EventDispatcher.prototype.on = function (name, callback, prepend, extra) { + var handlers, names, i; + if (callback === false) { + callback = never; + } + if (callback) { + var wrappedCallback = { func: callback }; + if (extra) { + Tools.extend(wrappedCallback, extra); + } + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + handlers = this.bindings[name]; + if (!handlers) { + handlers = this.bindings[name] = []; + this.toggleEvent(name, true); + } + if (prepend) { + handlers.unshift(wrappedCallback); + } else { + handlers.push(wrappedCallback); + } + } + } + return this; + }; + EventDispatcher.prototype.off = function (name, callback) { + var i, handlers, bindingName, names, hi; + if (name) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + handlers = this.bindings[name]; + if (!name) { + for (bindingName in this.bindings) { + this.toggleEvent(bindingName, false); + delete this.bindings[bindingName]; + } + return this; + } + if (handlers) { + if (!callback) { + handlers.length = 0; + } else { + hi = handlers.length; + while (hi--) { + if (handlers[hi].func === callback) { + handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1)); + this.bindings[name] = handlers; + } + } + } + if (!handlers.length) { + this.toggleEvent(name, false); + delete this.bindings[name]; + } + } + } + } else { + for (name in this.bindings) { + this.toggleEvent(name, false); + } + this.bindings = {}; + } + return this; + }; + EventDispatcher.prototype.once = function (name, callback, prepend) { + return this.on(name, callback, prepend, { once: true }); + }; + EventDispatcher.prototype.has = function (name) { + name = name.toLowerCase(); + return !(!this.bindings[name] || this.bindings[name].length === 0); + }; + return EventDispatcher; + }(); + + var getEventDispatcher = function (obj) { + if (!obj._eventDispatcher) { + obj._eventDispatcher = new EventDispatcher({ + scope: obj, + toggleEvent: function (name, state) { + if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) { + obj.toggleNativeEvent(name, state); + } + } + }); + } + return obj._eventDispatcher; + }; + var Observable = { + fire: function (name, args, bubble) { + var self = this; + if (self.removed && name !== 'remove' && name !== 'detach') { + return args; + } + var dispatcherArgs = getEventDispatcher(self).fire(name, args); + if (bubble !== false && self.parent) { + var parent = self.parent(); + while (parent && !dispatcherArgs.isPropagationStopped()) { + parent.fire(name, dispatcherArgs, false); + parent = parent.parent(); + } + } + return dispatcherArgs; + }, + on: function (name, callback, prepend) { + return getEventDispatcher(this).on(name, callback, prepend); + }, + off: function (name, callback) { + return getEventDispatcher(this).off(name, callback); + }, + once: function (name, callback) { + return getEventDispatcher(this).once(name, callback); + }, + hasEventListeners: function (name) { + return getEventDispatcher(this).has(name); + } + }; + + var DOM$7 = DOMUtils$1.DOM; + var customEventRootDelegates; + var getEventTarget = function (editor, eventName) { + if (eventName === 'selectionchange') { + return editor.getDoc(); + } + if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) { + return editor.getDoc().documentElement; + } + if (editor.settings.event_root) { + if (!editor.eventRoot) { + editor.eventRoot = DOM$7.select(editor.settings.event_root)[0]; + } + return editor.eventRoot; + } + return editor.getBody(); + }; + var isListening = function (editor) { + return !editor.hidden && !isReadOnly(editor); + }; + var fireEvent = function (editor, eventName, e) { + if (isListening(editor)) { + editor.fire(eventName, e); + } else if (isReadOnly(editor)) { + preventReadOnlyEvents(e); + } + }; + var bindEventDelegate = function (editor, eventName) { + var eventRootElm, delegate; + if (!editor.delegates) { + editor.delegates = {}; + } + if (editor.delegates[eventName] || editor.removed) { + return; + } + eventRootElm = getEventTarget(editor, eventName); + if (editor.settings.event_root) { + if (!customEventRootDelegates) { + customEventRootDelegates = {}; + editor.editorManager.on('removeEditor', function () { + var name; + if (!editor.editorManager.activeEditor) { + if (customEventRootDelegates) { + for (name in customEventRootDelegates) { + editor.dom.unbind(getEventTarget(editor, name)); + } + customEventRootDelegates = null; + } + } + }); + } + if (customEventRootDelegates[eventName]) { + return; + } + delegate = function (e) { + var target = e.target; + var editors = editor.editorManager.get(); + var i = editors.length; + while (i--) { + var body = editors[i].getBody(); + if (body === target || DOM$7.isChildOf(target, body)) { + fireEvent(editors[i], eventName, e); + } + } + }; + customEventRootDelegates[eventName] = delegate; + DOM$7.bind(eventRootElm, eventName, delegate); + } else { + delegate = function (e) { + fireEvent(editor, eventName, e); + }; + DOM$7.bind(eventRootElm, eventName, delegate); + editor.delegates[eventName] = delegate; + } + }; + var EditorObservable = __assign({}, Observable, { + bindPendingEventDelegates: function () { + var self = this; + Tools.each(self._pendingNativeEvents, function (name) { + bindEventDelegate(self, name); + }); + }, + toggleNativeEvent: function (name, state) { + var self = this; + if (name === 'focus' || name === 'blur') { + return; + } + if (state) { + if (self.initialized) { + bindEventDelegate(self, name); + } else { + if (!self._pendingNativeEvents) { + self._pendingNativeEvents = [name]; + } else { + self._pendingNativeEvents.push(name); + } + } + } else if (self.initialized) { + self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]); + delete self.delegates[name]; + } + }, + unbindAllNativeEvents: function () { + var self = this; + var body = self.getBody(); + var dom = self.dom; + var name; + if (self.delegates) { + for (name in self.delegates) { + self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]); + } + delete self.delegates; + } + if (!self.inline && body && dom) { + body.onload = null; + dom.unbind(self.getWin()); + dom.unbind(self.getDoc()); + } + if (dom) { + dom.unbind(body); + dom.unbind(self.getContainer()); + } + } + }); + + var each$h = Tools.each, explode$3 = Tools.explode; + var keyCodeLookup = { + f1: 112, + f2: 113, + f3: 114, + f4: 115, + f5: 116, + f6: 117, + f7: 118, + f8: 119, + f9: 120, + f10: 121, + f11: 122, + f12: 123 + }; + var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access'); + var Shortcuts = function () { + function Shortcuts(editor) { + this.shortcuts = {}; + this.pendingPatterns = []; + this.editor = editor; + var self = this; + editor.on('keyup keypress keydown', function (e) { + if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) { + each$h(self.shortcuts, function (shortcut) { + if (self.matchShortcut(e, shortcut)) { + self.pendingPatterns = shortcut.subpatterns.slice(0); + if (e.type === 'keydown') { + self.executeShortcutAction(shortcut); + } + return true; + } + }); + if (self.matchShortcut(e, self.pendingPatterns[0])) { + if (self.pendingPatterns.length === 1) { + if (e.type === 'keydown') { + self.executeShortcutAction(self.pendingPatterns[0]); + } + } + self.pendingPatterns.shift(); + } + } + }); + } + Shortcuts.prototype.add = function (pattern, desc, cmdFunc, scope) { + var self = this; + var cmd; + cmd = cmdFunc; + if (typeof cmdFunc === 'string') { + cmdFunc = function () { + self.editor.execCommand(cmd, false, null); + }; + } else if (Tools.isArray(cmd)) { + cmdFunc = function () { + self.editor.execCommand(cmd[0], cmd[1], cmd[2]); + }; + } + each$h(explode$3(Tools.trim(pattern)), function (pattern) { + var shortcut = self.createShortcut(pattern, desc, cmdFunc, scope); + self.shortcuts[shortcut.id] = shortcut; + }); + return true; + }; + Shortcuts.prototype.remove = function (pattern) { + var shortcut = this.createShortcut(pattern); + if (this.shortcuts[shortcut.id]) { + delete this.shortcuts[shortcut.id]; + return true; + } + return false; + }; + Shortcuts.prototype.parseShortcut = function (pattern) { + var id, key; + var shortcut = {}; + each$h(explode$3(pattern.toLowerCase(), '+'), function (value) { + if (value in modifierNames) { + shortcut[value] = true; + } else { + if (/^[0-9]{2,}$/.test(value)) { + shortcut.keyCode = parseInt(value, 10); + } else { + shortcut.charCode = value.charCodeAt(0); + shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0); + } + } + }); + id = [shortcut.keyCode]; + for (key in modifierNames) { + if (shortcut[key]) { + id.push(key); + } else { + shortcut[key] = false; + } + } + shortcut.id = id.join(','); + if (shortcut.access) { + shortcut.alt = true; + if (Env.mac) { + shortcut.ctrl = true; + } else { + shortcut.shift = true; + } + } + if (shortcut.meta) { + if (Env.mac) { + shortcut.meta = true; + } else { + shortcut.ctrl = true; + shortcut.meta = false; + } + } + return shortcut; + }; + Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) { + var shortcuts; + shortcuts = Tools.map(explode$3(pattern, '>'), this.parseShortcut); + shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], { + func: cmdFunc, + scope: scope || this.editor + }); + return Tools.extend(shortcuts[0], { + desc: this.editor.translate(desc), + subpatterns: shortcuts.slice(1) + }); + }; + Shortcuts.prototype.hasModifier = function (e) { + return e.altKey || e.ctrlKey || e.metaKey; + }; + Shortcuts.prototype.isFunctionKey = function (e) { + return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123; + }; + Shortcuts.prototype.matchShortcut = function (e, shortcut) { + if (!shortcut) { + return false; + } + if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) { + return false; + } + if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) { + return false; + } + if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) { + e.preventDefault(); + return true; + } + return false; + }; + Shortcuts.prototype.executeShortcutAction = function (shortcut) { + return shortcut.func ? shortcut.func.call(shortcut.scope) : null; + }; + return Shortcuts; + }(); + + var each$i = Tools.each, trim$4 = Tools.trim; + var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' '); + var DEFAULT_PORTS = { + ftp: 21, + http: 80, + https: 443, + mailto: 25 + }; + var URI = function () { + function URI(url, settings) { + url = trim$4(url); + this.settings = settings || {}; + var baseUri = this.settings.base_uri; + var self = this; + if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) { + self.source = url; + return; + } + var isProtocolRelative = url.indexOf('//') === 0; + if (url.indexOf('/') === 0 && !isProtocolRelative) { + url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url; + } + if (!/^[\w\-]*:?\/\//.test(url)) { + var baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(domGlobals.document.location.href).directory; + if (this.settings.base_uri && this.settings.base_uri.protocol == '') { + url = '//mce_host' + self.toAbsPath(baseUrl, url); + } else { + var match = /([^#?]*)([#?]?.*)/.exec(url); + url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2]; + } + } + url = url.replace(/@@/g, '(mce_at)'); + var urlMatch = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url); + each$i(queryParts, function (v, i) { + var part = urlMatch[i]; + if (part) { + part = part.replace(/\(mce_at\)/g, '@@'); + } + self[v] = part; + }); + if (baseUri) { + if (!self.protocol) { + self.protocol = baseUri.protocol; + } + if (!self.userInfo) { + self.userInfo = baseUri.userInfo; + } + if (!self.port && self.host === 'mce_host') { + self.port = baseUri.port; + } + if (!self.host || self.host === 'mce_host') { + self.host = baseUri.host; + } + self.source = ''; + } + if (isProtocolRelative) { + self.protocol = ''; + } + } + URI.parseDataUri = function (uri) { + var type; + var uriComponents = decodeURIComponent(uri).split(','); + var matches = /data:([^;]+)/.exec(uriComponents[0]); + if (matches) { + type = matches[1]; + } + return { + type: type, + data: uriComponents[1] + }; + }; + URI.getDocumentBaseUrl = function (loc) { + var baseUrl; + if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') { + baseUrl = loc.href; + } else { + baseUrl = loc.protocol + '//' + loc.host + loc.pathname; + } + if (/^[^:]+:\/\/\/?[^\/]+\//.test(baseUrl)) { + baseUrl = baseUrl.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); + if (!/[\/\\]$/.test(baseUrl)) { + baseUrl += '/'; + } + } + return baseUrl; + }; + URI.prototype.setPath = function (path) { + var pathMatch = /^(.*?)\/?(\w+)?$/.exec(path); + this.path = pathMatch[0]; + this.directory = pathMatch[1]; + this.file = pathMatch[2]; + this.source = ''; + this.getURI(); + }; + URI.prototype.toRelative = function (uri) { + var output; + if (uri === './') { + return uri; + } + var relativeUri = new URI(uri, { base_uri: this }); + if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') { + return relativeUri.getURI(); + } + var tu = this.getURI(), uu = relativeUri.getURI(); + if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) { + return tu; + } + output = this.toRelPath(this.path, relativeUri.path); + if (relativeUri.query) { + output += '?' + relativeUri.query; + } + if (relativeUri.anchor) { + output += '#' + relativeUri.anchor; + } + return output; + }; + URI.prototype.toAbsolute = function (uri, noHost) { + var absoluteUri = new URI(uri, { base_uri: this }); + return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri)); + }; + URI.prototype.isSameOrigin = function (uri) { + if (this.host == uri.host && this.protocol == uri.protocol) { + if (this.port == uri.port) { + return true; + } + var defaultPort = DEFAULT_PORTS[this.protocol]; + if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) { + return true; + } + } + return false; + }; + URI.prototype.toRelPath = function (base, path) { + var items, breakPoint = 0, out = '', i, l; + var normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/'); + items = path.split('/'); + if (normalizedBase.length >= items.length) { + for (i = 0, l = normalizedBase.length; i < l; i++) { + if (i >= items.length || normalizedBase[i] !== items[i]) { + breakPoint = i + 1; + break; + } + } + } + if (normalizedBase.length < items.length) { + for (i = 0, l = items.length; i < l; i++) { + if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) { + breakPoint = i + 1; + break; + } + } + } + if (breakPoint === 1) { + return path; + } + for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) { + out += '../'; + } + for (i = breakPoint - 1, l = items.length; i < l; i++) { + if (i !== breakPoint - 1) { + out += '/' + items[i]; + } else { + out += items[i]; + } + } + return out; + }; + URI.prototype.toAbsPath = function (base, path) { + var i, nb = 0, o = [], tr, outPath; + tr = /\/$/.test(path) ? '/' : ''; + var normalizedBase = base.split('/'); + var normalizedPath = path.split('/'); + each$i(normalizedBase, function (k) { + if (k) { + o.push(k); + } + }); + normalizedBase = o; + for (i = normalizedPath.length - 1, o = []; i >= 0; i--) { + if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') { + continue; + } + if (normalizedPath[i] === '..') { + nb++; + continue; + } + if (nb > 0) { + nb--; + continue; + } + o.push(normalizedPath[i]); + } + i = normalizedBase.length - nb; + if (i <= 0) { + outPath = o.reverse().join('/'); + } else { + outPath = normalizedBase.slice(0, i).join('/') + '/' + o.reverse().join('/'); + } + if (outPath.indexOf('/') !== 0) { + outPath = '/' + outPath; + } + if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) { + outPath += tr; + } + return outPath; + }; + URI.prototype.getURI = function (noProtoHost) { + if (noProtoHost === void 0) { + noProtoHost = false; + } + var s; + if (!this.source || noProtoHost) { + s = ''; + if (!noProtoHost) { + if (this.protocol) { + s += this.protocol + '://'; + } else { + s += '//'; + } + if (this.userInfo) { + s += this.userInfo + '@'; + } + if (this.host) { + s += this.host; + } + if (this.port) { + s += ':' + this.port; + } + } + if (this.path) { + s += this.path; + } + if (this.query) { + s += '?' + this.query; + } + if (this.anchor) { + s += '#' + this.anchor; + } + this.source = s; + } + return this.source; + }; + return URI; + }(); + + var create$5 = function () { + var buttons = {}; + var menuItems = {}; + var popups = {}; + var icons = {}; + var contextMenus = {}; + var contextToolbars = {}; + var sidebars = {}; + var add = function (collection, type) { + return function (name, spec) { + return collection[name.toLowerCase()] = __assign({}, spec, { type: type }); + }; + }; + var addIcon = function (name, svgData) { + return icons[name.toLowerCase()] = svgData; + }; + return { + addButton: add(buttons, 'button'), + addToggleButton: add(buttons, 'togglebutton'), + addMenuButton: add(buttons, 'menubutton'), + addSplitButton: add(buttons, 'splitbutton'), + addMenuItem: add(menuItems, 'menuitem'), + addNestedMenuItem: add(menuItems, 'nestedmenuitem'), + addToggleMenuItem: add(menuItems, 'togglemenuitem'), + addAutocompleter: add(popups, 'autocompleter'), + addContextMenu: add(contextMenus, 'contextmenu'), + addContextToolbar: add(contextToolbars, 'contexttoolbar'), + addContextForm: add(contextToolbars, 'contextform'), + addSidebar: add(sidebars, 'sidebar'), + addIcon: addIcon, + getAll: function () { + return { + buttons: buttons, + menuItems: menuItems, + icons: icons, + popups: popups, + contextMenus: contextMenus, + contextToolbars: contextToolbars, + sidebars: sidebars + }; + } + }; + }; + + var registry = function () { + var bridge = create$5(); + return { + addAutocompleter: bridge.addAutocompleter, + addButton: bridge.addButton, + addContextForm: bridge.addContextForm, + addContextMenu: bridge.addContextMenu, + addContextToolbar: bridge.addContextToolbar, + addIcon: bridge.addIcon, + addMenuButton: bridge.addMenuButton, + addMenuItem: bridge.addMenuItem, + addNestedMenuItem: bridge.addNestedMenuItem, + addSidebar: bridge.addSidebar, + addSplitButton: bridge.addSplitButton, + addToggleButton: bridge.addToggleButton, + addToggleMenuItem: bridge.addToggleMenuItem, + getAll: bridge.getAll + }; + }; + + var DOM$8 = DOMUtils$1.DOM; + var extend$3 = Tools.extend, each$j = Tools.each; + var resolve$4 = Tools.resolve; + var ie$2 = Env.ie; + var Editor = function () { + function Editor(id, settings, editorManager) { + var _this = this; + this.plugins = {}; + this.contentCSS = []; + this.contentStyles = []; + this.loadedCSS = {}; + this.isNotDirty = false; + this.editorManager = editorManager; + this.documentBaseUrl = editorManager.documentBaseURL; + extend$3(this, EditorObservable); + this.settings = getEditorSettings(this, id, this.documentBaseUrl, editorManager.defaultSettings, settings); + if (this.settings.suffix) { + editorManager.suffix = this.settings.suffix; + } + this.suffix = editorManager.suffix; + if (this.settings.base_url) { + editorManager._setBaseUrl(this.settings.base_url); + } + this.baseUri = editorManager.baseURI; + AddOnManager$1.languageLoad = this.settings.language_load; + AddOnManager$1.baseURL = editorManager.baseURL; + this.id = id; + this.setDirty(false); + this.documentBaseURI = new URI(this.settings.document_base_url, { base_uri: this.baseUri }); + this.baseURI = this.baseUri; + this.inline = this.settings.inline; + this.shortcuts = new Shortcuts(this); + this.editorCommands = new EditorCommands(this); + if (this.settings.cache_suffix) { + Env.cacheSuffix = this.settings.cache_suffix.replace(/^[\?\&]+/, ''); + } + this.ui = { registry: registry() }; + var self = this; + var modeInstance = create$4(self); + this.mode = modeInstance; + this.setMode = modeInstance.set; + editorManager.fire('SetupEditor', { editor: this }); + this.execCallback('setup', this); + this.$ = DomQuery.overrideDefaults(function () { + return { + context: _this.inline ? _this.getBody() : _this.getDoc(), + element: _this.getBody() + }; + }); + } + Editor.prototype.render = function () { + Render.render(this); + }; + Editor.prototype.focus = function (skipFocus) { + EditorFocus.focus(this, skipFocus); + }; + Editor.prototype.hasFocus = function () { + return EditorFocus.hasFocus(this); + }; + Editor.prototype.execCallback = function (name) { + var x = []; + for (var _i = 1; _i < arguments.length; _i++) { + x[_i - 1] = arguments[_i]; + } + var self = this; + var callback = self.settings[name], scope; + if (!callback) { + return; + } + if (self.callbackLookup && (scope = self.callbackLookup[name])) { + callback = scope.func; + scope = scope.scope; + } + if (typeof callback === 'string') { + scope = callback.replace(/\.\w+$/, ''); + scope = scope ? resolve$4(scope) : 0; + callback = resolve$4(callback); + self.callbackLookup = self.callbackLookup || {}; + self.callbackLookup[name] = { + func: callback, + scope: scope + }; + } + return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1)); + }; + Editor.prototype.translate = function (text) { + return I18n.translate(text); + }; + Editor.prototype.getParam = function (name, defaultVal, type) { + return getParam(this, name, defaultVal, type); + }; + Editor.prototype.nodeChanged = function (args) { + this._nodeChangeDispatcher.nodeChanged(args); + }; + Editor.prototype.addCommand = function (name, callback, scope) { + this.editorCommands.addCommand(name, callback, scope); + }; + Editor.prototype.addQueryStateHandler = function (name, callback, scope) { + this.editorCommands.addQueryStateHandler(name, callback, scope); + }; + Editor.prototype.addQueryValueHandler = function (name, callback, scope) { + this.editorCommands.addQueryValueHandler(name, callback, scope); + }; + Editor.prototype.addShortcut = function (pattern, desc, cmdFunc, scope) { + this.shortcuts.add(pattern, desc, cmdFunc, scope); + }; + Editor.prototype.execCommand = function (cmd, ui, value, args) { + return this.editorCommands.execCommand(cmd, ui, value, args); + }; + Editor.prototype.queryCommandState = function (cmd) { + return this.editorCommands.queryCommandState(cmd); + }; + Editor.prototype.queryCommandValue = function (cmd) { + return this.editorCommands.queryCommandValue(cmd); + }; + Editor.prototype.queryCommandSupported = function (cmd) { + return this.editorCommands.queryCommandSupported(cmd); + }; + Editor.prototype.show = function () { + var self = this; + if (self.hidden) { + self.hidden = false; + if (self.inline) { + self.getBody().contentEditable = 'true'; + } else { + DOM$8.show(self.getContainer()); + DOM$8.hide(self.id); + } + self.load(); + self.fire('show'); + } + }; + Editor.prototype.hide = function () { + var self = this, doc = self.getDoc(); + if (!self.hidden) { + if (ie$2 && doc && !self.inline) { + doc.execCommand('SelectAll'); + } + self.save(); + if (self.inline) { + self.getBody().contentEditable = 'false'; + if (self === self.editorManager.focusedEditor) { + self.editorManager.focusedEditor = null; + } + } else { + DOM$8.hide(self.getContainer()); + DOM$8.setStyle(self.id, 'display', self.orgDisplay); + } + self.hidden = true; + self.fire('hide'); + } + }; + Editor.prototype.isHidden = function () { + return !!this.hidden; + }; + Editor.prototype.setProgressState = function (state, time) { + this.fire('ProgressState', { + state: state, + time: time + }); + }; + Editor.prototype.load = function (args) { + var self = this; + var elm = self.getElement(), html; + if (self.removed) { + return ''; + } + if (elm) { + args = args || {}; + args.load = true; + var value = NodeType.isTextareaOrInput(elm) ? elm.value : elm.innerHTML; + html = self.setContent(value, args); + args.element = elm; + if (!args.no_events) { + self.fire('LoadContent', args); + } + args.element = elm = null; + return html; + } + }; + Editor.prototype.save = function (args) { + var self = this; + var elm = self.getElement(), html, form; + if (!elm || !self.initialized || self.removed) { + return; + } + args = args || {}; + args.save = true; + args.element = elm; + html = args.content = self.getContent(args); + if (!args.no_events) { + self.fire('SaveContent', args); + } + if (args.format === 'raw') { + self.fire('RawSaveContent', args); + } + html = args.content; + if (!NodeType.isTextareaOrInput(elm)) { + if (args.is_removing || !self.inline) { + elm.innerHTML = html; + } + if (form = DOM$8.getParent(self.id, 'form')) { + each$j(form.elements, function (elm) { + if (elm.name === self.id) { + elm.value = html; + return false; + } + }); + } + } else { + elm.value = html; + } + args.element = elm = null; + if (args.set_dirty !== false) { + self.setDirty(false); + } + return html; + }; + Editor.prototype.setContent = function (content, args) { + return setContent(this, content, args); + }; + Editor.prototype.getContent = function (args) { + return getContent(this, args); + }; + Editor.prototype.insertContent = function (content, args) { + if (args) { + content = extend$3({ content: content }, args); + } + this.execCommand('mceInsertContent', false, content); + }; + Editor.prototype.resetContent = function (initialContent) { + if (initialContent === undefined) { + setContent(this, this.startContent, { format: 'raw' }); + } else { + setContent(this, initialContent); + } + this.undoManager.reset(); + this.setDirty(false); + this.nodeChanged(); + }; + Editor.prototype.isDirty = function () { + return !this.isNotDirty; + }; + Editor.prototype.setDirty = function (state) { + var oldState = !this.isNotDirty; + this.isNotDirty = !state; + if (state && state !== oldState) { + this.fire('dirty'); + } + }; + Editor.prototype.getContainer = function () { + var self = this; + if (!self.container) { + self.container = DOM$8.get(self.editorContainer || self.id + '_parent'); + } + return self.container; + }; + Editor.prototype.getContentAreaContainer = function () { + return this.contentAreaContainer; + }; + Editor.prototype.getElement = function () { + if (!this.targetElm) { + this.targetElm = DOM$8.get(this.id); + } + return this.targetElm; + }; + Editor.prototype.getWin = function () { + var self = this; + var elm; + if (!self.contentWindow) { + elm = self.iframeElement; + if (elm) { + self.contentWindow = elm.contentWindow; + } + } + return self.contentWindow; + }; + Editor.prototype.getDoc = function () { + var self = this; + var win; + if (!self.contentDocument) { + win = self.getWin(); + if (win) { + self.contentDocument = win.document; + } + } + return self.contentDocument; + }; + Editor.prototype.getBody = function () { + var doc = this.getDoc(); + return this.bodyElement || (doc ? doc.body : null); + }; + Editor.prototype.convertURL = function (url, name, elm) { + var self = this, settings = self.settings; + if (settings.urlconverter_callback) { + return self.execCallback('urlconverter_callback', url, elm, true, name); + } + if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) { + return url; + } + if (settings.relative_urls) { + return self.documentBaseURI.toRelative(url); + } + url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host); + return url; + }; + Editor.prototype.addVisual = function (elm) { + var self = this; + var settings = self.settings; + var dom = self.dom; + var cls; + elm = elm || self.getBody(); + if (self.hasVisual === undefined) { + self.hasVisual = settings.visual; + } + each$j(dom.select('table,a', elm), function (elm) { + var value; + switch (elm.nodeName) { + case 'TABLE': + cls = settings.visual_table_class || 'mce-item-table'; + value = dom.getAttrib(elm, 'border'); + if ((!value || value === '0') && self.hasVisual) { + dom.addClass(elm, cls); + } else { + dom.removeClass(elm, cls); + } + return; + case 'A': + if (!dom.getAttrib(elm, 'href')) { + value = dom.getAttrib(elm, 'name') || elm.id; + cls = settings.visual_anchor_class || 'mce-item-anchor'; + if (value && self.hasVisual) { + dom.addClass(elm, cls); + } else { + dom.removeClass(elm, cls); + } + } + return; + } + }); + self.fire('VisualAid', { + element: elm, + hasVisual: self.hasVisual + }); + }; + Editor.prototype.remove = function () { + remove$6(this); + }; + Editor.prototype.destroy = function (automatic) { + destroy(this, automatic); + }; + Editor.prototype.uploadImages = function (callback) { + return this.editorUpload.uploadImages(callback); + }; + Editor.prototype._scanForImages = function () { + return this.editorUpload.scanForImages(); + }; + Editor.prototype.addButton = function () { + throw new Error('editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead'); + }; + Editor.prototype.addSidebar = function () { + throw new Error('editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead'); + }; + Editor.prototype.addMenuItem = function () { + throw new Error('editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead'); + }; + Editor.prototype.addContextToolbar = function () { + throw new Error('editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead'); + }; + return Editor; + }(); + + var DOM$9 = DOMUtils$1.DOM; + var explode$4 = Tools.explode, each$k = Tools.each, extend$4 = Tools.extend; + var instanceCounter = 0, boundGlobalEvents = false; + var beforeUnloadDelegate; + var legacyEditors = []; + var editors = []; + var isValidLegacyKey = function (id) { + return id !== 'length'; + }; + var globalEventDelegate = function (e) { + var type = e.type; + each$k(EditorManager.get(), function (editor) { + switch (type) { + case 'scroll': + editor.fire('ScrollWindow', e); + break; + case 'resize': + editor.fire('ResizeWindow', e); + break; + } + }); + }; + var toggleGlobalEvents = function (state) { + if (state !== boundGlobalEvents) { + if (state) { + DomQuery(window).on('resize scroll', globalEventDelegate); + } else { + DomQuery(window).off('resize scroll', globalEventDelegate); + } + boundGlobalEvents = state; + } + }; + var removeEditorFromList = function (targetEditor) { + var oldEditors = editors; + delete legacyEditors[targetEditor.id]; + for (var i = 0; i < legacyEditors.length; i++) { + if (legacyEditors[i] === targetEditor) { + legacyEditors.splice(i, 1); + break; + } + } + editors = filter(editors, function (editor) { + return targetEditor !== editor; + }); + if (EditorManager.activeEditor === targetEditor) { + EditorManager.activeEditor = editors.length > 0 ? editors[0] : null; + } + if (EditorManager.focusedEditor === targetEditor) { + EditorManager.focusedEditor = null; + } + return oldEditors.length !== editors.length; + }; + var purgeDestroyedEditor = function (editor) { + if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) { + removeEditorFromList(editor); + editor.unbindAllNativeEvents(); + editor.destroy(true); + editor.removed = true; + editor = null; + } + return editor; + }; + var isQuirksMode = domGlobals.document.compatMode !== 'CSS1Compat'; + var EditorManager = __assign({}, Observable, { + baseURI: null, + baseURL: null, + defaultSettings: {}, + documentBaseURL: null, + suffix: null, + $: DomQuery, + majorVersion: '5', + minorVersion: '0.12', + releaseDate: '2019-07-18', + editors: legacyEditors, + i18n: I18n, + activeEditor: null, + focusedEditor: null, + settings: {}, + setup: function () { + var self = this; + var baseURL, documentBaseURL, suffix = '', preInit, src; + documentBaseURL = URI.getDocumentBaseUrl(domGlobals.document.location); + if (/^[^:]+:\/\/\/?[^\/]+\//.test(documentBaseURL)) { + documentBaseURL = documentBaseURL.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); + if (!/[\/\\]$/.test(documentBaseURL)) { + documentBaseURL += '/'; + } + } + preInit = window.tinymce || window.tinyMCEPreInit; + if (preInit) { + baseURL = preInit.base || preInit.baseURL; + suffix = preInit.suffix; + } else { + var scripts = domGlobals.document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + src = scripts[i].src; + var srcScript = src.substring(src.lastIndexOf('/')); + if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) { + if (srcScript.indexOf('.min') !== -1) { + suffix = '.min'; + } + baseURL = src.substring(0, src.lastIndexOf('/')); + break; + } + } + if (!baseURL && domGlobals.document.currentScript) { + src = domGlobals.document.currentScript.src; + if (src.indexOf('.min') !== -1) { + suffix = '.min'; + } + baseURL = src.substring(0, src.lastIndexOf('/')); + } + } + self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL); + self.documentBaseURL = documentBaseURL; + self.baseURI = new URI(self.baseURL); + self.suffix = suffix; + FocusController.setup(self); + }, + overrideDefaults: function (defaultSettings) { + var baseUrl, suffix; + baseUrl = defaultSettings.base_url; + if (baseUrl) { + this._setBaseUrl(baseUrl); + } + suffix = defaultSettings.suffix; + if (defaultSettings.suffix) { + this.suffix = suffix; + } + this.defaultSettings = defaultSettings; + var pluginBaseUrls = defaultSettings.plugin_base_urls; + for (var name in pluginBaseUrls) { + AddOnManager$1.PluginManager.urls[name] = pluginBaseUrls[name]; + } + }, + init: function (settings) { + var self = this; + var result, invalidInlineTargets; + invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' '); + var isInvalidInlineTarget = function (settings, elm) { + return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets; + }; + var createId = function (elm) { + var id = elm.id; + if (!id) { + id = elm.name; + if (id && !DOM$9.get(id)) { + id = elm.name; + } else { + id = DOM$9.uniqueId(); + } + elm.setAttribute('id', id); + } + return id; + }; + var execCallback = function (name) { + var callback = settings[name]; + if (!callback) { + return; + } + return callback.apply(self, Array.prototype.slice.call(arguments, 2)); + }; + var hasClass = function (elm, className) { + return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className); + }; + var findTargets = function (settings) { + var l, targets = []; + if (Env.ie && Env.ie < 11) { + ErrorReporter.initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/'); + return []; + } else if (isQuirksMode) { + ErrorReporter.initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.'); + return []; + } + if (settings.types) { + each$k(settings.types, function (type) { + targets = targets.concat(DOM$9.select(type.selector)); + }); + return targets; + } else if (settings.selector) { + return DOM$9.select(settings.selector); + } else if (settings.target) { + return [settings.target]; + } + switch (settings.mode) { + case 'exact': + l = settings.elements || ''; + if (l.length > 0) { + each$k(explode$4(l), function (id) { + var elm; + if (elm = DOM$9.get(id)) { + targets.push(elm); + } else { + each$k(domGlobals.document.forms, function (f) { + each$k(f.elements, function (e) { + if (e.name === id) { + id = 'mce_editor_' + instanceCounter++; + DOM$9.setAttrib(e, 'id', id); + targets.push(e); + } + }); + }); + } + }); + } + break; + case 'textareas': + case 'specific_textareas': + each$k(DOM$9.select('textarea'), function (elm) { + if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) { + return; + } + if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) { + targets.push(elm); + } + }); + break; + } + return targets; + }; + var provideResults = function (editors) { + result = editors; + }; + var initEditors = function () { + var initCount = 0; + var editors = []; + var targets; + var createEditor = function (id, settings, targetElm) { + var editor = new Editor(id, settings, self); + editors.push(editor); + editor.on('init', function () { + if (++initCount === targets.length) { + provideResults(editors); + } + }); + editor.targetElm = editor.targetElm || targetElm; + editor.render(); + }; + DOM$9.unbind(window, 'ready', initEditors); + execCallback('onpageload'); + targets = DomQuery.unique(findTargets(settings)); + if (settings.types) { + each$k(settings.types, function (type) { + Tools.each(targets, function (elm) { + if (DOM$9.is(elm, type.selector)) { + createEditor(createId(elm), extend$4({}, settings, type), elm); + return false; + } + return true; + }); + }); + return; + } + Tools.each(targets, function (elm) { + purgeDestroyedEditor(self.get(elm.id)); + }); + targets = Tools.grep(targets, function (elm) { + return !self.get(elm.id); + }); + if (targets.length === 0) { + provideResults([]); + } else { + each$k(targets, function (elm) { + if (isInvalidInlineTarget(settings, elm)) { + ErrorReporter.initError('Could not initialize inline editor on invalid inline target element', elm); + } else { + createEditor(createId(elm), settings, elm); + } + }); + } + }; + self.settings = settings; + DOM$9.bind(window, 'ready', initEditors); + return new promiseObj(function (resolve) { + if (result) { + resolve(result); + } else { + provideResults = function (editors) { + resolve(editors); + }; + } + }); + }, + get: function (id) { + if (arguments.length === 0) { + return editors.slice(0); + } else if (isString(id)) { + return find(editors, function (editor) { + return editor.id === id; + }).getOr(null); + } else if (isNumber(id)) { + return editors[id] ? editors[id] : null; + } else { + return null; + } + }, + add: function (editor) { + var self = this; + var existingEditor; + existingEditor = legacyEditors[editor.id]; + if (existingEditor === editor) { + return editor; + } + if (self.get(editor.id) === null) { + if (isValidLegacyKey(editor.id)) { + legacyEditors[editor.id] = editor; + } + legacyEditors.push(editor); + editors.push(editor); + } + toggleGlobalEvents(true); + self.activeEditor = editor; + self.fire('AddEditor', { editor: editor }); + if (!beforeUnloadDelegate) { + beforeUnloadDelegate = function (e) { + var event = self.fire('BeforeUnload'); + if (event.returnValue) { + e.preventDefault(); + e.returnValue = event.returnValue; + return event.returnValue; + } + }; + window.addEventListener('beforeunload', beforeUnloadDelegate); + } + return editor; + }, + createEditor: function (id, settings) { + return this.add(new Editor(id, settings, this)); + }, + remove: function (selector) { + var self = this; + var i, editor; + if (!selector) { + for (i = editors.length - 1; i >= 0; i--) { + self.remove(editors[i]); + } + return; + } + if (isString(selector)) { + each$k(DOM$9.select(selector), function (elm) { + editor = self.get(elm.id); + if (editor) { + self.remove(editor); + } + }); + return; + } + editor = selector; + if (isNull(self.get(editor.id))) { + return null; + } + if (removeEditorFromList(editor)) { + self.fire('RemoveEditor', { editor: editor }); + } + if (editors.length === 0) { + window.removeEventListener('beforeunload', beforeUnloadDelegate); + } + editor.remove(); + toggleGlobalEvents(editors.length > 0); + return editor; + }, + execCommand: function (cmd, ui, value) { + var self = this, editor = self.get(value); + switch (cmd) { + case 'mceAddEditor': + if (!self.get(value)) { + new Editor(value, self.settings, self).render(); + } + return true; + case 'mceRemoveEditor': + if (editor) { + editor.remove(); + } + return true; + case 'mceToggleEditor': + if (!editor) { + self.execCommand('mceAddEditor', 0, value); + return true; + } + if (editor.isHidden()) { + editor.show(); + } else { + editor.hide(); + } + return true; + } + if (self.activeEditor) { + return self.activeEditor.execCommand(cmd, ui, value); + } + return false; + }, + triggerSave: function () { + each$k(editors, function (editor) { + editor.save(); + }); + }, + addI18n: function (code, items) { + I18n.add(code, items); + }, + translate: function (text) { + return I18n.translate(text); + }, + setActive: function (editor) { + var activeEditor = this.activeEditor; + if (this.activeEditor !== editor) { + if (activeEditor) { + activeEditor.fire('deactivate', { relatedTarget: editor }); + } + editor.fire('activate', { relatedTarget: activeEditor }); + } + this.activeEditor = editor; + }, + _setBaseUrl: function (baseUrl) { + this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\/+$/, '')); + this.baseURI = new URI(this.baseURL); + } + }); + EditorManager.setup(); + + function RangeUtils(dom) { + var walk = function (rng, callback) { + return RangeWalk.walk(dom, rng, callback); + }; + var split = split$1; + var normalize = function (rng) { + return NormalizeRange.normalize(dom, rng).fold(constant(false), function (normalizedRng) { + rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset); + rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset); + return true; + }); + }; + return { + walk: walk, + split: split, + normalize: normalize + }; + } + (function (RangeUtils) { + RangeUtils.compareRanges = RangeCompare.isEq; + RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint; + RangeUtils.getSelectedNode = getSelectedNode; + RangeUtils.getNode = getNode; + }(RangeUtils || (RangeUtils = {}))); + var RangeUtils$1 = RangeUtils; + + var min = Math.min, max = Math.max, round$2 = Math.round; + var relativePosition = function (rect, targetRect, rel) { + var x, y, w, h, targetW, targetH; + x = targetRect.x; + y = targetRect.y; + w = rect.w; + h = rect.h; + targetW = targetRect.w; + targetH = targetRect.h; + rel = (rel || '').split(''); + if (rel[0] === 'b') { + y += targetH; + } + if (rel[1] === 'r') { + x += targetW; + } + if (rel[0] === 'c') { + y += round$2(targetH / 2); + } + if (rel[1] === 'c') { + x += round$2(targetW / 2); + } + if (rel[3] === 'b') { + y -= h; + } + if (rel[4] === 'r') { + x -= w; + } + if (rel[3] === 'c') { + y -= round$2(h / 2); + } + if (rel[4] === 'c') { + x -= round$2(w / 2); + } + return create$6(x, y, w, h); + }; + var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) { + var pos, i; + for (i = 0; i < rels.length; i++) { + pos = relativePosition(rect, targetRect, rels[i]); + if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) { + return rels[i]; + } + } + return null; + }; + var inflate = function (rect, w, h) { + return create$6(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2); + }; + var intersect = function (rect, cropRect) { + var x1, y1, x2, y2; + x1 = max(rect.x, cropRect.x); + y1 = max(rect.y, cropRect.y); + x2 = min(rect.x + rect.w, cropRect.x + cropRect.w); + y2 = min(rect.y + rect.h, cropRect.y + cropRect.h); + if (x2 - x1 < 0 || y2 - y1 < 0) { + return null; + } + return create$6(x1, y1, x2 - x1, y2 - y1); + }; + var clamp$1 = function (rect, clampRect, fixedSize) { + var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2; + x1 = rect.x; + y1 = rect.y; + x2 = rect.x + rect.w; + y2 = rect.y + rect.h; + cx2 = clampRect.x + clampRect.w; + cy2 = clampRect.y + clampRect.h; + underflowX1 = max(0, clampRect.x - x1); + underflowY1 = max(0, clampRect.y - y1); + overflowX2 = max(0, x2 - cx2); + overflowY2 = max(0, y2 - cy2); + x1 += underflowX1; + y1 += underflowY1; + if (fixedSize) { + x2 += underflowX1; + y2 += underflowY1; + x1 -= overflowX2; + y1 -= overflowY2; + } + x2 -= overflowX2; + y2 -= overflowY2; + return create$6(x1, y1, x2 - x1, y2 - y1); + }; + var create$6 = function (x, y, w, h) { + return { + x: x, + y: y, + w: w, + h: h + }; + }; + var fromClientRect = function (clientRect) { + return create$6(clientRect.left, clientRect.top, clientRect.width, clientRect.height); + }; + var Rect = { + inflate: inflate, + relativePosition: relativePosition, + findBestRelativePosition: findBestRelativePosition, + intersect: intersect, + clamp: clamp$1, + create: create$6, + fromClientRect: fromClientRect + }; + + var each$l = Tools.each, extend$5 = Tools.extend; + var extendClass, initializing; + var Class = function () { + }; + Class.extend = extendClass = function (prop) { + var self = this; + var _super = self.prototype; + var prototype, name, member; + var Class = function () { + var i, mixins, mixin; + var self = this; + if (!initializing) { + if (self.init) { + self.init.apply(self, arguments); + } + mixins = self.Mixins; + if (mixins) { + i = mixins.length; + while (i--) { + mixin = mixins[i]; + if (mixin.init) { + mixin.init.apply(self, arguments); + } + } + } + } + }; + var dummy = function () { + return this; + }; + var createMethod = function (name, fn) { + return function () { + var self = this; + var tmp = self._super; + var ret; + self._super = _super[name]; + ret = fn.apply(self, arguments); + self._super = tmp; + return ret; + }; + }; + initializing = true; + prototype = new self(); + initializing = false; + if (prop.Mixins) { + each$l(prop.Mixins, function (mixin) { + for (var name_1 in mixin) { + if (name_1 !== 'init') { + prop[name_1] = mixin[name_1]; + } + } + }); + if (_super.Mixins) { + prop.Mixins = _super.Mixins.concat(prop.Mixins); + } + } + if (prop.Methods) { + each$l(prop.Methods.split(','), function (name) { + prop[name] = dummy; + }); + } + if (prop.Properties) { + each$l(prop.Properties.split(','), function (name) { + var fieldName = '_' + name; + prop[name] = function (value) { + var self = this; + if (value !== undefined) { + self[fieldName] = value; + return self; + } + return self[fieldName]; + }; + }); + } + if (prop.Statics) { + each$l(prop.Statics, function (func, name) { + Class[name] = func; + }); + } + if (prop.Defaults && _super.Defaults) { + prop.Defaults = extend$5({}, _super.Defaults, prop.Defaults); + } + for (name in prop) { + member = prop[name]; + if (typeof member === 'function' && _super[name]) { + prototype[name] = createMethod(name, member); + } else { + prototype[name] = member; + } + } + Class.prototype = prototype; + Class.constructor = Class; + Class.extend = extendClass; + return Class; + }; + + var min$1 = Math.min, max$1 = Math.max, round$3 = Math.round; + var Color = function (value) { + var self = {}; + var r = 0, g = 0, b = 0; + var rgb2hsv = function (r, g, b) { + var h, s, v, d, minRGB, maxRGB; + h = 0; + s = 0; + v = 0; + r = r / 255; + g = g / 255; + b = b / 255; + minRGB = min$1(r, min$1(g, b)); + maxRGB = max$1(r, max$1(g, b)); + if (minRGB === maxRGB) { + v = minRGB; + return { + h: 0, + s: 0, + v: v * 100 + }; + } + d = r === minRGB ? g - b : b === minRGB ? r - g : b - r; + h = r === minRGB ? 3 : b === minRGB ? 1 : 5; + h = 60 * (h - d / (maxRGB - minRGB)); + s = (maxRGB - minRGB) / maxRGB; + v = maxRGB; + return { + h: round$3(h), + s: round$3(s * 100), + v: round$3(v * 100) + }; + }; + var hsvToRgb = function (hue, saturation, brightness) { + var side, chroma, x, match; + hue = (parseInt(hue, 10) || 0) % 360; + saturation = parseInt(saturation, 10) / 100; + brightness = parseInt(brightness, 10) / 100; + saturation = max$1(0, min$1(saturation, 1)); + brightness = max$1(0, min$1(brightness, 1)); + if (saturation === 0) { + r = g = b = round$3(255 * brightness); + return; + } + side = hue / 60; + chroma = brightness * saturation; + x = chroma * (1 - Math.abs(side % 2 - 1)); + match = brightness - chroma; + switch (Math.floor(side)) { + case 0: + r = chroma; + g = x; + b = 0; + break; + case 1: + r = x; + g = chroma; + b = 0; + break; + case 2: + r = 0; + g = chroma; + b = x; + break; + case 3: + r = 0; + g = x; + b = chroma; + break; + case 4: + r = x; + g = 0; + b = chroma; + break; + case 5: + r = chroma; + g = 0; + b = x; + break; + default: + r = g = b = 0; + } + r = round$3(255 * (r + match)); + g = round$3(255 * (g + match)); + b = round$3(255 * (b + match)); + }; + var toHex = function () { + var hex = function (val) { + val = parseInt(val, 10).toString(16); + return val.length > 1 ? val : '0' + val; + }; + return '#' + hex(r) + hex(g) + hex(b); + }; + var toRgb = function () { + return { + r: r, + g: g, + b: b + }; + }; + var toHsv = function () { + return rgb2hsv(r, g, b); + }; + var parse = function (value) { + var matches; + if (typeof value === 'object') { + if ('r' in value) { + r = value.r; + g = value.g; + b = value.b; + } else if ('v' in value) { + hsvToRgb(value.h, value.s, value.v); + } + } else { + if (matches = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(value)) { + r = parseInt(matches[1], 10); + g = parseInt(matches[2], 10); + b = parseInt(matches[3], 10); + } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) { + r = parseInt(matches[1], 16); + g = parseInt(matches[2], 16); + b = parseInt(matches[3], 16); + } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) { + r = parseInt(matches[1] + matches[1], 16); + g = parseInt(matches[2] + matches[2], 16); + b = parseInt(matches[3] + matches[3], 16); + } + } + r = r < 0 ? 0 : r > 255 ? 255 : r; + g = g < 0 ? 0 : g > 255 ? 255 : g; + b = b < 0 ? 0 : b > 255 ? 255 : b; + return self; + }; + if (value) { + parse(value); + } + self.toRgb = toRgb; + self.toHsv = toHsv; + self.toHex = toHex; + self.parse = parse; + return self; + }; + + var serialize = function (obj) { + var data = JSON.stringify(obj); + if (!isString(data)) { + return data; + } + return data.replace(/[\u0080-\uFFFF]/g, function (match) { + var hexCode = match.charCodeAt(0).toString(16); + return '\\u' + '0000'.substring(hexCode.length) + hexCode; + }); + }; + var JSONUtils = { + serialize: serialize, + parse: function (text) { + try { + return JSON.parse(text); + } catch (ex) { + } + } + }; + + var JSONP = { + callbacks: {}, + count: 0, + send: function (settings) { + var self = this, dom = DOMUtils$1.DOM, count = settings.count !== undefined ? settings.count : self.count; + var id = 'tinymce_jsonp_' + count; + self.callbacks[count] = function (json) { + dom.remove(id); + delete self.callbacks[count]; + settings.callback(json); + }; + dom.add(dom.doc.body, 'script', { + id: id, + src: settings.url, + type: 'text/javascript' + }); + self.count++; + } + }; + + var XHR = __assign({}, Observable, { + send: function (settings) { + var xhr, count = 0; + var ready = function () { + if (!settings.async || xhr.readyState === 4 || count++ > 10000) { + if (settings.success && count < 10000 && xhr.status === 200) { + settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings); + } else if (settings.error) { + settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings); + } + xhr = null; + } else { + Delay.setTimeout(ready, 10); + } + }; + settings.scope = settings.scope || this; + settings.success_scope = settings.success_scope || settings.scope; + settings.error_scope = settings.error_scope || settings.scope; + settings.async = settings.async !== false; + settings.data = settings.data || ''; + XHR.fire('beforeInitialize', { settings: settings }); + xhr = XMLHttpRequest(); + if (xhr) { + if (xhr.overrideMimeType) { + xhr.overrideMimeType(settings.content_type); + } + xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async); + if (settings.crossDomain) { + xhr.withCredentials = true; + } + if (settings.content_type) { + xhr.setRequestHeader('Content-Type', settings.content_type); + } + if (settings.requestheaders) { + Tools.each(settings.requestheaders, function (header) { + xhr.setRequestHeader(header.key, header.value); + }); + } + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhr = XHR.fire('beforeSend', { + xhr: xhr, + settings: settings + }).xhr; + xhr.send(settings.data); + if (!settings.async) { + return ready(); + } + Delay.setTimeout(ready, 10); + } + } + }); + + var extend$6 = Tools.extend; + var JSONRequest = function () { + function JSONRequest(settings) { + this.settings = extend$6({}, settings); + this.count = 0; + } + JSONRequest.sendRPC = function (o) { + return new JSONRequest().send(o); + }; + JSONRequest.prototype.send = function (args) { + var ecb = args.error, scb = args.success; + var xhrArgs = extend$6(this.settings, args); + xhrArgs.success = function (c, x) { + c = JSONUtils.parse(c); + if (typeof c === 'undefined') { + c = { error: 'JSON Parse error.' }; + } + if (c.error) { + ecb.call(xhrArgs.error_scope || xhrArgs.scope, c.error, x); + } else { + scb.call(xhrArgs.success_scope || xhrArgs.scope, c.result); + } + }; + xhrArgs.error = function (ty, x) { + if (ecb) { + ecb.call(xhrArgs.error_scope || xhrArgs.scope, ty, x); + } + }; + xhrArgs.data = JSONUtils.serialize({ + id: args.id || 'c' + this.count++, + method: args.method, + params: args.params + }); + xhrArgs.content_type = 'application/json'; + XHR.send(xhrArgs); + }; + return JSONRequest; + }(); + + var create$7 = function () { + return function () { + var data = {}; + var keys = []; + var storage = { + getItem: function (key) { + var item = data[key]; + return item ? item : null; + }, + setItem: function (key, value) { + keys.push(key); + data[key] = String(value); + }, + key: function (index) { + return keys[index]; + }, + removeItem: function (key) { + keys = keys.filter(function (k) { + return k === key; + }); + delete data[key]; + }, + clear: function () { + keys = []; + data = {}; + }, + length: 0 + }; + Object.defineProperty(storage, 'length', { + get: function () { + return keys.length; + }, + configurable: false, + enumerable: false + }); + return storage; + }(); + }; + + var localStorage; + try { + localStorage = domGlobals.window.localStorage; + } catch (e) { + localStorage = create$7(); + } + var LocalStorage = localStorage; + + var publicApi = { + geom: { Rect: Rect }, + util: { + Promise: promiseObj, + Delay: Delay, + Tools: Tools, + VK: VK, + URI: URI, + Class: Class, + EventDispatcher: EventDispatcher, + Observable: Observable, + I18n: I18n, + XHR: XHR, + JSON: JSONUtils, + JSONRequest: JSONRequest, + JSONP: JSONP, + LocalStorage: LocalStorage, + Color: Color + }, + dom: { + EventUtils: EventUtils, + Sizzle: Sizzle, + DomQuery: DomQuery, + TreeWalker: TreeWalker, + DOMUtils: DOMUtils$1, + ScriptLoader: ScriptLoader, + RangeUtils: RangeUtils$1, + Serializer: Serializer$1, + ControlSelection: ControlSelection, + BookmarkManager: BookmarkManager$1, + Selection: Selection$1, + Event: EventUtils.Event + }, + html: { + Styles: Styles, + Entities: Entities, + Node: Node$1, + Schema: Schema, + SaxParser: SaxParser$1, + DomParser: DomParser, + Writer: Writer, + Serializer: Serializer + }, + Env: Env, + AddOnManager: AddOnManager$1, + Annotator: Annotator, + Formatter: Formatter, + UndoManager: UndoManager, + EditorCommands: EditorCommands, + WindowManager: WindowManager, + NotificationManager: NotificationManager, + EditorObservable: EditorObservable, + Shortcuts: Shortcuts, + Editor: Editor, + FocusManager: FocusManager, + EditorManager: EditorManager, + DOM: DOMUtils$1.DOM, + ScriptLoader: ScriptLoader.ScriptLoader, + PluginManager: AddOnManager$1.PluginManager, + ThemeManager: AddOnManager$1.ThemeManager, + IconManager: IconManager, + trim: Tools.trim, + isArray: Tools.isArray, + is: Tools.is, + toArray: Tools.toArray, + makeMap: Tools.makeMap, + each: Tools.each, + map: Tools.map, + grep: Tools.grep, + inArray: Tools.inArray, + extend: Tools.extend, + create: Tools.create, + walk: Tools.walk, + createNS: Tools.createNS, + resolve: Tools.resolve, + explode: Tools.explode, + _addCacheSuffix: Tools._addCacheSuffix, + isOpera: Env.opera, + isWebKit: Env.webkit, + isIE: Env.ie, + isGecko: Env.gecko, + isMac: Env.mac + }; + var tinymce = Tools.extend(EditorManager, publicApi); + + var exportToModuleLoaders = function (tinymce) { + if (typeof module === 'object') { + try { + module.exports = tinymce; + } catch (_) { + } + } + }; + var exportToWindowGlobal = function (tinymce) { + window.tinymce = tinymce; + window.tinyMCE = tinymce; + }; + exportToWindowGlobal(tinymce); + exportToModuleLoaders(tinymce); + +}(window)); + + + +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + */ +/** + * Jquery integration plugin. + * + * @class tinymce.core.JqueryIntegration + * @private + */ + +!function(){var f,c,u,p,d,s=[];d="undefined"!=typeof global?global:window,p=d.jQuery;var v=function(){ +// Reference to tinymce needs to be lazily evaluated since tinymce +// might be loaded through the compressor or other means +return d.tinymce};p.fn.tinymce=function(o){var e,t,i,l=this,r=""; +// No match then just ignore the call +if(!l.length)return l; +// Get editor instance +if(!o)return v()?v().get(l[0].id):null;l.css("visibility","hidden");// Hide textarea to avoid flicker +var n=function(){var a=[],c=0; +// Apply patches to the jQuery object, only once +u||(m(),u=!0), +// Create an editor instance for each matched node +l.each(function(e,t){var n,i=t.id,r=o.oninit; +// Generate unique id for target element if needed +i||(t.id=i=v().DOM.uniqueId()), +// Only init the editor once +v().get(i)||( +// Create editor instance and render it +n=v().createEditor(i,o),a.push(n),n.on("init",function(){var e,t=r;l.css("visibility",""), +// Run this if the oninit setting is defined +// this logic will fire the oninit callback ones each +// matched editor instance is initialized +r&&++c==a.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:v().resolve(t.replace(/\.\w+$/,"")),t=v().resolve(t)), +// Call the oninit function with the object +t.apply(e||v(),a))}))}), +// Render the editor instances in a separate loop since we +// need to have the full editors array used in the onInit calls +p.each(a,function(e,t){t.render()})}; +// Load TinyMCE on demand, if we need to +if(d.tinymce||c||!(e=o.script_url)) +// Delay the init call until tinymce is loaded +1===c?s.push(n):n();else{c=1,t=e.substring(0,e.lastIndexOf("/")), +// Check if it's a dev/src version they want to load then +// make sure that all plugins, themes etc are loaded in source mode as well +-1!=e.indexOf(".min")&&(r=".min"), +// Setup tinyMCEPreInit object this will later be used by the TinyMCE +// core script to locate other resources like CSS files, dialogs etc +// You can also predefined a tinyMCEPreInit object and then it will use that instead +d.tinymce=d.tinyMCEPreInit||{base:t,suffix:r}, +// url contains gzip then we assume it's a compressor +-1!=e.indexOf("gzip")&&(i=o.language||"en",e=e+(/\?/.test(e)?"&":"?")+"js=true&core=true&suffix="+escape(r)+"&themes="+escape(o.theme||"modern")+"&plugins="+escape(o.plugins||"")+"&languages="+(i||""), +// Check if compressor script is already loaded otherwise setup a basic one +d.tinyMCE_GZ||(d.tinyMCE_GZ={start:function(){var n=function(e){v().ScriptLoader.markDone(v().baseURI.toAbsolute(e))}; +// Add core languages +n("langs/"+i+".js"), +// Add themes with languages +n("themes/"+o.theme+"/theme"+r+".js"),n("themes/"+o.theme+"/langs/"+i+".js"), +// Add plugins with languages +p.each(o.plugins.split(","),function(e,t){t&&(n("plugins/"+t+"/plugin"+r+".js"),n("plugins/"+t+"/langs/"+i+".js"))})},end:function(){}}));var a=document.createElement("script");a.type="text/javascript",a.onload=a.onreadystatechange=function(e){e=e||window.event,2===c||"load"!=e.type&&!/complete|loaded/.test(a.readyState)||(v().dom.Event.domLoaded=1,c=2, +// Execute callback after mainscript has been loaded and before the initialization occurs +o.script_loaded&&o.script_loaded(),n(),p.each(s,function(e,t){t()}))},a.src=e,document.body.appendChild(a)}return l}, +// Add :tinymce pseudo selector this will select elements that has been converted into editor instances +// it's now possible to use things like $('*:tinymce') to get all TinyMCE bound elements. +p.extend(p.expr[":"],{tinymce:function(e){var t;return!!(e.id&&"tinymce"in d&&(t=v().get(e.id))&&t.editorManager===v())}}); +// This function patches internal jQuery functions so that if +// you for example remove an div element containing an editor it's +// automatically destroyed by the TinyMCE API +var m=function(){ +// Removes any child editor instances by looking for editor wrapper elements +var r=function(e){ +// If the function is remove +"remove"===e&&this.each(function(e,t){var n=l(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=v().get(t.id.replace(/_parent$/,""));n&&n.remove()})},o=function(i){var e,t=this; +// Handle set value +/*jshint eqnull:true */if(null!=i)r.call(t), +// Saves the contents before get/set value of textarea/div +t.each(function(e,t){var n;(n=v().get(t.id))&&n.setContent(i)});else if(0])*>/g,""):n.getContent({save:!0}):a.apply(p(t),r)}),i}}), +// Makes it possible to use $('#id').append("content"); to append contents to the TinyMCE editor iframe +p.each(["append","prepend"],function(e,t){var n=s[t]=p.fn[t],r="prepend"===t;p.fn[t]=function(i){var e=this;return u(e)?i!==f?("string"==typeof i&&e.filter(":tinymce").each(function(e,t){var n=l(t);n&&n.setContent(r?i+n.getContent():n.getContent()+i)}),n.apply(e.not(":tinymce"),arguments),e):void 0:n.apply(e,arguments)}}), +// Makes sure that the editor instance gets properly destroyed when the parent element is removed +p.each(["remove","replaceWith","replaceAll","empty"],function(e,t){var n=s[t]=p.fn[t];p.fn[t]=function(){return r.call(this,t),n.apply(this,arguments)}}),s.attr=p.fn.attr, +// Makes sure that $('#tinymce_id').attr('value') gets the editors current HTML contents +p.fn.attr=function(e,t){var n=this,i=arguments;if(!e||"value"!==e||!u(n))return s.attr.apply(n,i);if(t!==f)return o.call(n.filter(":tinymce"),t),s.attr.apply(n.not(":tinymce"),i),n;// return original set for chaining +var r=n[0],a=l(r);return a?a.getContent({save:!0}):s.attr.apply(p(r),i)}}}(); + + +/*! + * Modernizr v2.7.1 + * www.modernizr.com + * + * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton + * Available under the BSD and MIT licenses: www.modernizr.com/license/ + */ + +/* + * Modernizr tests which native CSS3 and HTML5 features are available in + * the current UA and makes the results available to you in two ways: + * as properties on a global Modernizr object, and as classes on the + * element. This information allows you to progressively enhance + * your pages with a granular level of control over the experience. + * + * Modernizr has an optional (not included) conditional resource loader + * called Modernizr.load(), based on Yepnope.js (yepnopejs.com). + * To get a build that includes Modernizr.load(), as well as choosing + * which tests to include, go to www.modernizr.com/download/ + * + * Authors Faruk Ates, Paul Irish, Alex Sexton + * Contributors Ryan Seddon, Ben Alman + */ + + +window.Modernizr = (function( window, document, undefined ) { + + var version = '2.7.1', + + Modernizr = {}, + + /*>>cssclasses*/ + // option for enabling the HTML classes to be added + enableClasses = true, + /*>>cssclasses*/ + + docElement = document.documentElement, + + /** + * Create our "modernizr" element that we do most feature tests on. + */ + mod = 'modernizr', + modElem = document.createElement(mod), + mStyle = modElem.style, + + /** + * Create the input element for various Web Forms feature tests. + */ + inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ , + + /*>>smile*/ + smile = ':)', + /*>>smile*/ + + toString = {}.toString, + + // TODO :: make the prefixes more granular + /*>>prefixes*/ + // List of property values to set for css tests. See ticket #21 + prefixes = ' -webkit- -moz- -o- -ms- '.split(' '), + /*>>prefixes*/ + + /*>>domprefixes*/ + // Following spec is to expose vendor-specific style properties as: + // elem.style.WebkitBorderRadius + // and the following would be incorrect: + // elem.style.webkitBorderRadius + + // Webkit ghosts their properties in lowercase but Opera & Moz do not. + // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+ + // erik.eae.net/archives/2008/03/10/21.48.10/ + + // More here: github.com/Modernizr/Modernizr/issues/issue/21 + omPrefixes = 'Webkit Moz O ms', + + cssomPrefixes = omPrefixes.split(' '), + + domPrefixes = omPrefixes.toLowerCase().split(' '), + /*>>domprefixes*/ + + /*>>ns*/ + ns = {'svg': 'http://www.w3.org/2000/svg'}, + /*>>ns*/ + + tests = {}, + inputs = {}, + attrs = {}, + + classes = [], + + slice = classes.slice, + + featureName, // used in testing loop + + + /*>>teststyles*/ + // Inject element with style element and some CSS rules + injectElementWithStyles = function( rule, callback, nodes, testnames ) { + + var style, ret, node, docOverflow, + div = document.createElement('div'), + // After page load injecting a fake body doesn't work so check if body exists + body = document.body, + // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it. + fakeBody = body || document.createElement('body'); + + if ( parseInt(nodes, 10) ) { + // In order not to give false positives we create a node for each test + // This also allows the method to scale for unspecified uses + while ( nodes-- ) { + node = document.createElement('div'); + node.id = testnames ? testnames[nodes] : mod + (nodes + 1); + div.appendChild(node); + } + } + + // '].join(''); + div.id = mod; + // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody. + // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270 + (body ? div : fakeBody).innerHTML += style; + fakeBody.appendChild(div); + if ( !body ) { + //avoid crashing IE8, if background image is used + fakeBody.style.background = ''; + //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible + fakeBody.style.overflow = 'hidden'; + docOverflow = docElement.style.overflow; + docElement.style.overflow = 'hidden'; + docElement.appendChild(fakeBody); + } + + ret = callback(div, rule); + // If this is done after page load we don't want to remove the body so check if body exists + if ( !body ) { + fakeBody.parentNode.removeChild(fakeBody); + docElement.style.overflow = docOverflow; + } else { + div.parentNode.removeChild(div); + } + + return !!ret; + + }, + /*>>teststyles*/ + + /*>>mq*/ + // adapted from matchMedia polyfill + // by Scott Jehl and Paul Irish + // gist.github.com/786768 + testMediaQuery = function( mq ) { + + var matchMedia = window.matchMedia || window.msMatchMedia; + if ( matchMedia ) { + return matchMedia(mq).matches; + } + + var bool; + + injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) { + bool = (window.getComputedStyle ? + getComputedStyle(node, null) : + node.currentStyle)['position'] == 'absolute'; + }); + + return bool; + + }, + /*>>mq*/ + + + /*>>hasevent*/ + // + // isEventSupported determines if a given element supports the given event + // kangax.github.com/iseventsupported/ + // + // The following results are known incorrects: + // Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative + // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333 + // ... + isEventSupported = (function() { + + var TAGNAMES = { + 'select': 'input', 'change': 'input', + 'submit': 'form', 'reset': 'form', + 'error': 'img', 'load': 'img', 'abort': 'img' + }; + + function isEventSupported( eventName, element ) { + + element = element || document.createElement(TAGNAMES[eventName] || 'div'); + eventName = 'on' + eventName; + + // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those + var isSupported = eventName in element; + + if ( !isSupported ) { + // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element + if ( !element.setAttribute ) { + element = document.createElement('div'); + } + if ( element.setAttribute && element.removeAttribute ) { + element.setAttribute(eventName, ''); + isSupported = is(element[eventName], 'function'); + + // If property was created, "remove it" (by setting value to `undefined`) + if ( !is(element[eventName], 'undefined') ) { + element[eventName] = undefined; + } + element.removeAttribute(eventName); + } + } + + element = null; + return isSupported; + } + return isEventSupported; + })(), + /*>>hasevent*/ + + // TODO :: Add flag for hasownprop ? didn't last time + + // hasOwnProperty shim by kangax needed for Safari 2.0 support + _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp; + + if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) { + hasOwnProp = function (object, property) { + return _hasOwnProperty.call(object, property); + }; + } + else { + hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */ + return ((property in object) && is(object.constructor.prototype[property], 'undefined')); + }; + } + + // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js + // es5.github.com/#x15.3.4.5 + + if (!Function.prototype.bind) { + Function.prototype.bind = function bind(that) { + + var target = this; + + if (typeof target != "function") { + throw new TypeError(); + } + + var args = slice.call(arguments, 1), + bound = function () { + + if (this instanceof bound) { + + var F = function(){}; + F.prototype = target.prototype; + var self = new F(); + + var result = target.apply( + self, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return self; + + } else { + + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + + } + + }; + + return bound; + }; + } + + /** + * setCss applies given styles to the Modernizr DOM node. + */ + function setCss( str ) { + mStyle.cssText = str; + } + + /** + * setCssAll extrapolates all vendor-specific css strings. + */ + function setCssAll( str1, str2 ) { + return setCss(prefixes.join(str1 + ';') + ( str2 || '' )); + } + + /** + * is returns a boolean for if typeof obj is exactly type. + */ + function is( obj, type ) { + return typeof obj === type; + } + + /** + * contains returns a boolean for if substr is found within str. + */ + function contains( str, substr ) { + return !!~('' + str).indexOf(substr); + } + + /*>>testprop*/ + + // testProps is a generic CSS / DOM property test. + + // In testing support for a given CSS property, it's legit to test: + // `elem.style[styleName] !== undefined` + // If the property is supported it will return an empty string, + // if unsupported it will return undefined. + + // We'll take advantage of this quick test and skip setting a style + // on our modernizr element, but instead just testing undefined vs + // empty string. + + // Because the testing of the CSS property names (with "-", as + // opposed to the camelCase DOM properties) is non-portable and + // non-standard but works in WebKit and IE (but not Gecko or Opera), + // we explicitly reject properties with dashes so that authors + // developing in WebKit or IE first don't end up with + // browser-specific content by accident. + + function testProps( props, prefixed ) { + for ( var i in props ) { + var prop = props[i]; + if ( !contains(prop, "-") && mStyle[prop] !== undefined ) { + return prefixed == 'pfx' ? prop : true; + } + } + return false; + } + /*>>testprop*/ + + // TODO :: add testDOMProps + /** + * testDOMProps is a generic DOM property test; if a browser supports + * a certain property, it won't return undefined for it. + */ + function testDOMProps( props, obj, elem ) { + for ( var i in props ) { + var item = obj[props[i]]; + if ( item !== undefined) { + + // return the property name as a string + if (elem === false) return props[i]; + + // let's bind a function + if (is(item, 'function')){ + // default to autobind unless override + return item.bind(elem || obj); + } + + // return the unbound function or obj or value + return item; + } + } + return false; + } + + /*>>testallprops*/ + /** + * testPropsAll tests a list of DOM properties we want to check against. + * We specify literally ALL possible (known and/or likely) properties on + * the element including the non-vendor prefixed one, for forward- + * compatibility. + */ + function testPropsAll( prop, prefixed, elem ) { + + var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), + props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' '); + + // did they call .prefixed('boxSizing') or are we just testing a prop? + if(is(prefixed, "string") || is(prefixed, "undefined")) { + return testProps(props, prefixed); + + // otherwise, they called .prefixed('requestAnimationFrame', window[, elem]) + } else { + props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' '); + return testDOMProps(props, prefixed, elem); + } + } + /*>>testallprops*/ + + + /** + * Tests + * ----- + */ + + // The *new* flexbox + // dev.w3.org/csswg/css3-flexbox + + tests['flexbox'] = function() { + return testPropsAll('flexWrap'); + }; + + // The *old* flexbox + // www.w3.org/TR/2009/WD-css3-flexbox-20090723/ + + tests['flexboxlegacy'] = function() { + return testPropsAll('boxDirection'); + }; + + // On the S60 and BB Storm, getContext exists, but always returns undefined + // so we actually have to call getContext() to verify + // github.com/Modernizr/Modernizr/issues/issue/97/ + + tests['canvas'] = function() { + var elem = document.createElement('canvas'); + return !!(elem.getContext && elem.getContext('2d')); + }; + + tests['canvastext'] = function() { + return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function')); + }; + + // webk.it/70117 is tracking a legit WebGL feature detect proposal + + // We do a soft detect which may false positive in order to avoid + // an expensive context creation: bugzil.la/732441 + + tests['webgl'] = function() { + return !!window.WebGLRenderingContext; + }; + + /* + * The Modernizr.touch test only indicates if the browser supports + * touch events, which does not necessarily reflect a touchscreen + * device, as evidenced by tablets running Windows 7 or, alas, + * the Palm Pre / WebOS (touch) phones. + * + * Additionally, Chrome (desktop) used to lie about its support on this, + * but that has since been rectified: crbug.com/36415 + * + * We also test for Firefox 4 Multitouch Support. + * + * For more info, see: modernizr.github.com/Modernizr/touch.html + */ + + tests['touch'] = function() { + var bool; + + if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) { + bool = true; + } else { + injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) { + bool = node.offsetTop === 9; + }); + } + + return bool; + }; + + + // geolocation is often considered a trivial feature detect... + // Turns out, it's quite tricky to get right: + // + // Using !!navigator.geolocation does two things we don't want. It: + // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513 + // 2. Disables page caching in WebKit: webk.it/43956 + // + // Meanwhile, in Firefox < 8, an about:config setting could expose + // a false positive that would throw an exception: bugzil.la/688158 + + tests['geolocation'] = function() { + return 'geolocation' in navigator; + }; + + + tests['postmessage'] = function() { + return !!window.postMessage; + }; + + + // Chrome incognito mode used to throw an exception when using openDatabase + // It doesn't anymore. + tests['websqldatabase'] = function() { + return !!window.openDatabase; + }; + + // Vendors had inconsistent prefixing with the experimental Indexed DB: + // - Webkit's implementation is accessible through webkitIndexedDB + // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB + // For speed, we don't test the legacy (and beta-only) indexedDB + tests['indexedDB'] = function() { + return !!testPropsAll("indexedDB", window); + }; + + // documentMode logic from YUI to filter out IE8 Compat Mode + // which false positives. + tests['hashchange'] = function() { + return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7); + }; + + // Per 1.6: + // This used to be Modernizr.historymanagement but the longer + // name has been deprecated in favor of a shorter and property-matching one. + // The old API is still available in 1.6, but as of 2.0 will throw a warning, + // and in the first release thereafter disappear entirely. + tests['history'] = function() { + return !!(window.history && history.pushState); + }; + + tests['draganddrop'] = function() { + var div = document.createElement('div'); + return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div); + }; + + // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10 + // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17. + // FF10 still uses prefixes, so check for it until then. + // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/ + tests['websockets'] = function() { + return 'WebSocket' in window || 'MozWebSocket' in window; + }; + + + // css-tricks.com/rgba-browser-support/ + tests['rgba'] = function() { + // Set an rgba() color and check the returned value + + setCss('background-color:rgba(150,255,150,.5)'); + + return contains(mStyle.backgroundColor, 'rgba'); + }; + + tests['hsla'] = function() { + // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally, + // except IE9 who retains it as hsla + + setCss('background-color:hsla(120,40%,100%,.5)'); + + return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla'); + }; + + tests['multiplebgs'] = function() { + // Setting multiple images AND a color on the background shorthand property + // and then querying the style.background property value for the number of + // occurrences of "url(" is a reliable method for detecting ACTUAL support for this! + + setCss('background:url(https://),url(https://),red url(https://)'); + + // If the UA supports multiple backgrounds, there should be three occurrences + // of the string "url(" in the return value for elemStyle.background + + return (/(url\s*\(.*?){3}/).test(mStyle.background); + }; + + + + // this will false positive in Opera Mini + // github.com/Modernizr/Modernizr/issues/396 + + tests['backgroundsize'] = function() { + return testPropsAll('backgroundSize'); + }; + + tests['borderimage'] = function() { + return testPropsAll('borderImage'); + }; + + + // Super comprehensive table about all the unique implementations of + // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance + + tests['borderradius'] = function() { + return testPropsAll('borderRadius'); + }; + + // WebOS unfortunately false positives on this test. + tests['boxshadow'] = function() { + return testPropsAll('boxShadow'); + }; + + // FF3.0 will false positive on this test + tests['textshadow'] = function() { + return document.createElement('div').style.textShadow === ''; + }; + + + tests['opacity'] = function() { + // Browsers that actually have CSS Opacity implemented have done so + // according to spec, which means their return values are within the + // range of [0.0,1.0] - including the leading zero. + + setCssAll('opacity:.55'); + + // The non-literal . in this regex is intentional: + // German Chrome returns this value as 0,55 + // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632 + return (/^0.55$/).test(mStyle.opacity); + }; + + + // Note, Android < 4 will pass this test, but can only animate + // a single property at a time + // daneden.me/2011/12/putting-up-with-androids-bullshit/ + tests['cssanimations'] = function() { + return testPropsAll('animationName'); + }; + + + tests['csscolumns'] = function() { + return testPropsAll('columnCount'); + }; + + + tests['cssgradients'] = function() { + /** + * For CSS Gradients syntax, please see: + * webkit.org/blog/175/introducing-css-gradients/ + * developer.mozilla.org/en/CSS/-moz-linear-gradient + * developer.mozilla.org/en/CSS/-moz-radial-gradient + * dev.w3.org/csswg/css3-images/#gradients- + */ + + var str1 = 'background-image:', + str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', + str3 = 'linear-gradient(left top,#9f9, white);'; + + setCss( + // legacy webkit syntax (FIXME: remove when syntax not in use anymore) + (str1 + '-webkit- '.split(' ').join(str2 + str1) + + // standard syntax // trailing 'background-image:' + prefixes.join(str3 + str1)).slice(0, -str1.length) + ); + + return contains(mStyle.backgroundImage, 'gradient'); + }; + + + tests['cssreflections'] = function() { + return testPropsAll('boxReflect'); + }; + + + tests['csstransforms'] = function() { + return !!testPropsAll('transform'); + }; + + + tests['csstransforms3d'] = function() { + + var ret = !!testPropsAll('perspective'); + + // Webkit's 3D transforms are passed off to the browser's own graphics renderer. + // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in + // some conditions. As a result, Webkit typically recognizes the syntax but + // will sometimes throw a false positive, thus we must do a more thorough check: + if ( ret && 'webkitPerspective' in docElement.style ) { + + // Webkit allows this media query to succeed only if the feature is enabled. + // `@media (transform-3d),(-webkit-transform-3d){ ... }` + injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) { + ret = node.offsetLeft === 9 && node.offsetHeight === 3; + }); + } + return ret; + }; + + + tests['csstransitions'] = function() { + return testPropsAll('transition'); + }; + + + /*>>fontface*/ + // @font-face detection routine by Diego Perini + // javascript.nwbox.com/CSSSupport/ + + // false positives: + // WebOS github.com/Modernizr/Modernizr/issues/342 + // WP7 github.com/Modernizr/Modernizr/issues/538 + tests['fontface'] = function() { + var bool; + + injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) { + var style = document.getElementById('smodernizr'), + sheet = style.sheet || style.styleSheet, + cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : ''; + + bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0; + }); + + return bool; + }; + /*>>fontface*/ + + // CSS generated content detection + tests['generatedcontent'] = function() { + var bool; + + injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) { + bool = node.offsetHeight >= 3; + }); + + return bool; + }; + + + + // These tests evaluate support of the video/audio elements, as well as + // testing what types of content they support. + // + // We're using the Boolean constructor here, so that we can extend the value + // e.g. Modernizr.video // true + // Modernizr.video.ogg // 'probably' + // + // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845 + // thx to NielsLeenheer and zcorpan + + // Note: in some older browsers, "no" was a return value instead of empty string. + // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2 + // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5 + + tests['video'] = function() { + var elem = document.createElement('video'), + bool = false; + + // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224 + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,''); + + // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546 + bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,''); + + bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,''); + } + + } catch(e) { } + + return bool; + }; + + tests['audio'] = function() { + var elem = document.createElement('audio'), + bool = false; + + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,''); + bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,''); + + // Mimetypes accepted: + // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements + // bit.ly/iphoneoscodecs + bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,''); + bool.m4a = ( elem.canPlayType('audio/x-m4a;') || + elem.canPlayType('audio/aac;')) .replace(/^no$/,''); + } + } catch(e) { } + + return bool; + }; + + + // In FF4, if disabled, window.localStorage should === null. + + // Normally, we could not test that directly and need to do a + // `('localStorage' in window) && ` test first because otherwise Firefox will + // throw bugzil.la/365772 if cookies are disabled + + // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem + // will throw the exception: + // QUOTA_EXCEEDED_ERRROR DOM Exception 22. + // Peculiarly, getItem and removeItem calls do not throw. + + // Because we are forced to try/catch this, we'll go aggressive. + + // Just FWIW: IE8 Compat mode supports these features completely: + // www.quirksmode.org/dom/html5.html + // But IE8 doesn't support either with local files + + tests['localstorage'] = function() { + try { + localStorage.setItem(mod, mod); + localStorage.removeItem(mod); + return true; + } catch(e) { + return false; + } + }; + + tests['sessionstorage'] = function() { + try { + sessionStorage.setItem(mod, mod); + sessionStorage.removeItem(mod); + return true; + } catch(e) { + return false; + } + }; + + + tests['webworkers'] = function() { + return !!window.Worker; + }; + + + tests['applicationcache'] = function() { + return !!window.applicationCache; + }; + + + // Thanks to Erik Dahlstrom + tests['svg'] = function() { + return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect; + }; + + // specifically for SVG inline in HTML, not within XHTML + // test page: paulirish.com/demo/inline-svg + tests['inlinesvg'] = function() { + var div = document.createElement('div'); + div.innerHTML = ''; + return (div.firstChild && div.firstChild.namespaceURI) == ns.svg; + }; + + // SVG SMIL animation + tests['smil'] = function() { + return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate'))); + }; + + // This test is only for clip paths in SVG proper, not clip paths on HTML content + // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg + + // However read the comments to dig into applying SVG clippaths to HTML content here: + // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491 + tests['svgclippaths'] = function() { + return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath'))); + }; + + /*>>webforms*/ + // input features and input types go directly onto the ret object, bypassing the tests loop. + // Hold this guy to execute in a moment. + function webforms() { + /*>>input*/ + // Run through HTML5's new input attributes to see if the UA understands any. + // We're using f which is the element created early on + // Mike Taylr has created a comprehensive resource for testing these attributes + // when applied to all input types: + // miketaylr.com/code/input-type-attr.html + // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary + + // Only input placeholder is tested while textarea's placeholder is not. + // Currently Safari 4 and Opera 11 have support only for the input placeholder + // Both tests are available in feature-detects/forms-placeholder.js + Modernizr['input'] = (function( props ) { + for ( var i = 0, len = props.length; i < len; i++ ) { + attrs[ props[i] ] = !!(props[i] in inputElem); + } + if (attrs.list){ + // safari false positive's on datalist: webk.it/74252 + // see also github.com/Modernizr/Modernizr/issues/146 + attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement); + } + return attrs; + })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ')); + /*>>input*/ + + /*>>inputtypes*/ + // Run through HTML5's new input types to see if the UA understands any. + // This is put behind the tests runloop because it doesn't return a + // true/false like all the other tests; instead, it returns an object + // containing each input type with its corresponding true/false value + + // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/ + Modernizr['inputtypes'] = (function(props) { + + for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) { + + inputElem.setAttribute('type', inputElemType = props[i]); + bool = inputElem.type !== 'text'; + + // We first check to see if the type we give it sticks.. + // If the type does, we feed it a textual value, which shouldn't be valid. + // If the value doesn't stick, we know there's input sanitization which infers a custom UI + if ( bool ) { + + inputElem.value = smile; + inputElem.style.cssText = 'position:absolute;visibility:hidden;'; + + if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) { + + docElement.appendChild(inputElem); + defaultView = document.defaultView; + + // Safari 2-4 allows the smiley as a value, despite making a slider + bool = defaultView.getComputedStyle && + defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' && + // Mobile android web browser has false positive, so must + // check the height to see if the widget is actually there. + (inputElem.offsetHeight !== 0); + + docElement.removeChild(inputElem); + + } else if ( /^(search|tel)$/.test(inputElemType) ){ + // Spec doesn't define any special parsing or detectable UI + // behaviors so we pass these through as true + + // Interestingly, opera fails the earlier test, so it doesn't + // even make it here. + + } else if ( /^(url|email)$/.test(inputElemType) ) { + // Real url and email support comes with prebaked validation. + bool = inputElem.checkValidity && inputElem.checkValidity() === false; + + } else { + // If the upgraded input compontent rejects the :) text, we got a winner + bool = inputElem.value != smile; + } + } + + inputs[ props[i] ] = !!bool; + } + return inputs; + })('search tel url email datetime date month week time datetime-local number range color'.split(' ')); + /*>>inputtypes*/ + } + /*>>webforms*/ + + + // End of test definitions + // ----------------------- + + + + // Run through all tests and detect their support in the current UA. + // todo: hypothetically we could be doing an array of tests and use a basic loop here. + for ( var feature in tests ) { + if ( hasOwnProp(tests, feature) ) { + // run the test, throw the return value into the Modernizr, + // then based on that boolean, define an appropriate className + // and push it into an array of classes we'll join later. + featureName = feature.toLowerCase(); + Modernizr[featureName] = tests[feature](); + + classes.push((Modernizr[featureName] ? '' : 'no-') + featureName); + } + } + + /*>>webforms*/ + // input tests need to run. + Modernizr.input || webforms(); + /*>>webforms*/ + + + /** + * addTest allows the user to define their own feature tests + * the result will be added onto the Modernizr object, + * as well as an appropriate className set on the html element + * + * @param feature - String naming the feature + * @param test - Function returning true if feature is supported, false if not + */ + Modernizr.addTest = function ( feature, test ) { + if ( typeof feature == 'object' ) { + for ( var key in feature ) { + if ( hasOwnProp( feature, key ) ) { + Modernizr.addTest( key, feature[ key ] ); + } + } + } else { + + feature = feature.toLowerCase(); + + if ( Modernizr[feature] !== undefined ) { + // we're going to quit if you're trying to overwrite an existing test + // if we were to allow it, we'd do this: + // var re = new RegExp("\\b(no-)?" + feature + "\\b"); + // docElement.className = docElement.className.replace( re, '' ); + // but, no rly, stuff 'em. + return Modernizr; + } + + test = typeof test == 'function' ? test() : test; + + if (typeof enableClasses !== "undefined" && enableClasses) { + docElement.className += ' ' + (test ? '' : 'no-') + feature; + } + Modernizr[feature] = test; + + } + + return Modernizr; // allow chaining. + }; + + + // Reset modElem.cssText to nothing to reduce memory footprint. + setCss(''); + modElem = inputElem = null; + + /*>>shiv*/ + /** + * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed + */ + ;(function(window, document) { + /*jshint evil:true */ + /** version */ + var version = '3.7.0'; + + /** Preset options */ + var options = window.html5 || {}; + + /** Used to skip problem elements */ + var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; + + /** Not all elements can be cloned in IE **/ + var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; + + /** Detect whether the browser supports default html5 styles */ + var supportsHtml5Styles; + + /** Name of the expando, to work with multiple documents or to re-shiv one document */ + var expando = '_html5shiv'; + + /** The id for the the documents expando */ + var expanID = 0; + + /** Cached data for each document */ + var expandoData = {}; + + /** Detect whether the browser supports unknown elements */ + var supportsUnknownElements; + + (function() { + try { + var a = document.createElement('a'); + a.innerHTML = ''; + //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles + supportsHtml5Styles = ('hidden' in a); + + supportsUnknownElements = a.childNodes.length == 1 || (function() { + // assign a false positive if unable to shiv + (document.createElement)('a'); + var frag = document.createDocumentFragment(); + return ( + typeof frag.cloneNode == 'undefined' || + typeof frag.createDocumentFragment == 'undefined' || + typeof frag.createElement == 'undefined' + ); + }()); + } catch(e) { + // assign a false positive if detection fails => unable to shiv + supportsHtml5Styles = true; + supportsUnknownElements = true; + } + + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a style sheet with the given CSS text and adds it to the document. + * @private + * @param {Document} ownerDocument The document. + * @param {String} cssText The CSS text. + * @returns {StyleSheet} The style element. + */ + function addStyleSheet(ownerDocument, cssText) { + var p = ownerDocument.createElement('p'), + parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; + + p.innerHTML = 'x'; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Returns the data associated to the given document + * @private + * @param {Document} ownerDocument The document. + * @returns {Object} An object of data. + */ + function getExpandoData(ownerDocument) { + var data = expandoData[ownerDocument[expando]]; + if (!data) { + data = {}; + expanID++; + ownerDocument[expando] = expanID; + expandoData[expanID] = data; + } + return data; + } + + /** + * returns a shived element for the given nodeName and document + * @memberOf html5 + * @param {String} nodeName name of the element + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived element. + */ + function createElement(nodeName, ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createElement(nodeName); + } + if (!data) { + data = getExpandoData(ownerDocument); + } + var node; + + if (data.cache[nodeName]) { + node = data.cache[nodeName].cloneNode(); + } else if (saveClones.test(nodeName)) { + node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); + } else { + node = data.createElem(nodeName); + } + + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; + } + + /** + * returns a shived DocumentFragment for the given document + * @memberOf html5 + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived DocumentFragment. + */ + function createDocumentFragment(ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createDocumentFragment(); + } + data = data || getExpandoData(ownerDocument); + var clone = data.frag.cloneNode(), + i = 0, + elems = getElements(), + l = elems.length; + for(;i>shiv*/ + + // Assign private properties to the return object with prefix + Modernizr._version = version; + + // expose these for the plugin API. Look in the source for how to join() them against your input + /*>>prefixes*/ + Modernizr._prefixes = prefixes; + /*>>prefixes*/ + /*>>domprefixes*/ + Modernizr._domPrefixes = domPrefixes; + Modernizr._cssomPrefixes = cssomPrefixes; + /*>>domprefixes*/ + + /*>>mq*/ + // Modernizr.mq tests a given media query, live against the current state of the window + // A few important notes: + // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false + // * A max-width or orientation query will be evaluated against the current state, which may change later. + // * You must specify values. Eg. If you are testing support for the min-width media query use: + // Modernizr.mq('(min-width:0)') + // usage: + // Modernizr.mq('only screen and (max-width:768)') + Modernizr.mq = testMediaQuery; + /*>>mq*/ + + /*>>hasevent*/ + // Modernizr.hasEvent() detects support for a given event, with an optional element to test on + // Modernizr.hasEvent('gesturestart', elem) + Modernizr.hasEvent = isEventSupported; + /*>>hasevent*/ + + /*>>testprop*/ + // Modernizr.testProp() investigates whether a given style property is recognized + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testProp('pointerEvents') + Modernizr.testProp = function(prop){ + return testProps([prop]); + }; + /*>>testprop*/ + + /*>>testallprops*/ + // Modernizr.testAllProps() investigates whether a given style property, + // or any of its vendor-prefixed variants, is recognized + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testAllProps('boxSizing') + Modernizr.testAllProps = testPropsAll; + /*>>testallprops*/ + + + /*>>teststyles*/ + // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards + // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... }) + Modernizr.testStyles = injectElementWithStyles; + /*>>teststyles*/ + + + /*>>prefixed*/ + // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input + // Modernizr.prefixed('boxSizing') // 'MozBoxSizing' + + // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style. + // Return values will also be the camelCase variant, if you need to translate that to hypenated style use: + // + // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-'); + + // If you're trying to ascertain which transition end event to bind to, you might do something like... + // + // var transEndEventNames = { + // 'WebkitTransition' : 'webkitTransitionEnd', + // 'MozTransition' : 'transitionend', + // 'OTransition' : 'oTransitionEnd', + // 'msTransition' : 'MSTransitionEnd', + // 'transition' : 'transitionend' + // }, + // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ]; + + Modernizr.prefixed = function(prop, obj, elem){ + if(!obj) { + return testPropsAll(prop, 'pfx'); + } else { + // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame' + return testPropsAll(prop, obj, elem); + } + }; + /*>>prefixed*/ + + + /*>>cssclasses*/ + // Remove "no-js" class from element, if it exists: + docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') + + + // Add the new classes to the element. + (enableClasses ? ' js ' + classes.join(' ') : ''); + /*>>cssclasses*/ + + return Modernizr; + +})(this, this.document); +/* @preserve + * Leaflet 1.5.1, a JS library for interactive maps. http://leafletjs.com + * (c) 2010-2018 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */ + +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i(t.L={})}(this,function(t){"use strict";var i=Object.freeze;function h(t){var i,e,n,o;for(e=1,n=arguments.length;e=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=R(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=R(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.xi.y&&n.y=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=D(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=D(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lati.lng&&n.lng';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(t){return!1}}();function kt(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var Bt=(Object.freeze||Object)({ie:it,ielt9:et,edge:nt,webkit:ot,android:st,android23:rt,androidStock:ht,opera:ut,chrome:lt,gecko:ct,safari:_t,phantom:dt,opera12:pt,win:mt,ie3d:ft,webkit3d:gt,gecko3d:vt,any3d:yt,mobile:xt,mobileWebkit:wt,mobileWebkit3d:Pt,msPointer:Lt,pointer:bt,touch:Tt,mobileOpera:zt,mobileGecko:Mt,retina:Ct,canvas:St,svg:Zt,vml:Et}),At=Lt?"MSPointerDown":"pointerdown",It=Lt?"MSPointerMove":"pointermove",Ot=Lt?"MSPointerUp":"pointerup",Rt=Lt?"MSPointerCancel":"pointercancel",Nt=["INPUT","SELECT","OPTION"],Dt={},jt=!1,Wt=0;function Ht(t,i,e,n){return"touchstart"===i?function(t,i,e){var n=a(function(t){if("mouse"!==t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE){if(!(Nt.indexOf(t.target.tagName)<0))return;Di(t)}qt(t,i)});t["_leaflet_touchstart"+e]=n,t.addEventListener(At,n,!1),jt||(document.documentElement.addEventListener(At,Ft,!0),document.documentElement.addEventListener(It,Ut,!0),document.documentElement.addEventListener(Ot,Vt,!0),document.documentElement.addEventListener(Rt,Vt,!0),jt=!0)}(t,e,n):"touchmove"===i?function(t,i,e){var n=function(t){(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons)&&qt(t,i)};t["_leaflet_touchmove"+e]=n,t.addEventListener(It,n,!1)}(t,e,n):"touchend"===i&&function(t,i,e){var n=function(t){qt(t,i)};t["_leaflet_touchend"+e]=n,t.addEventListener(Ot,n,!1),t.addEventListener(Rt,n,!1)}(t,e,n),this}function Ft(t){Dt[t.pointerId]=t,Wt++}function Ut(t){Dt[t.pointerId]&&(Dt[t.pointerId]=t)}function Vt(t){delete Dt[t.pointerId],Wt--}function qt(t,i){for(var e in t.touches=[],Dt)t.touches.push(Dt[e]);t.changedTouches=[t],i(t)}var Gt=Lt?"MSPointerDown":bt?"pointerdown":"touchstart",Kt=Lt?"MSPointerUp":bt?"pointerup":"touchend",Yt="_leaflet_";function Xt(t,o,i){var s,r,a=!1;function e(t){var i;if(bt){if(!nt||"mouse"===t.pointerType)return;i=Wt}else i=t.touches.length;if(!(1this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,D(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},panInside:function(t,i){var e=I((i=i||{}).paddingTopLeft||i.padding||[0,0]),n=I(i.paddingBottomRight||i.padding||[0,0]),o=this.getCenter(),s=this.project(o),r=this.project(t),a=this.getPixelBounds(),h=a.getSize().divideBy(2),u=R([a.min.add(e),a.max.subtract(n)]);if(!u.contains(r)){this._enforcingBounds=!0;var l=s.subtract(r),c=I(r.x+l.x,r.y+l.y);(r.xu.max.x)&&(c.x=s.x-l.x,0u.max.y)&&(c.y=s.y-l.y,0=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,n=[],o="mouseout"===i||"mouseover"===i,s=t.target||t.srcElement,r=!1;s;){if((e=this._targets[u(s)])&&("click"===i||"preclick"===i)&&!t._simulated&&this._draggableMoved(e)){r=!0;break}if(e&&e.listens(i,!0)){if(o&&!Ki(s,t))break;if(n.push(e),o)break}if(s===this._container)break;s=s.parentNode}return n.length||r||o||!Ki(s,t)||(n=[this]),n},_handleDOMEvent:function(t){if(this._loaded&&!Gi(t)){var i=t.type;"mousedown"!==i&&"keypress"!==i&&"keyup"!==i&&"keydown"!==i||zi(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,i,e){if("click"===t.type){var n=h({},t);n.type="preclick",this._fireDOMEvent(n,n.type,e)}if(!t._stopped&&(e=(e||[]).concat(this._findEventTargets(t,i))).length){var o=e[0];"contextmenu"===i&&o.listens(i,!0)&&Di(t);var s={originalEvent:t};if("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type){var r=o.getLatLng&&(!o._radius||o._radius<=10);s.containerPoint=r?this.latLngToContainerPoint(o.getLatLng()):this.mouseEventToContainerPoint(t),s.layerPoint=this.containerPointToLayerPoint(s.containerPoint),s.latlng=r?o.getLatLng():this.layerPointToLatLng(s.layerPoint)}for(var a=0;athis.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o))&&(M(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,e,n){this._mapPane&&(e&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,pi(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:i,noUpdate:n}),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&mi(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),M(function(){this._moveEnd(!0)},this))}});function $i(t){return new Qi(t)}var Qi=Z.extend({options:{position:"topright"},initialize:function(t){p(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return pi(i,"leaflet-control"),-1!==e.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this._map.on("unload",this.remove,this),this},remove:function(){return this._map&&(ui(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0",n=document.createElement("div");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement("label"),n=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement("input")).type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=n):i=this._createRadioElement("leaflet-base-layers_"+u(this),n),this._layerControlInputs.push(i),i.layerId=u(t.layer),Ei(i,"click",this._onInputClick,this);var o=document.createElement("span");o.innerHTML=" "+t.name;var s=document.createElement("div");return e.appendChild(s),s.appendChild(i),s.appendChild(o),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;0<=s;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;si.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),ie=Qi.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var i="leaflet-control-zoom",e=hi("div",i+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=hi("a",e,n);return s.innerHTML=t,s.href="#",s.title=i,s.setAttribute("role","button"),s.setAttribute("aria-label",i),Ni(s),Ei(s,"click",ji),Ei(s,"click",o,this),Ei(s,"click",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i="leaflet-disabled";mi(this._zoomInButton,i),mi(this._zoomOutButton,i),!this._disabled&&t._zoom!==t.getMinZoom()||pi(this._zoomOutButton,i),!this._disabled&&t._zoom!==t.getMaxZoom()||pi(this._zoomInButton,i)}});Ji.mergeOptions({zoomControl:!0}),Ji.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new ie,this.addControl(this.zoomControl))});var ee=Qi.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i="leaflet-control-scale",e=hi("div",i),n=this.options;return this._addScales(n,i+"-line",e),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),e},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=hi("div",i,e)),t.imperial&&(this._iScale=hi("div",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+" m":i/1e3+" km";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;5280Leaflet'},initialize:function(t){p(this,t),this._attributions={}},onAdd:function(t){for(var i in(t.attributionControl=this)._container=hi("div","leaflet-control-attribution"),Ni(this._container),t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});Ji.mergeOptions({attributionControl:!0}),Ji.addInitHook(function(){this.options.attributionControl&&(new ne).addTo(this)});Qi.Layers=te,Qi.Zoom=ie,Qi.Scale=ee,Qi.Attribution=ne,$i.layers=function(t,i,e){return new te(t,i,e)},$i.zoom=function(t){return new ie(t)},$i.scale=function(t){return new ee(t)},$i.attribution=function(t){return new ne(t)};var oe=Z.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}});oe.addTo=function(t,i){return t.addHandler(i,this),this};var se,re={Events:E},ae=Tt?"touchstart mousedown":"mousedown",he={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},ue={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},le=k.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){p(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(Ei(this._dragStartTarget,ae,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(le._dragging===this&&this.finishDrag(),Bi(this._dragStartTarget,ae,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!di(this._element,"leaflet-zoom-anim")&&!(le._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((le._dragging=this)._preventOutline&&zi(this._element),bi(),$t(),this._moving)))){this.fire("down");var i=t.touches?t.touches[0]:t,e=Ci(this._element);this._startPoint=new B(i.clientX,i.clientY),this._parentScale=Si(e),Ei(document,ue[t.type],this._onMove,this),Ei(document,he[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&1i.max.x&&(e|=2),t.yi.max.y&&(e|=8),e}function fe(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return 0this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()t.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||De.prototype._containsPoint.call(this,t,!0)}});var We=Ee.extend({initialize:function(t,i){p(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=v(t)?t:t.features;if(o){for(i=0,e=o.length;iu.x&&(l=s.x+n-u.x+h.x),s.x-l-a.x<0&&(l=s.x-a.x),s.y+e+h.y>u.y&&(c=s.y+e-u.y+h.y),s.y-c-a.y<0&&(c=s.y-a.y),(l||c)&&t.fire("autopanstart").panBy([l,c])}},_onCloseButtonClick:function(t){this._close(),ji(t)},_getAnchor:function(){return I(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Ji.mergeOptions({closePopupOnClick:!0}),Ji.include({openPopup:function(t,i,e){return t instanceof nn||(t=new nn(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Se.include({bindPopup:function(t,i){return t instanceof nn?(p(t,i),(this._popup=t)._source=this):(this._popup&&!i||(this._popup=new nn(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,i){return this._popup&&this._map&&(i=this._popup._prepareOpen(this,t,i),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var i=t.layer||t.target;this._popup&&this._map&&(ji(t),i instanceof Oe?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===i?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var on=en.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){en.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){en.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=en.prototype.getEvents.call(this);return Tt&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=hi("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i=this._map,e=this._container,n=i.latLngToContainerPoint(i.getCenter()),o=i.layerPointToContainerPoint(t),s=this.options.direction,r=e.offsetWidth,a=e.offsetHeight,h=I(this.options.offset),u=this._getAnchor();t="top"===s?t.add(I(-r/2+h.x,-a+h.y+u.y,!0)):"bottom"===s?t.subtract(I(r/2-h.x,-h.y,!0)):"center"===s?t.subtract(I(r/2+h.x,a/2-u.y+h.y,!0)):"right"===s||"auto"===s&&o.xthis.options.maxZoom||ethis.options.maxZoom||void 0!==this.options.minZoom&&oe.max.x)||!i.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return D(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new N(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var i=t.split(":"),e=new B(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(ui(i.el),delete this._tiles[t],this.fire("tileunload",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){pi(t,"leaflet-tile");var i=this.getTileSize();t.style.width=i.x+"px",t.style.height=i.y+"px",t.onselectstart=l,t.onmousemove=l,et&&this.options.opacity<1&&vi(t,this.options.opacity),st&&!rt&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,i){var e=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&M(a(this._tileReady,this,t,null,o)),wi(o,e),this._tiles[n]={el:o,coords:t,current:!0},i.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,i,e){i&&this.fire("tileerror",{error:i,tile:e,coords:t});var n=this._tileCoordsToKey(t);(e=this._tiles[n])&&(e.loaded=+new Date,this._map._fadeAnimated?(vi(e.el,0),C(this._fadeFrame),this._fadeFrame=M(this._updateOpacity,this)):(e.active=!0,this._pruneTiles()),i||(pi(e.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:e.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),et||!this._map._fadeAnimated?M(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new B(this._wrapX?r(t.x,this._wrapX):t.x,this._wrapY?r(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new O(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var an=rn.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._url=t,(i=p(this,i)).detectRetina&&Ct&&0')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),pn={_initContainer:function(){this._container=hi("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(ln.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var i=t._container=dn("shape");pi(i,"leaflet-vml-shape "+(this.options.className||"")),i.coordsize="1 1",t._path=dn("path"),i.appendChild(t._path),this._updateStyle(t),this._layers[u(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;ui(i),t.removeInteractiveTarget(i),delete this._layers[u(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=dn("stroke")),o.appendChild(i),i.weight=n.weight+"px",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=v(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):i.dashStyle="",i.endcap=n.lineCap.replace("butt","flat"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=dn("fill")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+i.x+","+i.y+" "+e+","+n+" 0,23592600")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){ci(t._container)},_bringToBack:function(t){_i(t._container)}},mn=Et?dn:$,fn=ln.extend({getEvents:function(){var t=ln.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=mn("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=mn("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ui(this._container),Bi(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){ln.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute("width",i.x),e.setAttribute("height",i.y)),wi(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,i.x,i.y].join(" ")),this.fire("update")}},_initPath:function(t){var i=t._path=mn("path");t.options.className&&pi(i,t.options.className),t.options.interactive&&pi(i,"leaflet-interactive"),this._updateStyle(t),this._layers[u(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ui(t._path),t.removeInteractiveTarget(t._path),delete this._layers[u(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute("stroke",e.color),i.setAttribute("stroke-opacity",e.opacity),i.setAttribute("stroke-width",e.weight),i.setAttribute("stroke-linecap",e.lineCap),i.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?i.setAttribute("stroke-dasharray",e.dashArray):i.removeAttribute("stroke-dasharray"),e.dashOffset?i.setAttribute("stroke-dashoffset",e.dashOffset):i.removeAttribute("stroke-dashoffset")):i.setAttribute("stroke","none"),e.fill?(i.setAttribute("fill",e.fillColor||e.color),i.setAttribute("fill-opacity",e.fillOpacity),i.setAttribute("fill-rule",e.fillRule||"evenodd")):i.setAttribute("fill","none"))},_updatePoly:function(t,i){this._setPath(t,Q(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",o=t._empty()?"M0 0":"M"+(i.x-e)+","+i.y+n+2*e+",0 "+n+2*-e+",0 ";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute("d",i)},_bringToFront:function(t){ci(t._path)},_bringToBack:function(t){_i(t._path)}});function gn(t){return Zt||Et?new fn(t):null}Et&&fn.include(pn),Ji.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this._createRenderer()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=this._createRenderer({pane:t}),this._paneRenderers[t]=i),i},_createRenderer:function(t){return this.options.preferCanvas&&_n(t)||gn(t)}});var vn=je.extend({initialize:function(t,i){je.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=D(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});fn.create=mn,fn.pointsToPath=Q,We.geometryToLayer=He,We.coordsToLatLng=Fe,We.coordsToLatLngs=Ue,We.latLngToCoords=Ve,We.latLngsToCoords=qe,We.getFeature=Ge,We.asFeature=Ke,Ji.mergeOptions({boxZoom:!0});var yn=oe.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){Ei(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){Bi(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ui(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),$t(),bi(),this._startPoint=this._map.mouseEventToContainerPoint(t),Ei(document,{contextmenu:ji,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=hi("div","leaflet-zoom-box",this._container),pi(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var i=new O(this._point,this._startPoint),e=i.getSize();wi(this._box,i.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(ui(this._box),mi(this._container,"leaflet-crosshair")),Qt(),Ti(),Bi(document,{contextmenu:ji,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0);var i=new N(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Ji.addInitHook("addHandler","boxZoom",yn),Ji.mergeOptions({doubleClickZoom:!0});var xn=oe.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;"center"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Ji.addInitHook("addHandler","doubleClickZoom",xn),Ji.mergeOptions({dragging:!0,inertia:!rt,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var wn=oe.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new le(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}pi(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){mi(this._map._container,"leaflet-grab"),mi(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=D(this._map.options.maxBounds);this._offsetLimit=R(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;1i.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)i.getMaxZoom()&&1= currentZoom) { + visibleLayer = visibleLayer.__parent; + } + } + + if (this._currentShownBounds.contains(visibleLayer.getLatLng())) { + if (this.options.animateAddingMarkers) { + this._animationAddLayer(layer, visibleLayer); + } else { + this._animationAddLayerNonAnimated(layer, visibleLayer); + } + } + return this; + }, + + removeLayer: function (layer) { + + if (layer instanceof L.LayerGroup) { + return this.removeLayers([layer]); + } + + //Non point layers + if (!layer.getLatLng) { + this._nonPointGroup.removeLayer(layer); + this.fire('layerremove', { layer: layer }); + return this; + } + + if (!this._map) { + if (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) { + this._needsRemoving.push({ layer: layer, latlng: layer._latlng }); + } + this.fire('layerremove', { layer: layer }); + return this; + } + + if (!layer.__parent) { + return this; + } + + if (this._unspiderfy) { + this._unspiderfy(); + this._unspiderfyLayer(layer); + } + + //Remove the marker from clusters + this._removeLayer(layer, true); + this.fire('layerremove', { layer: layer }); + + // Refresh bounds and weighted positions. + this._topClusterLevel._recalculateBounds(); + + this._refreshClustersIcons(); + + layer.off(this._childMarkerEventHandlers, this); + + if (this._featureGroup.hasLayer(layer)) { + this._featureGroup.removeLayer(layer); + if (layer.clusterShow) { + layer.clusterShow(); + } + } + + return this; + }, + + //Takes an array of markers and adds them in bulk + addLayers: function (layersArray, skipLayerAddEvent) { + if (!L.Util.isArray(layersArray)) { + return this.addLayer(layersArray); + } + + var fg = this._featureGroup, + npg = this._nonPointGroup, + chunked = this.options.chunkedLoading, + chunkInterval = this.options.chunkInterval, + chunkProgress = this.options.chunkProgress, + l = layersArray.length, + offset = 0, + originalArray = true, + m; + + if (this._map) { + var started = (new Date()).getTime(); + var process = L.bind(function () { + var start = (new Date()).getTime(); + for (; offset < l; offset++) { + if (chunked && offset % 200 === 0) { + // every couple hundred markers, instrument the time elapsed since processing started: + var elapsed = (new Date()).getTime() - start; + if (elapsed > chunkInterval) { + break; // been working too hard, time to take a break :-) + } + } + + m = layersArray[offset]; + + // Group of layers, append children to layersArray and skip. + // Side effects: + // - Total increases, so chunkProgress ratio jumps backward. + // - Groups are not included in this group, only their non-group child layers (hasLayer). + // Changing array length while looping does not affect performance in current browsers: + // http://jsperf.com/for-loop-changing-length/6 + if (m instanceof L.LayerGroup) { + if (originalArray) { + layersArray = layersArray.slice(); + originalArray = false; + } + this._extractNonGroupLayers(m, layersArray); + l = layersArray.length; + continue; + } + + //Not point data, can't be clustered + if (!m.getLatLng) { + npg.addLayer(m); + if (!skipLayerAddEvent) { + this.fire('layeradd', { layer: m }); + } + continue; + } + + if (this.hasLayer(m)) { + continue; + } + + this._addLayer(m, this._maxZoom); + if (!skipLayerAddEvent) { + this.fire('layeradd', { layer: m }); + } + + //If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will + if (m.__parent) { + if (m.__parent.getChildCount() === 2) { + var markers = m.__parent.getAllChildMarkers(), + otherMarker = markers[0] === m ? markers[1] : markers[0]; + fg.removeLayer(otherMarker); + } + } + } + + if (chunkProgress) { + // report progress and time elapsed: + chunkProgress(offset, l, (new Date()).getTime() - started); + } + + // Completed processing all markers. + if (offset === l) { + + // Refresh bounds and weighted positions. + this._topClusterLevel._recalculateBounds(); + + this._refreshClustersIcons(); + + this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds); + } else { + setTimeout(process, this.options.chunkDelay); + } + }, this); + + process(); + } else { + var needsClustering = this._needsClustering; + + for (; offset < l; offset++) { + m = layersArray[offset]; + + // Group of layers, append children to layersArray and skip. + if (m instanceof L.LayerGroup) { + if (originalArray) { + layersArray = layersArray.slice(); + originalArray = false; + } + this._extractNonGroupLayers(m, layersArray); + l = layersArray.length; + continue; + } + + //Not point data, can't be clustered + if (!m.getLatLng) { + npg.addLayer(m); + continue; + } + + if (this.hasLayer(m)) { + continue; + } + + needsClustering.push(m); + } + } + return this; + }, + + //Takes an array of markers and removes them in bulk + removeLayers: function (layersArray) { + var i, m, + l = layersArray.length, + fg = this._featureGroup, + npg = this._nonPointGroup, + originalArray = true; + + if (!this._map) { + for (i = 0; i < l; i++) { + m = layersArray[i]; + + // Group of layers, append children to layersArray and skip. + if (m instanceof L.LayerGroup) { + if (originalArray) { + layersArray = layersArray.slice(); + originalArray = false; + } + this._extractNonGroupLayers(m, layersArray); + l = layersArray.length; + continue; + } + + this._arraySplice(this._needsClustering, m); + npg.removeLayer(m); + if (this.hasLayer(m)) { + this._needsRemoving.push({ layer: m, latlng: m._latlng }); + } + this.fire('layerremove', { layer: m }); + } + return this; + } + + if (this._unspiderfy) { + this._unspiderfy(); + + // Work on a copy of the array, so that next loop is not affected. + var layersArray2 = layersArray.slice(), + l2 = l; + for (i = 0; i < l2; i++) { + m = layersArray2[i]; + + // Group of layers, append children to layersArray and skip. + if (m instanceof L.LayerGroup) { + this._extractNonGroupLayers(m, layersArray2); + l2 = layersArray2.length; + continue; + } + + this._unspiderfyLayer(m); + } + } + + for (i = 0; i < l; i++) { + m = layersArray[i]; + + // Group of layers, append children to layersArray and skip. + if (m instanceof L.LayerGroup) { + if (originalArray) { + layersArray = layersArray.slice(); + originalArray = false; + } + this._extractNonGroupLayers(m, layersArray); + l = layersArray.length; + continue; + } + + if (!m.__parent) { + npg.removeLayer(m); + this.fire('layerremove', { layer: m }); + continue; + } + + this._removeLayer(m, true, true); + this.fire('layerremove', { layer: m }); + + if (fg.hasLayer(m)) { + fg.removeLayer(m); + if (m.clusterShow) { + m.clusterShow(); + } + } + } + + // Refresh bounds and weighted positions. + this._topClusterLevel._recalculateBounds(); + + this._refreshClustersIcons(); + + //Fix up the clusters and markers on the map + this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds); + + return this; + }, + + //Removes all layers from the MarkerClusterGroup + clearLayers: function () { + //Need our own special implementation as the LayerGroup one doesn't work for us + + //If we aren't on the map (yet), blow away the markers we know of + if (!this._map) { + this._needsClustering = []; + this._needsRemoving = []; + delete this._gridClusters; + delete this._gridUnclustered; + } + + if (this._noanimationUnspiderfy) { + this._noanimationUnspiderfy(); + } + + //Remove all the visible layers + this._featureGroup.clearLayers(); + this._nonPointGroup.clearLayers(); + + this.eachLayer(function (marker) { + marker.off(this._childMarkerEventHandlers, this); + delete marker.__parent; + }, this); + + if (this._map) { + //Reset _topClusterLevel and the DistanceGrids + this._generateInitialClusters(); + } + + return this; + }, + + //Override FeatureGroup.getBounds as it doesn't work + getBounds: function () { + var bounds = new L.LatLngBounds(); + + if (this._topClusterLevel) { + bounds.extend(this._topClusterLevel._bounds); + } + + for (var i = this._needsClustering.length - 1; i >= 0; i--) { + bounds.extend(this._needsClustering[i].getLatLng()); + } + + bounds.extend(this._nonPointGroup.getBounds()); + + return bounds; + }, + + //Overrides LayerGroup.eachLayer + eachLayer: function (method, context) { + var markers = this._needsClustering.slice(), + needsRemoving = this._needsRemoving, + thisNeedsRemoving, i, j; + + if (this._topClusterLevel) { + this._topClusterLevel.getAllChildMarkers(markers); + } + + for (i = markers.length - 1; i >= 0; i--) { + thisNeedsRemoving = true; + + for (j = needsRemoving.length - 1; j >= 0; j--) { + if (needsRemoving[j].layer === markers[i]) { + thisNeedsRemoving = false; + break; + } + } + + if (thisNeedsRemoving) { + method.call(context, markers[i]); + } + } + + this._nonPointGroup.eachLayer(method, context); + }, + + //Overrides LayerGroup.getLayers + getLayers: function () { + var layers = []; + this.eachLayer(function (l) { + layers.push(l); + }); + return layers; + }, + + //Overrides LayerGroup.getLayer, WARNING: Really bad performance + getLayer: function (id) { + var result = null; + + id = parseInt(id, 10); + + this.eachLayer(function (l) { + if (L.stamp(l) === id) { + result = l; + } + }); + + return result; + }, + + //Returns true if the given layer is in this MarkerClusterGroup + hasLayer: function (layer) { + if (!layer) { + return false; + } + + var i, anArray = this._needsClustering; + + for (i = anArray.length - 1; i >= 0; i--) { + if (anArray[i] === layer) { + return true; + } + } + + anArray = this._needsRemoving; + for (i = anArray.length - 1; i >= 0; i--) { + if (anArray[i].layer === layer) { + return false; + } + } + + return !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer); + }, + + //Zoom down to show the given layer (spiderfying if necessary) then calls the callback + zoomToShowLayer: function (layer, callback) { + + if (typeof callback !== 'function') { + callback = function () {}; + } + + var showMarker = function () { + if ((layer._icon || layer.__parent._icon) && !this._inZoomAnimation) { + this._map.off('moveend', showMarker, this); + this.off('animationend', showMarker, this); + + if (layer._icon) { + callback(); + } else if (layer.__parent._icon) { + this.once('spiderfied', callback, this); + layer.__parent.spiderfy(); + } + } + }; + + if (layer._icon && this._map.getBounds().contains(layer.getLatLng())) { + //Layer is visible ond on screen, immediate return + callback(); + } else if (layer.__parent._zoom < Math.round(this._map._zoom)) { + //Layer should be visible at this zoom level. It must not be on screen so just pan over to it + this._map.on('moveend', showMarker, this); + this._map.panTo(layer.getLatLng()); + } else { + this._map.on('moveend', showMarker, this); + this.on('animationend', showMarker, this); + layer.__parent.zoomToBounds(); + } + }, + + //Overrides FeatureGroup.onAdd + onAdd: function (map) { + this._map = map; + var i, l, layer; + + if (!isFinite(this._map.getMaxZoom())) { + throw "Map has no maxZoom specified"; + } + + this._featureGroup.addTo(map); + this._nonPointGroup.addTo(map); + + if (!this._gridClusters) { + this._generateInitialClusters(); + } + + this._maxLat = map.options.crs.projection.MAX_LATITUDE; + + //Restore all the positions as they are in the MCG before removing them + for (i = 0, l = this._needsRemoving.length; i < l; i++) { + layer = this._needsRemoving[i]; + layer.newlatlng = layer.layer._latlng; + layer.layer._latlng = layer.latlng; + } + //Remove them, then restore their new positions + for (i = 0, l = this._needsRemoving.length; i < l; i++) { + layer = this._needsRemoving[i]; + this._removeLayer(layer.layer, true); + layer.layer._latlng = layer.newlatlng; + } + this._needsRemoving = []; + + //Remember the current zoom level and bounds + this._zoom = Math.round(this._map._zoom); + this._currentShownBounds = this._getExpandedVisibleBounds(); + + this._map.on('zoomend', this._zoomEnd, this); + this._map.on('moveend', this._moveEnd, this); + + if (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely + this._spiderfierOnAdd(); + } + + this._bindEvents(); + + //Actually add our markers to the map: + l = this._needsClustering; + this._needsClustering = []; + this.addLayers(l, true); + }, + + //Overrides FeatureGroup.onRemove + onRemove: function (map) { + map.off('zoomend', this._zoomEnd, this); + map.off('moveend', this._moveEnd, this); + + this._unbindEvents(); + + //In case we are in a cluster animation + this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', ''); + + if (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely + this._spiderfierOnRemove(); + } + + delete this._maxLat; + + //Clean up all the layers we added to the map + this._hideCoverage(); + this._featureGroup.remove(); + this._nonPointGroup.remove(); + + this._featureGroup.clearLayers(); + + this._map = null; + }, + + getVisibleParent: function (marker) { + var vMarker = marker; + while (vMarker && !vMarker._icon) { + vMarker = vMarker.__parent; + } + return vMarker || null; + }, + + //Remove the given object from the given array + _arraySplice: function (anArray, obj) { + for (var i = anArray.length - 1; i >= 0; i--) { + if (anArray[i] === obj) { + anArray.splice(i, 1); + return true; + } + } + }, + + /** + * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom. + * @param marker to be removed from _gridUnclustered. + * @param z integer bottom start zoom level (included) + * @private + */ + _removeFromGridUnclustered: function (marker, z) { + var map = this._map, + gridUnclustered = this._gridUnclustered, + minZoom = Math.floor(this._map.getMinZoom()); + + for (; z >= minZoom; z--) { + if (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) { + break; + } + } + }, + + _childMarkerDragStart: function (e) { + e.target.__dragStart = e.target._latlng; + }, + + _childMarkerMoved: function (e) { + if (!this._ignoreMove && !e.target.__dragStart) { + var isPopupOpen = e.target._popup && e.target._popup.isOpen(); + + this._moveChild(e.target, e.oldLatLng, e.latlng); + + if (isPopupOpen) { + e.target.openPopup(); + } + } + }, + + _moveChild: function (layer, from, to) { + layer._latlng = from; + this.removeLayer(layer); + + layer._latlng = to; + this.addLayer(layer); + }, + + _childMarkerDragEnd: function (e) { + var dragStart = e.target.__dragStart; + delete e.target.__dragStart; + if (dragStart) { + this._moveChild(e.target, dragStart, e.target._latlng); + } + }, + + + //Internal function for removing a marker from everything. + //dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions) + _removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) { + var gridClusters = this._gridClusters, + gridUnclustered = this._gridUnclustered, + fg = this._featureGroup, + map = this._map, + minZoom = Math.floor(this._map.getMinZoom()); + + //Remove the marker from distance clusters it might be in + if (removeFromDistanceGrid) { + this._removeFromGridUnclustered(marker, this._maxZoom); + } + + //Work our way up the clusters removing them as we go if required + var cluster = marker.__parent, + markers = cluster._markers, + otherMarker; + + //Remove the marker from the immediate parents marker list + this._arraySplice(markers, marker); + + while (cluster) { + cluster._childCount--; + cluster._boundsNeedUpdate = true; + + if (cluster._zoom < minZoom) { + //Top level, do nothing + break; + } else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required + //We need to push the other marker up to the parent + otherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0]; + + //Update distance grid + gridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom)); + gridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom)); + + //Move otherMarker up to parent + this._arraySplice(cluster.__parent._childClusters, cluster); + cluster.__parent._markers.push(otherMarker); + otherMarker.__parent = cluster.__parent; + + if (cluster._icon) { + //Cluster is currently on the map, need to put the marker on the map instead + fg.removeLayer(cluster); + if (!dontUpdateMap) { + fg.addLayer(otherMarker); + } + } + } else { + cluster._iconNeedsUpdate = true; + } + + cluster = cluster.__parent; + } + + delete marker.__parent; + }, + + _isOrIsParent: function (el, oel) { + while (oel) { + if (el === oel) { + return true; + } + oel = oel.parentNode; + } + return false; + }, + + //Override L.Evented.fire + fire: function (type, data, propagate) { + if (data && data.layer instanceof L.MarkerCluster) { + //Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget) + if (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) { + return; + } + type = 'cluster' + type; + } + + L.FeatureGroup.prototype.fire.call(this, type, data, propagate); + }, + + //Override L.Evented.listens + listens: function (type, propagate) { + return L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate); + }, + + //Default functionality + _defaultIconCreateFunction: function (cluster) { + var childCount = cluster.getChildCount(); + + var c = ' marker-cluster-'; + if (childCount < 10) { + c += 'small'; + } else if (childCount < 100) { + c += 'medium'; + } else { + c += 'large'; + } + + return new L.DivIcon({ html: '
' + childCount + '
', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) }); + }, + + _bindEvents: function () { + var map = this._map, + spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom, + showCoverageOnHover = this.options.showCoverageOnHover, + zoomToBoundsOnClick = this.options.zoomToBoundsOnClick; + + //Zoom on cluster click or spiderfy if we are at the lowest level + if (spiderfyOnMaxZoom || zoomToBoundsOnClick) { + this.on('clusterclick', this._zoomOrSpiderfy, this); + } + + //Show convex hull (boundary) polygon on mouse over + if (showCoverageOnHover) { + this.on('clustermouseover', this._showCoverage, this); + this.on('clustermouseout', this._hideCoverage, this); + map.on('zoomend', this._hideCoverage, this); + } + }, + + _zoomOrSpiderfy: function (e) { + var cluster = e.layer, + bottomCluster = cluster; + + while (bottomCluster._childClusters.length === 1) { + bottomCluster = bottomCluster._childClusters[0]; + } + + if (bottomCluster._zoom === this._maxZoom && + bottomCluster._childCount === cluster._childCount && + this.options.spiderfyOnMaxZoom) { + + // All child markers are contained in a single cluster from this._maxZoom to this cluster. + cluster.spiderfy(); + } else if (this.options.zoomToBoundsOnClick) { + cluster.zoomToBounds(); + } + + // Focus the map again for keyboard users. + if (e.originalEvent && e.originalEvent.keyCode === 13) { + this._map._container.focus(); + } + }, + + _showCoverage: function (e) { + var map = this._map; + if (this._inZoomAnimation) { + return; + } + if (this._shownPolygon) { + map.removeLayer(this._shownPolygon); + } + if (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) { + this._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions); + map.addLayer(this._shownPolygon); + } + }, + + _hideCoverage: function () { + if (this._shownPolygon) { + this._map.removeLayer(this._shownPolygon); + this._shownPolygon = null; + } + }, + + _unbindEvents: function () { + var spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom, + showCoverageOnHover = this.options.showCoverageOnHover, + zoomToBoundsOnClick = this.options.zoomToBoundsOnClick, + map = this._map; + + if (spiderfyOnMaxZoom || zoomToBoundsOnClick) { + this.off('clusterclick', this._zoomOrSpiderfy, this); + } + if (showCoverageOnHover) { + this.off('clustermouseover', this._showCoverage, this); + this.off('clustermouseout', this._hideCoverage, this); + map.off('zoomend', this._hideCoverage, this); + } + }, + + _zoomEnd: function () { + if (!this._map) { //May have been removed from the map by a zoomEnd handler + return; + } + this._mergeSplitClusters(); + + this._zoom = Math.round(this._map._zoom); + this._currentShownBounds = this._getExpandedVisibleBounds(); + }, + + _moveEnd: function () { + if (this._inZoomAnimation) { + return; + } + + var newBounds = this._getExpandedVisibleBounds(); + + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, newBounds); + this._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds); + + this._currentShownBounds = newBounds; + return; + }, + + _generateInitialClusters: function () { + var maxZoom = Math.ceil(this._map.getMaxZoom()), + minZoom = Math.floor(this._map.getMinZoom()), + radius = this.options.maxClusterRadius, + radiusFn = radius; + + //If we just set maxClusterRadius to a single number, we need to create + //a simple function to return that number. Otherwise, we just have to + //use the function we've passed in. + if (typeof radius !== "function") { + radiusFn = function () { return radius; }; + } + + if (this.options.disableClusteringAtZoom !== null) { + maxZoom = this.options.disableClusteringAtZoom - 1; + } + this._maxZoom = maxZoom; + this._gridClusters = {}; + this._gridUnclustered = {}; + + //Set up DistanceGrids for each zoom + for (var zoom = maxZoom; zoom >= minZoom; zoom--) { + this._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom)); + this._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom)); + } + + // Instantiate the appropriate L.MarkerCluster class (animated or not). + this._topClusterLevel = new this._markerCluster(this, minZoom - 1); + }, + + //Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom) + _addLayer: function (layer, zoom) { + var gridClusters = this._gridClusters, + gridUnclustered = this._gridUnclustered, + minZoom = Math.floor(this._map.getMinZoom()), + markerPoint, z; + + if (this.options.singleMarkerMode) { + this._overrideMarkerIcon(layer); + } + + layer.on(this._childMarkerEventHandlers, this); + + //Find the lowest zoom level to slot this one in + for (; zoom >= minZoom; zoom--) { + markerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position + + //Try find a cluster close by + var closest = gridClusters[zoom].getNearObject(markerPoint); + if (closest) { + closest._addChild(layer); + layer.__parent = closest; + return; + } + + //Try find a marker close by to form a new cluster with + closest = gridUnclustered[zoom].getNearObject(markerPoint); + if (closest) { + var parent = closest.__parent; + if (parent) { + this._removeLayer(closest, false); + } + + //Create new cluster with these 2 in it + + var newCluster = new this._markerCluster(this, zoom, closest, layer); + gridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom)); + closest.__parent = newCluster; + layer.__parent = newCluster; + + //First create any new intermediate parent clusters that don't exist + var lastParent = newCluster; + for (z = zoom - 1; z > parent._zoom; z--) { + lastParent = new this._markerCluster(this, z, lastParent); + gridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z)); + } + parent._addChild(lastParent); + + //Remove closest from this zoom level and any above that it is in, replace with newCluster + this._removeFromGridUnclustered(closest, zoom); + + return; + } + + //Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards + gridUnclustered[zoom].addObject(layer, markerPoint); + } + + //Didn't get in anything, add us to the top + this._topClusterLevel._addChild(layer); + layer.__parent = this._topClusterLevel; + return; + }, + + /** + * Refreshes the icon of all "dirty" visible clusters. + * Non-visible "dirty" clusters will be updated when they are added to the map. + * @private + */ + _refreshClustersIcons: function () { + this._featureGroup.eachLayer(function (c) { + if (c instanceof L.MarkerCluster && c._iconNeedsUpdate) { + c._updateIcon(); + } + }); + }, + + //Enqueue code to fire after the marker expand/contract has happened + _enqueue: function (fn) { + this._queue.push(fn); + if (!this._queueTimeout) { + this._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300); + } + }, + _processQueue: function () { + for (var i = 0; i < this._queue.length; i++) { + this._queue[i].call(this); + } + this._queue.length = 0; + clearTimeout(this._queueTimeout); + this._queueTimeout = null; + }, + + //Merge and split any existing clusters that are too big or small + _mergeSplitClusters: function () { + var mapZoom = Math.round(this._map._zoom); + + //In case we are starting to split before the animation finished + this._processQueue(); + + if (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split + this._animationStart(); + //Remove clusters now off screen + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds()); + + this._animationZoomIn(this._zoom, mapZoom); + + } else if (this._zoom > mapZoom) { //Zoom out, merge + this._animationStart(); + + this._animationZoomOut(this._zoom, mapZoom); + } else { + this._moveEnd(); + } + }, + + //Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan) + _getExpandedVisibleBounds: function () { + if (!this.options.removeOutsideVisibleBounds) { + return this._mapBoundsInfinite; + } else if (L.Browser.mobile) { + return this._checkBoundsMaxLat(this._map.getBounds()); + } + + return this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor. + }, + + /** + * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude + * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas). + * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without + * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit, + * making the user think that MCG "eats" them and never displays them again. + * @param bounds L.LatLngBounds + * @returns {L.LatLngBounds} + * @private + */ + _checkBoundsMaxLat: function (bounds) { + var maxLat = this._maxLat; + + if (maxLat !== undefined) { + if (bounds.getNorth() >= maxLat) { + bounds._northEast.lat = Infinity; + } + if (bounds.getSouth() <= -maxLat) { + bounds._southWest.lat = -Infinity; + } + } + + return bounds; + }, + + //Shared animation code + _animationAddLayerNonAnimated: function (layer, newCluster) { + if (newCluster === layer) { + this._featureGroup.addLayer(layer); + } else if (newCluster._childCount === 2) { + newCluster._addToMap(); + + var markers = newCluster.getAllChildMarkers(); + this._featureGroup.removeLayer(markers[0]); + this._featureGroup.removeLayer(markers[1]); + } else { + newCluster._updateIcon(); + } + }, + + /** + * Extracts individual (i.e. non-group) layers from a Layer Group. + * @param group to extract layers from. + * @param output {Array} in which to store the extracted layers. + * @returns {*|Array} + * @private + */ + _extractNonGroupLayers: function (group, output) { + var layers = group.getLayers(), + i = 0, + layer; + + output = output || []; + + for (; i < layers.length; i++) { + layer = layers[i]; + + if (layer instanceof L.LayerGroup) { + this._extractNonGroupLayers(layer, output); + continue; + } + + output.push(layer); + } + + return output; + }, + + /** + * Implements the singleMarkerMode option. + * @param layer Marker to re-style using the Clusters iconCreateFunction. + * @returns {L.Icon} The newly created icon. + * @private + */ + _overrideMarkerIcon: function (layer) { + var icon = layer.options.icon = this.options.iconCreateFunction({ + getChildCount: function () { + return 1; + }, + getAllChildMarkers: function () { + return [layer]; + } + }); + + return icon; + } +}); + +// Constant bounds used in case option "removeOutsideVisibleBounds" is set to false. +L.MarkerClusterGroup.include({ + _mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity)) +}); + +L.MarkerClusterGroup.include({ + _noAnimation: { + //Non Animated versions of everything + _animationStart: function () { + //Do nothing... + }, + _animationZoomIn: function (previousZoomLevel, newZoomLevel) { + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel); + this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds()); + + //We didn't actually animate, but we use this event to mean "clustering animations have finished" + this.fire('animationend'); + }, + _animationZoomOut: function (previousZoomLevel, newZoomLevel) { + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel); + this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds()); + + //We didn't actually animate, but we use this event to mean "clustering animations have finished" + this.fire('animationend'); + }, + _animationAddLayer: function (layer, newCluster) { + this._animationAddLayerNonAnimated(layer, newCluster); + } + }, + + _withAnimation: { + //Animated versions here + _animationStart: function () { + this._map._mapPane.className += ' leaflet-cluster-anim'; + this._inZoomAnimation++; + }, + + _animationZoomIn: function (previousZoomLevel, newZoomLevel) { + var bounds = this._getExpandedVisibleBounds(), + fg = this._featureGroup, + minZoom = Math.floor(this._map.getMinZoom()), + i; + + this._ignoreMove = true; + + //Add all children of current clusters to map and remove those clusters from map + this._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) { + var startPos = c._latlng, + markers = c._markers, + m; + + if (!bounds.contains(startPos)) { + startPos = null; + } + + if (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us + fg.removeLayer(c); + c._recursivelyAddChildrenToMap(null, newZoomLevel, bounds); + } else { + //Fade out old cluster + c.clusterHide(); + c._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds); + } + + //Remove all markers that aren't visible any more + //TODO: Do we actually need to do this on the higher levels too? + for (i = markers.length - 1; i >= 0; i--) { + m = markers[i]; + if (!bounds.contains(m._latlng)) { + fg.removeLayer(m); + } + } + + }); + + this._forceLayout(); + + //Update opacities + this._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel); + //TODO Maybe? Update markers in _recursivelyBecomeVisible + fg.eachLayer(function (n) { + if (!(n instanceof L.MarkerCluster) && n._icon) { + n.clusterShow(); + } + }); + + //update the positions of the just added clusters/markers + this._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) { + c._recursivelyRestoreChildPositions(newZoomLevel); + }); + + this._ignoreMove = false; + + //Remove the old clusters and close the zoom animation + this._enqueue(function () { + //update the positions of the just added clusters/markers + this._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) { + fg.removeLayer(c); + c.clusterShow(); + }); + + this._animationEnd(); + }); + }, + + _animationZoomOut: function (previousZoomLevel, newZoomLevel) { + this._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel); + + //Need to add markers for those that weren't on the map before but are now + this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds()); + //Remove markers that were on the map before but won't be now + this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel, this._getExpandedVisibleBounds()); + }, + + _animationAddLayer: function (layer, newCluster) { + var me = this, + fg = this._featureGroup; + + fg.addLayer(layer); + if (newCluster !== layer) { + if (newCluster._childCount > 2) { //Was already a cluster + + newCluster._updateIcon(); + this._forceLayout(); + this._animationStart(); + + layer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng())); + layer.clusterHide(); + + this._enqueue(function () { + fg.removeLayer(layer); + layer.clusterShow(); + + me._animationEnd(); + }); + + } else { //Just became a cluster + this._forceLayout(); + + me._animationStart(); + me._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._zoom); + } + } + } + }, + + // Private methods for animated versions. + _animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) { + var bounds = this._getExpandedVisibleBounds(), + minZoom = Math.floor(this._map.getMinZoom()); + + //Animate all of the markers in the clusters to move to their cluster center point + cluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, minZoom, previousZoomLevel + 1, newZoomLevel); + + var me = this; + + //Update the opacity (If we immediately set it they won't animate) + this._forceLayout(); + cluster._recursivelyBecomeVisible(bounds, newZoomLevel); + + //TODO: Maybe use the transition timing stuff to make this more reliable + //When the animations are done, tidy up + this._enqueue(function () { + + //This cluster stopped being a cluster before the timeout fired + if (cluster._childCount === 1) { + var m = cluster._markers[0]; + //If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it + this._ignoreMove = true; + m.setLatLng(m.getLatLng()); + this._ignoreMove = false; + if (m.clusterShow) { + m.clusterShow(); + } + } else { + cluster._recursively(bounds, newZoomLevel, minZoom, function (c) { + c._recursivelyRemoveChildrenFromMap(bounds, minZoom, previousZoomLevel + 1); + }); + } + me._animationEnd(); + }); + }, + + _animationEnd: function () { + if (this._map) { + this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', ''); + } + this._inZoomAnimation--; + this.fire('animationend'); + }, + + //Force a browser layout of stuff in the map + // Should apply the current opacity and location to all elements so we can update them again for an animation + _forceLayout: function () { + //In my testing this works, infact offsetWidth of any element seems to work. + //Could loop all this._layers and do this for each _icon if it stops working + + L.Util.falseFn(document.body.offsetWidth); + } +}); + +L.markerClusterGroup = function (options) { + return new L.MarkerClusterGroup(options); +}; + +var MarkerCluster = L.MarkerCluster = L.Marker.extend({ + options: L.Icon.prototype.options, + + initialize: function (group, zoom, a, b) { + + L.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0), + { icon: this, pane: group.options.clusterPane }); + + this._group = group; + this._zoom = zoom; + + this._markers = []; + this._childClusters = []; + this._childCount = 0; + this._iconNeedsUpdate = true; + this._boundsNeedUpdate = true; + + this._bounds = new L.LatLngBounds(); + + if (a) { + this._addChild(a); + } + if (b) { + this._addChild(b); + } + }, + + //Recursively retrieve all child markers of this cluster + getAllChildMarkers: function (storageArray, ignoreDraggedMarker) { + storageArray = storageArray || []; + + for (var i = this._childClusters.length - 1; i >= 0; i--) { + this._childClusters[i].getAllChildMarkers(storageArray); + } + + for (var j = this._markers.length - 1; j >= 0; j--) { + if (ignoreDraggedMarker && this._markers[j].__dragStart) { + continue; + } + storageArray.push(this._markers[j]); + } + + return storageArray; + }, + + //Returns the count of how many child markers we have + getChildCount: function () { + return this._childCount; + }, + + //Zoom to the minimum of showing all of the child markers, or the extents of this cluster + zoomToBounds: function (fitBoundsOptions) { + var childClusters = this._childClusters.slice(), + map = this._group._map, + boundsZoom = map.getBoundsZoom(this._bounds), + zoom = this._zoom + 1, + mapZoom = map.getZoom(), + i; + + //calculate how far we need to zoom down to see all of the markers + while (childClusters.length > 0 && boundsZoom > zoom) { + zoom++; + var newClusters = []; + for (i = 0; i < childClusters.length; i++) { + newClusters = newClusters.concat(childClusters[i]._childClusters); + } + childClusters = newClusters; + } + + if (boundsZoom > zoom) { + this._group._map.setView(this._latlng, zoom); + } else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead + this._group._map.setView(this._latlng, mapZoom + 1); + } else { + this._group._map.fitBounds(this._bounds, fitBoundsOptions); + } + }, + + getBounds: function () { + var bounds = new L.LatLngBounds(); + bounds.extend(this._bounds); + return bounds; + }, + + _updateIcon: function () { + this._iconNeedsUpdate = true; + if (this._icon) { + this.setIcon(this); + } + }, + + //Cludge for Icon, we pretend to be an icon for performance + createIcon: function () { + if (this._iconNeedsUpdate) { + this._iconObj = this._group.options.iconCreateFunction(this); + this._iconNeedsUpdate = false; + } + return this._iconObj.createIcon(); + }, + createShadow: function () { + return this._iconObj.createShadow(); + }, + + + _addChild: function (new1, isNotificationFromChild) { + + this._iconNeedsUpdate = true; + + this._boundsNeedUpdate = true; + this._setClusterCenter(new1); + + if (new1 instanceof L.MarkerCluster) { + if (!isNotificationFromChild) { + this._childClusters.push(new1); + new1.__parent = this; + } + this._childCount += new1._childCount; + } else { + if (!isNotificationFromChild) { + this._markers.push(new1); + } + this._childCount++; + } + + if (this.__parent) { + this.__parent._addChild(new1, true); + } + }, + + /** + * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position. + * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet. + * @private + */ + _setClusterCenter: function (child) { + if (!this._cLatLng) { + // when clustering, take position of the first point as the cluster center + this._cLatLng = child._cLatLng || child._latlng; + } + }, + + /** + * Assigns impossible bounding values so that the next extend entirely determines the new bounds. + * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class. + * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended. + * @private + */ + _resetBounds: function () { + var bounds = this._bounds; + + if (bounds._southWest) { + bounds._southWest.lat = Infinity; + bounds._southWest.lng = Infinity; + } + if (bounds._northEast) { + bounds._northEast.lat = -Infinity; + bounds._northEast.lng = -Infinity; + } + }, + + _recalculateBounds: function () { + var markers = this._markers, + childClusters = this._childClusters, + latSum = 0, + lngSum = 0, + totalCount = this._childCount, + i, child, childLatLng, childCount; + + // Case where all markers are removed from the map and we are left with just an empty _topClusterLevel. + if (totalCount === 0) { + return; + } + + // Reset rather than creating a new object, for performance. + this._resetBounds(); + + // Child markers. + for (i = 0; i < markers.length; i++) { + childLatLng = markers[i]._latlng; + + this._bounds.extend(childLatLng); + + latSum += childLatLng.lat; + lngSum += childLatLng.lng; + } + + // Child clusters. + for (i = 0; i < childClusters.length; i++) { + child = childClusters[i]; + + // Re-compute child bounds and weighted position first if necessary. + if (child._boundsNeedUpdate) { + child._recalculateBounds(); + } + + this._bounds.extend(child._bounds); + + childLatLng = child._wLatLng; + childCount = child._childCount; + + latSum += childLatLng.lat * childCount; + lngSum += childLatLng.lng * childCount; + } + + this._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount); + + // Reset dirty flag. + this._boundsNeedUpdate = false; + }, + + //Set our markers position as given and add it to the map + _addToMap: function (startPos) { + if (startPos) { + this._backupLatlng = this._latlng; + this.setLatLng(startPos); + } + this._group._featureGroup.addLayer(this); + }, + + _recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) { + this._recursively(bounds, this._group._map.getMinZoom(), maxZoom - 1, + function (c) { + var markers = c._markers, + i, m; + for (i = markers.length - 1; i >= 0; i--) { + m = markers[i]; + + //Only do it if the icon is still on the map + if (m._icon) { + m._setPos(center); + m.clusterHide(); + } + } + }, + function (c) { + var childClusters = c._childClusters, + j, cm; + for (j = childClusters.length - 1; j >= 0; j--) { + cm = childClusters[j]; + if (cm._icon) { + cm._setPos(center); + cm.clusterHide(); + } + } + } + ); + }, + + _recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, mapMinZoom, previousZoomLevel, newZoomLevel) { + this._recursively(bounds, newZoomLevel, mapMinZoom, + function (c) { + c._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel); + + //TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be. + //As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate + if (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) { + c.clusterShow(); + c._recursivelyRemoveChildrenFromMap(bounds, mapMinZoom, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds + } else { + c.clusterHide(); + } + + c._addToMap(); + } + ); + }, + + _recursivelyBecomeVisible: function (bounds, zoomLevel) { + this._recursively(bounds, this._group._map.getMinZoom(), zoomLevel, null, function (c) { + c.clusterShow(); + }); + }, + + _recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) { + this._recursively(bounds, this._group._map.getMinZoom() - 1, zoomLevel, + function (c) { + if (zoomLevel === c._zoom) { + return; + } + + //Add our child markers at startPos (so they can be animated out) + for (var i = c._markers.length - 1; i >= 0; i--) { + var nm = c._markers[i]; + + if (!bounds.contains(nm._latlng)) { + continue; + } + + if (startPos) { + nm._backupLatlng = nm.getLatLng(); + + nm.setLatLng(startPos); + if (nm.clusterHide) { + nm.clusterHide(); + } + } + + c._group._featureGroup.addLayer(nm); + } + }, + function (c) { + c._addToMap(startPos); + } + ); + }, + + _recursivelyRestoreChildPositions: function (zoomLevel) { + //Fix positions of child markers + for (var i = this._markers.length - 1; i >= 0; i--) { + var nm = this._markers[i]; + if (nm._backupLatlng) { + nm.setLatLng(nm._backupLatlng); + delete nm._backupLatlng; + } + } + + if (zoomLevel - 1 === this._zoom) { + //Reposition child clusters + for (var j = this._childClusters.length - 1; j >= 0; j--) { + this._childClusters[j]._restorePosition(); + } + } else { + for (var k = this._childClusters.length - 1; k >= 0; k--) { + this._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel); + } + } + }, + + _restorePosition: function () { + if (this._backupLatlng) { + this.setLatLng(this._backupLatlng); + delete this._backupLatlng; + } + }, + + //exceptBounds: If set, don't remove any markers/clusters in it + _recursivelyRemoveChildrenFromMap: function (previousBounds, mapMinZoom, zoomLevel, exceptBounds) { + var m, i; + this._recursively(previousBounds, mapMinZoom - 1, zoomLevel - 1, + function (c) { + //Remove markers at every level + for (i = c._markers.length - 1; i >= 0; i--) { + m = c._markers[i]; + if (!exceptBounds || !exceptBounds.contains(m._latlng)) { + c._group._featureGroup.removeLayer(m); + if (m.clusterShow) { + m.clusterShow(); + } + } + } + }, + function (c) { + //Remove child clusters at just the bottom level + for (i = c._childClusters.length - 1; i >= 0; i--) { + m = c._childClusters[i]; + if (!exceptBounds || !exceptBounds.contains(m._latlng)) { + c._group._featureGroup.removeLayer(m); + if (m.clusterShow) { + m.clusterShow(); + } + } + } + } + ); + }, + + //Run the given functions recursively to this and child clusters + // boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to + // zoomLevelToStart: zoom level to start running functions (inclusive) + // zoomLevelToStop: zoom level to stop running functions (inclusive) + // runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level + // runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level + _recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) { + var childClusters = this._childClusters, + zoom = this._zoom, + i, c; + + if (zoomLevelToStart <= zoom) { + if (runAtEveryLevel) { + runAtEveryLevel(this); + } + if (runAtBottomLevel && zoom === zoomLevelToStop) { + runAtBottomLevel(this); + } + } + + if (zoom < zoomLevelToStart || zoom < zoomLevelToStop) { + for (i = childClusters.length - 1; i >= 0; i--) { + c = childClusters[i]; + if (c._boundsNeedUpdate) { + c._recalculateBounds(); + } + if (boundsToApplyTo.intersects(c._bounds)) { + c._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel); + } + } + } + }, + + //Returns true if we are the parent of only one cluster and that cluster is the same as us + _isSingleParent: function () { + //Don't need to check this._markers as the rest won't work if there are any + return this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount; + } +}); + +/* +* Extends L.Marker to include two extra methods: clusterHide and clusterShow. +* +* They work as setOpacity(0) and setOpacity(1) respectively, but +* don't overwrite the options.opacity +* +*/ + +L.Marker.include({ + clusterHide: function () { + var backup = this.options.opacity; + this.setOpacity(0); + this.options.opacity = backup; + return this; + }, + + clusterShow: function () { + return this.setOpacity(this.options.opacity); + } +}); + +L.DistanceGrid = function (cellSize) { + this._cellSize = cellSize; + this._sqCellSize = cellSize * cellSize; + this._grid = {}; + this._objectPoint = { }; +}; + +L.DistanceGrid.prototype = { + + addObject: function (obj, point) { + var x = this._getCoord(point.x), + y = this._getCoord(point.y), + grid = this._grid, + row = grid[y] = grid[y] || {}, + cell = row[x] = row[x] || [], + stamp = L.Util.stamp(obj); + + this._objectPoint[stamp] = point; + + cell.push(obj); + }, + + updateObject: function (obj, point) { + this.removeObject(obj); + this.addObject(obj, point); + }, + + //Returns true if the object was found + removeObject: function (obj, point) { + var x = this._getCoord(point.x), + y = this._getCoord(point.y), + grid = this._grid, + row = grid[y] = grid[y] || {}, + cell = row[x] = row[x] || [], + i, len; + + delete this._objectPoint[L.Util.stamp(obj)]; + + for (i = 0, len = cell.length; i < len; i++) { + if (cell[i] === obj) { + + cell.splice(i, 1); + + if (len === 1) { + delete row[x]; + } + + return true; + } + } + + }, + + eachObject: function (fn, context) { + var i, j, k, len, row, cell, removed, + grid = this._grid; + + for (i in grid) { + row = grid[i]; + + for (j in row) { + cell = row[j]; + + for (k = 0, len = cell.length; k < len; k++) { + removed = fn.call(context, cell[k]); + if (removed) { + k--; + len--; + } + } + } + } + }, + + getNearObject: function (point) { + var x = this._getCoord(point.x), + y = this._getCoord(point.y), + i, j, k, row, cell, len, obj, dist, + objectPoint = this._objectPoint, + closestDistSq = this._sqCellSize, + closest = null; + + for (i = y - 1; i <= y + 1; i++) { + row = this._grid[i]; + if (row) { + + for (j = x - 1; j <= x + 1; j++) { + cell = row[j]; + if (cell) { + + for (k = 0, len = cell.length; k < len; k++) { + obj = cell[k]; + dist = this._sqDist(objectPoint[L.Util.stamp(obj)], point); + if (dist < closestDistSq || + dist <= closestDistSq && closest === null) { + closestDistSq = dist; + closest = obj; + } + } + } + } + } + } + return closest; + }, + + _getCoord: function (x) { + var coord = Math.floor(x / this._cellSize); + return isFinite(coord) ? coord : x; + }, + + _sqDist: function (p, p2) { + var dx = p2.x - p.x, + dy = p2.y - p.y; + return dx * dx + dy * dy; + } +}; + +/* Copyright (c) 2012 the authors listed at the following URL, and/or +the authors of referenced articles or incorporated external code: +http://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256 + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Retrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434 +*/ + +(function () { + L.QuickHull = { + + /* + * @param {Object} cpt a point to be measured from the baseline + * @param {Array} bl the baseline, as represented by a two-element + * array of latlng objects. + * @returns {Number} an approximate distance measure + */ + getDistant: function (cpt, bl) { + var vY = bl[1].lat - bl[0].lat, + vX = bl[0].lng - bl[1].lng; + return (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng)); + }, + + /* + * @param {Array} baseLine a two-element array of latlng objects + * representing the baseline to project from + * @param {Array} latLngs an array of latlng objects + * @returns {Object} the maximum point and all new points to stay + * in consideration for the hull. + */ + findMostDistantPointFromBaseLine: function (baseLine, latLngs) { + var maxD = 0, + maxPt = null, + newPoints = [], + i, pt, d; + + for (i = latLngs.length - 1; i >= 0; i--) { + pt = latLngs[i]; + d = this.getDistant(pt, baseLine); + + if (d > 0) { + newPoints.push(pt); + } else { + continue; + } + + if (d > maxD) { + maxD = d; + maxPt = pt; + } + } + + return { maxPoint: maxPt, newPoints: newPoints }; + }, + + + /* + * Given a baseline, compute the convex hull of latLngs as an array + * of latLngs. + * + * @param {Array} latLngs + * @returns {Array} + */ + buildConvexHull: function (baseLine, latLngs) { + var convexHullBaseLines = [], + t = this.findMostDistantPointFromBaseLine(baseLine, latLngs); + + if (t.maxPoint) { // if there is still a point "outside" the base line + convexHullBaseLines = + convexHullBaseLines.concat( + this.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints) + ); + convexHullBaseLines = + convexHullBaseLines.concat( + this.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints) + ); + return convexHullBaseLines; + } else { // if there is no more point "outside" the base line, the current base line is part of the convex hull + return [baseLine[0]]; + } + }, + + /* + * Given an array of latlngs, compute a convex hull as an array + * of latlngs + * + * @param {Array} latLngs + * @returns {Array} + */ + getConvexHull: function (latLngs) { + // find first baseline + var maxLat = false, minLat = false, + maxLng = false, minLng = false, + maxLatPt = null, minLatPt = null, + maxLngPt = null, minLngPt = null, + maxPt = null, minPt = null, + i; + + for (i = latLngs.length - 1; i >= 0; i--) { + var pt = latLngs[i]; + if (maxLat === false || pt.lat > maxLat) { + maxLatPt = pt; + maxLat = pt.lat; + } + if (minLat === false || pt.lat < minLat) { + minLatPt = pt; + minLat = pt.lat; + } + if (maxLng === false || pt.lng > maxLng) { + maxLngPt = pt; + maxLng = pt.lng; + } + if (minLng === false || pt.lng < minLng) { + minLngPt = pt; + minLng = pt.lng; + } + } + + if (minLat !== maxLat) { + minPt = minLatPt; + maxPt = maxLatPt; + } else { + minPt = minLngPt; + maxPt = maxLngPt; + } + + var ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs), + this.buildConvexHull([maxPt, minPt], latLngs)); + return ch; + } + }; +}()); + +L.MarkerCluster.include({ + getConvexHull: function () { + var childMarkers = this.getAllChildMarkers(), + points = [], + p, i; + + for (i = childMarkers.length - 1; i >= 0; i--) { + p = childMarkers[i].getLatLng(); + points.push(p); + } + + return L.QuickHull.getConvexHull(points); + } +}); + +//This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet +//Huge thanks to jawj for implementing it first to make my job easy :-) + +L.MarkerCluster.include({ + + _2PI: Math.PI * 2, + _circleFootSeparation: 25, //related to circumference of circle + _circleStartAngle: 0, + + _spiralFootSeparation: 28, //related to size of spiral (experiment!) + _spiralLengthStart: 11, + _spiralLengthFactor: 5, + + _circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards. + // 0 -> always spiral; Infinity -> always circle + + spiderfy: function () { + if (this._group._spiderfied === this || this._group._inZoomAnimation) { + return; + } + + var childMarkers = this.getAllChildMarkers(null, true), + group = this._group, + map = group._map, + center = map.latLngToLayerPoint(this._latlng), + positions; + + this._group._unspiderfy(); + this._group._spiderfied = this; + + //TODO Maybe: childMarkers order by distance to center + + if (childMarkers.length >= this._circleSpiralSwitchover) { + positions = this._generatePointsSpiral(childMarkers.length, center); + } else { + center.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons. + positions = this._generatePointsCircle(childMarkers.length, center); + } + + this._animationSpiderfy(childMarkers, positions); + }, + + unspiderfy: function (zoomDetails) { + /// Argument from zoomanim if being called in a zoom animation or null otherwise + if (this._group._inZoomAnimation) { + return; + } + this._animationUnspiderfy(zoomDetails); + + this._group._spiderfied = null; + }, + + _generatePointsCircle: function (count, centerPt) { + var circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count), + legLength = circumference / this._2PI, //radius from circumference + angleStep = this._2PI / count, + res = [], + i, angle; + + legLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon. + + res.length = count; + + for (i = 0; i < count; i++) { // Clockwise, like spiral. + angle = this._circleStartAngle + i * angleStep; + res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round(); + } + + return res; + }, + + _generatePointsSpiral: function (count, centerPt) { + var spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier, + legLength = spiderfyDistanceMultiplier * this._spiralLengthStart, + separation = spiderfyDistanceMultiplier * this._spiralFootSeparation, + lengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI, + angle = 0, + res = [], + i; + + res.length = count; + + // Higher index, closer position to cluster center. + for (i = count; i >= 0; i--) { + // Skip the first position, so that we are already farther from center and we avoid + // being under the default cluster icon (especially important for Circle Markers). + if (i < count) { + res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round(); + } + angle += separation / legLength + i * 0.0005; + legLength += lengthFactor / angle; + } + return res; + }, + + _noanimationUnspiderfy: function () { + var group = this._group, + map = group._map, + fg = group._featureGroup, + childMarkers = this.getAllChildMarkers(null, true), + m, i; + + group._ignoreMove = true; + + this.setOpacity(1); + for (i = childMarkers.length - 1; i >= 0; i--) { + m = childMarkers[i]; + + fg.removeLayer(m); + + if (m._preSpiderfyLatlng) { + m.setLatLng(m._preSpiderfyLatlng); + delete m._preSpiderfyLatlng; + } + if (m.setZIndexOffset) { + m.setZIndexOffset(0); + } + + if (m._spiderLeg) { + map.removeLayer(m._spiderLeg); + delete m._spiderLeg; + } + } + + group.fire('unspiderfied', { + cluster: this, + markers: childMarkers + }); + group._ignoreMove = false; + group._spiderfied = null; + } +}); + +//Non Animated versions of everything +L.MarkerClusterNonAnimated = L.MarkerCluster.extend({ + _animationSpiderfy: function (childMarkers, positions) { + var group = this._group, + map = group._map, + fg = group._featureGroup, + legOptions = this._group.options.spiderLegPolylineOptions, + i, m, leg, newPos; + + group._ignoreMove = true; + + // Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition. + // The reverse order trick no longer improves performance on modern browsers. + for (i = 0; i < childMarkers.length; i++) { + newPos = map.layerPointToLatLng(positions[i]); + m = childMarkers[i]; + + // Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it. + leg = new L.Polyline([this._latlng, newPos], legOptions); + map.addLayer(leg); + m._spiderLeg = leg; + + // Now add the marker. + m._preSpiderfyLatlng = m._latlng; + m.setLatLng(newPos); + if (m.setZIndexOffset) { + m.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING + } + + fg.addLayer(m); + } + this.setOpacity(0.3); + + group._ignoreMove = false; + group.fire('spiderfied', { + cluster: this, + markers: childMarkers + }); + }, + + _animationUnspiderfy: function () { + this._noanimationUnspiderfy(); + } +}); + +//Animated versions here +L.MarkerCluster.include({ + + _animationSpiderfy: function (childMarkers, positions) { + var me = this, + group = this._group, + map = group._map, + fg = group._featureGroup, + thisLayerLatLng = this._latlng, + thisLayerPos = map.latLngToLayerPoint(thisLayerLatLng), + svg = L.Path.SVG, + legOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation. + finalLegOpacity = legOptions.opacity, + i, m, leg, legPath, legLength, newPos; + + if (finalLegOpacity === undefined) { + finalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity; + } + + if (svg) { + // If the initial opacity of the spider leg is not 0 then it appears before the animation starts. + legOptions.opacity = 0; + + // Add the class for CSS transitions. + legOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg'; + } else { + // Make sure we have a defined opacity. + legOptions.opacity = finalLegOpacity; + } + + group._ignoreMove = true; + + // Add markers and spider legs to map, hidden at our center point. + // Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition. + // The reverse order trick no longer improves performance on modern browsers. + for (i = 0; i < childMarkers.length; i++) { + m = childMarkers[i]; + + newPos = map.layerPointToLatLng(positions[i]); + + // Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it. + leg = new L.Polyline([thisLayerLatLng, newPos], legOptions); + map.addLayer(leg); + m._spiderLeg = leg; + + // Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/ + // In our case the transition property is declared in the CSS file. + if (svg) { + legPath = leg._path; + legLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox. + legPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated. + legPath.style.strokeDashoffset = legLength; + } + + // If it is a marker, add it now and we'll animate it out + if (m.setZIndexOffset) { + m.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING + } + if (m.clusterHide) { + m.clusterHide(); + } + + // Vectors just get immediately added + fg.addLayer(m); + + if (m._setPos) { + m._setPos(thisLayerPos); + } + } + + group._forceLayout(); + group._animationStart(); + + // Reveal markers and spider legs. + for (i = childMarkers.length - 1; i >= 0; i--) { + newPos = map.layerPointToLatLng(positions[i]); + m = childMarkers[i]; + + //Move marker to new position + m._preSpiderfyLatlng = m._latlng; + m.setLatLng(newPos); + + if (m.clusterShow) { + m.clusterShow(); + } + + // Animate leg (animation is actually delegated to CSS transition). + if (svg) { + leg = m._spiderLeg; + legPath = leg._path; + legPath.style.strokeDashoffset = 0; + //legPath.style.strokeOpacity = finalLegOpacity; + leg.setStyle({opacity: finalLegOpacity}); + } + } + this.setOpacity(0.3); + + group._ignoreMove = false; + + setTimeout(function () { + group._animationEnd(); + group.fire('spiderfied', { + cluster: me, + markers: childMarkers + }); + }, 200); + }, + + _animationUnspiderfy: function (zoomDetails) { + var me = this, + group = this._group, + map = group._map, + fg = group._featureGroup, + thisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng), + childMarkers = this.getAllChildMarkers(null, true), + svg = L.Path.SVG, + m, i, leg, legPath, legLength, nonAnimatable; + + group._ignoreMove = true; + group._animationStart(); + + //Make us visible and bring the child markers back in + this.setOpacity(1); + for (i = childMarkers.length - 1; i >= 0; i--) { + m = childMarkers[i]; + + //Marker was added to us after we were spiderfied + if (!m._preSpiderfyLatlng) { + continue; + } + + //Close any popup on the marker first, otherwise setting the location of the marker will make the map scroll + m.closePopup(); + + //Fix up the location to the real one + m.setLatLng(m._preSpiderfyLatlng); + delete m._preSpiderfyLatlng; + + //Hack override the location to be our center + nonAnimatable = true; + if (m._setPos) { + m._setPos(thisLayerPos); + nonAnimatable = false; + } + if (m.clusterHide) { + m.clusterHide(); + nonAnimatable = false; + } + if (nonAnimatable) { + fg.removeLayer(m); + } + + // Animate the spider leg back in (animation is actually delegated to CSS transition). + if (svg) { + leg = m._spiderLeg; + legPath = leg._path; + legLength = legPath.getTotalLength() + 0.1; + legPath.style.strokeDashoffset = legLength; + leg.setStyle({opacity: 0}); + } + } + + group._ignoreMove = false; + + setTimeout(function () { + //If we have only <= one child left then that marker will be shown on the map so don't remove it! + var stillThereChildCount = 0; + for (i = childMarkers.length - 1; i >= 0; i--) { + m = childMarkers[i]; + if (m._spiderLeg) { + stillThereChildCount++; + } + } + + + for (i = childMarkers.length - 1; i >= 0; i--) { + m = childMarkers[i]; + + if (!m._spiderLeg) { //Has already been unspiderfied + continue; + } + + if (m.clusterShow) { + m.clusterShow(); + } + if (m.setZIndexOffset) { + m.setZIndexOffset(0); + } + + if (stillThereChildCount > 1) { + fg.removeLayer(m); + } + + map.removeLayer(m._spiderLeg); + delete m._spiderLeg; + } + group._animationEnd(); + group.fire('unspiderfied', { + cluster: me, + markers: childMarkers + }); + }, 200); + } +}); + + +L.MarkerClusterGroup.include({ + //The MarkerCluster currently spiderfied (if any) + _spiderfied: null, + + unspiderfy: function () { + this._unspiderfy.apply(this, arguments); + }, + + _spiderfierOnAdd: function () { + this._map.on('click', this._unspiderfyWrapper, this); + + if (this._map.options.zoomAnimation) { + this._map.on('zoomstart', this._unspiderfyZoomStart, this); + } + //Browsers without zoomAnimation or a big zoom don't fire zoomstart + this._map.on('zoomend', this._noanimationUnspiderfy, this); + + if (!L.Browser.touch) { + this._map.getRenderer(this); + //Needs to happen in the pageload, not after, or animations don't work in webkit + // http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements + //Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable + } + }, + + _spiderfierOnRemove: function () { + this._map.off('click', this._unspiderfyWrapper, this); + this._map.off('zoomstart', this._unspiderfyZoomStart, this); + this._map.off('zoomanim', this._unspiderfyZoomAnim, this); + this._map.off('zoomend', this._noanimationUnspiderfy, this); + + //Ensure that markers are back where they should be + // Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane + this._noanimationUnspiderfy(); + }, + + //On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated) + //This means we can define the animation they do rather than Markers doing an animation to their actual location + _unspiderfyZoomStart: function () { + if (!this._map) { //May have been removed from the map by a zoomEnd handler + return; + } + + this._map.on('zoomanim', this._unspiderfyZoomAnim, this); + }, + + _unspiderfyZoomAnim: function (zoomDetails) { + //Wait until the first zoomanim after the user has finished touch-zooming before running the animation + if (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) { + return; + } + + this._map.off('zoomanim', this._unspiderfyZoomAnim, this); + this._unspiderfy(zoomDetails); + }, + + _unspiderfyWrapper: function () { + /// _unspiderfy but passes no arguments + this._unspiderfy(); + }, + + _unspiderfy: function (zoomDetails) { + if (this._spiderfied) { + this._spiderfied.unspiderfy(zoomDetails); + } + }, + + _noanimationUnspiderfy: function () { + if (this._spiderfied) { + this._spiderfied._noanimationUnspiderfy(); + } + }, + + //If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc + _unspiderfyLayer: function (layer) { + if (layer._spiderLeg) { + this._featureGroup.removeLayer(layer); + + if (layer.clusterShow) { + layer.clusterShow(); + } + //Position will be fixed up immediately in _animationUnspiderfy + if (layer.setZIndexOffset) { + layer.setZIndexOffset(0); + } + + this._map.removeLayer(layer._spiderLeg); + delete layer._spiderLeg; + } + } +}); + +/** + * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing + * markers' icon options and refreshing their icon and their parent clusters + * accordingly (case where their iconCreateFunction uses data of childMarkers + * to make up the cluster icon). + */ + + +L.MarkerClusterGroup.include({ + /** + * Updates the icon of all clusters which are parents of the given marker(s). + * In singleMarkerMode, also updates the given marker(s) icon. + * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)| + * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent + * clusters need to be updated. If not provided, retrieves all child markers of this. + * @returns {L.MarkerClusterGroup} + */ + refreshClusters: function (layers) { + if (!layers) { + layers = this._topClusterLevel.getAllChildMarkers(); + } else if (layers instanceof L.MarkerClusterGroup) { + layers = layers._topClusterLevel.getAllChildMarkers(); + } else if (layers instanceof L.LayerGroup) { + layers = layers._layers; + } else if (layers instanceof L.MarkerCluster) { + layers = layers.getAllChildMarkers(); + } else if (layers instanceof L.Marker) { + layers = [layers]; + } // else: must be an Array(L.Marker)|Map(L.Marker) + this._flagParentsIconsNeedUpdate(layers); + this._refreshClustersIcons(); + + // In case of singleMarkerMode, also re-draw the markers. + if (this.options.singleMarkerMode) { + this._refreshSingleMarkerModeMarkers(layers); + } + + return this; + }, + + /** + * Simply flags all parent clusters of the given markers as having a "dirty" icon. + * @param layers Array(L.Marker)|Map(L.Marker) list of markers. + * @private + */ + _flagParentsIconsNeedUpdate: function (layers) { + var id, parent; + + // Assumes layers is an Array or an Object whose prototype is non-enumerable. + for (id in layers) { + // Flag parent clusters' icon as "dirty", all the way up. + // Dumb process that flags multiple times upper parents, but still + // much more efficient than trying to be smart and make short lists, + // at least in the case of a hierarchy following a power law: + // http://jsperf.com/flag-nodes-in-power-hierarchy/2 + parent = layers[id].__parent; + while (parent) { + parent._iconNeedsUpdate = true; + parent = parent.__parent; + } + } + }, + + /** + * Re-draws the icon of the supplied markers. + * To be used in singleMarkerMode only. + * @param layers Array(L.Marker)|Map(L.Marker) list of markers. + * @private + */ + _refreshSingleMarkerModeMarkers: function (layers) { + var id, layer; + + for (id in layers) { + layer = layers[id]; + + // Make sure we do not override markers that do not belong to THIS group. + if (this.hasLayer(layer)) { + // Need to re-create the icon first, then re-draw the marker. + layer.setIcon(this._overrideMarkerIcon(layer)); + } + } + } +}); + +L.Marker.include({ + /** + * Updates the given options in the marker's icon and refreshes the marker. + * @param options map object of icon options. + * @param directlyRefreshClusters boolean (optional) true to trigger + * MCG.refreshClustersOf() right away with this single marker. + * @returns {L.Marker} + */ + refreshIconOptions: function (options, directlyRefreshClusters) { + var icon = this.options.icon; + + L.setOptions(icon, options); + + this.setIcon(icon); + + // Shortcut to refresh the associated MCG clusters right away. + // To be used when refreshing a single marker. + // Otherwise, better use MCG.refreshClusters() once at the end with + // the list of modified markers. + if (directlyRefreshClusters && this.__parent) { + this.__parent._group.refreshClusters(this); + } + + return this; + } +}); + +exports.MarkerClusterGroup = MarkerClusterGroup; +exports.MarkerCluster = MarkerCluster; + +}))); +/* + Leaflet.AwesomeMarkers, a plugin that adds colorful iconic markers for Leaflet, based on the Font Awesome icons + (c) 2012-2013, Lennard Voogdt + + http://leafletjs.com + https://github.com/lvoogdt +*/ + +/*global L*/ + + +(function (window, document, undefined) { + "use strict"; + /* + * Leaflet.AwesomeMarkers assumes that you have already included the Leaflet library. + */ + + L.AwesomeMarkers = {}; + + L.AwesomeMarkers.version = '2.0.1'; + + L.AwesomeMarkers.Icon = L.Icon.extend({ + options: { + iconSize: [35, 45], + iconAnchor: [17, 42], + popupAnchor: [1, -32], + shadowAnchor: [10, 12], + shadowSize: [36, 16], + className: 'awesome-marker', + prefix: 'glyphicon', + spinClass: 'fa-spin', + extraClasses: '', + icon: 'home', + markerColor: 'blue', + iconColor: 'white' + }, + + initialize: function (options) { + options = L.Util.setOptions(this, options); + }, + + createIcon: function () { + var div = document.createElement('div'), + options = this.options; + + if (options.icon) { + div.innerHTML = this._createInner(); + } + + if (options.bgPos) { + div.style.backgroundPosition = + (-options.bgPos.x) + 'px ' + (-options.bgPos.y) + 'px'; + } + + this._setIconStyles(div, 'icon-' + options.markerColor); + return div; + }, + + _createInner: function() { + var iconClass, iconSpinClass = "", iconColorClass = "", iconColorStyle = "", options = this.options; + + if(options.icon.slice(0,options.prefix.length+1) === options.prefix + "-") { + iconClass = options.icon; + } else { + iconClass = options.prefix + "-" + options.icon; + } + + if(options.spin && typeof options.spinClass === "string") { + iconSpinClass = options.spinClass; + } + + if(options.iconColor) { + if(options.iconColor === 'white' || options.iconColor === 'black') { + iconColorClass = "icon-" + options.iconColor; + } else { + iconColorStyle = "style='color: " + options.iconColor + "' "; + } + } + + return ""; + }, + + _setIconStyles: function (img, name) { + var options = this.options, + size = L.point(options[name === 'shadow' ? 'shadowSize' : 'iconSize']), + anchor; + + if (name === 'shadow') { + anchor = L.point(options.shadowAnchor || options.iconAnchor); + } else { + anchor = L.point(options.iconAnchor); + } + + if (!anchor && size) { + anchor = size.divideBy(2, true); + } + + img.className = 'awesome-marker-' + name + ' ' + options.className; + + if (anchor) { + img.style.marginLeft = (-anchor.x) + 'px'; + img.style.marginTop = (-anchor.y) + 'px'; + } + + if (size) { + img.style.width = size.x + 'px'; + img.style.height = size.y + 'px'; + } + }, + + createShadow: function () { + var div = document.createElement('div'); + + this._setIconStyles(div, 'shadow'); + return div; + } + }); + + L.AwesomeMarkers.icon = function (options) { + return new L.AwesomeMarkers.Icon(options); + }; + +}(this, document)); + + + +(function() { + $(document).on('turbolinks:load', function() { + $('#event_start_time').change(function() { + if ($('#event_start_time').val() >= $('#event_end_time').val()) { + return $('#event_end_time').val($('#event_start_time').val()); + } + }); + $('#event_end_time').change(function() { + if ($('#event_start_time').val() >= $('#event_end_time').val()) { + return $('#event_start_time').val($('#event_end_time').val()); + } + }); + $('#event_repeat').each(function() { + if ($(this).val() === '0') { + $('.field.rule').hide(); + } + return $(this).change(function() { + if ($(this).val() > 0) { + $('.field.rule').show(); + return $('.field.rule input').attr('required', 'required'); + } else { + $('.field.rule').hide(); + return $('.field.rule input').removeAttr('required'); + } + }); + }); + return $('#event_tags').each(function() { + var elt; + elt = $(this); + return $.ajax({ + url: '/tags.json' + }).done(function(data) { + var tags; + return tags = jQuery.map(data, function(n) { + return n[0]; + }); + }); + }); + }); + +}).call(this); +(function() { + $(document).on('turbolinks:load', function() { + $('body.pages form :input').prop('disabled', false); + return $('form').submit(function() { + $('input[name=utf8]').prop('disabled', true); + return $('button').prop('disabled', true); + }); + }); + +}).call(this); +(function() { + $(document).on('turbolinks:load', function() {}); + +}).call(this); + +/* + @licstart The following is the entire license notice for the JavaScript code in this page. + + frTypo, la typographie française simplifiée + + Copyright (C) 2013 acoeuro + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + @licend The above is the entire license notice for the JavaScript code in this page. + */ + +(function() { + var regexp, regexpPost; + + regexp = /(^|[\wàéèêç])\s*([!?:;»%€¢]+)(\s|[^\w\/]|$)/g; + + regexpPost = /([«])\s*([\w])/g; + + $(document).on('turbolinks:load', function() { + if ($('html').attr('lang') === 'fr') { + return $('body *').contents().filter(function() { + return this.nodeType === Node.TEXT_NODE; + }).filter(function() { + return 0 > ['CODE', 'PRE', 'STYLE'].indexOf(this.parentNode.tagName); + }).filter(function() { + return !$(this).parent().hasClass('finePre') && !$(this).parent().hasClass('start_time') && !$(this).parent().hasClass('end_time'); + }).filter(function() { + return (this.nodeValue.match(regexp) != null) || (this.nodeValue.match(regexpPost) != null); + }).each(function() { + return $(this).replaceWith(function() { + return this.nodeValue.replace(regexp, '$1$2$3').replace(regexpPost, '$1$2'); + }); + }); + } + }); + +}).call(this); +(function() { + $(document).on('turbolinks:load', function() {}); + +}).call(this); +(function() { + var modulo = function(a, b) { return (+a % (b = +b) + b) % b; }; + + $(document).on('turbolinks:load', function() { + var idx, markerColors; + markerColors = ['blue', 'red', 'darkred', 'orange', 'green', 'darkgreen', 'purple', 'darkpuple', 'cadetblue']; + idx = 0; + $('#map.list').each(function() { + var controls, map; + map = L.map('map'); + map.fitBounds([[60, -20], [30, 30]]); + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap' + }).addTo(map); + controls = L.control.layers(null, null, { + collapsed: false + }).addTo(map); + return $('li a', this).each(function() { + var markerColor, text, url; + url = $(this).attr('href'); + text = $(this).html(); + markerColor = markerColors[modulo(idx++, markerColors.length)]; + if (location.search && url.indexOf('?') >= 0) { + url += '&' + location.search.substr(1); + } else { + url += location.search; + } + return $.getJSON(url, function(json) { + var layer; + if (!(json != null ? json.length : void 0)) { + return; + } + layer = L.markerClusterGroup({ + maxClusterRadius: 30 + }).addLayer(L.geoJson(json, { + pointToLayer: function(feature, latlng) { + var marker; + marker = L.AwesomeMarkers.icon({ + prefix: 'fa', + icon: feature.properties.icon || 'calendar', + markerColor: markerColor + }); + return L.marker(latlng, { + icon: marker + }); + }, + onEachFeature: function(feature, layer) { + if (feature.properties && feature.properties.popupContent) { + return layer.bindPopup(feature.properties.popupContent); + } + } + })); + map.addLayer(layer); + controls.addOverlay(layer, text + ' - ' + json.length); + if ((/maps\//.test(location.href) || /maps.json/.test(url)) && layer.getBounds()._northEast && layer.getBounds()._southWest) { + return map.fitBounds(layer.getBounds()); + } + }); + }); + }); + return $('#map.event, #map.orga').each(function() { + var coord, map, marker, markerColor, url; + coord = [$(this).data('latitude'), $(this).data('longitude')]; + map = L.map('map').setView([coord[0], coord[1]], 16); + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap' + }).addTo(map); + url = $(this).data('url'); + markerColor = markerColors[modulo(idx++, markerColors.length)]; + if (location.search && url.indexOf('?') >= 0) { + url += '&' + location.search.substr(1); + } else { + url += location.search; + } + marker = L.AwesomeMarkers.icon({ + prefix: 'fa', + icon: 'calendar' + }); + L.marker([coord[0], coord[1]], { + icon: marker + }).addTo(map); + return $.getJSON(url, function(json) { + var layer; + layer = L.markerClusterGroup({ + maxClusterRadius: 30 + }).addLayer(L.geoJson(json, { + pointToLayer: function(feature, latlng) { + marker = L.AwesomeMarkers.icon({ + prefix: 'fa', + icon: feature.properties.icon || 'calendar', + markerColor: markerColor + }); + return L.marker(latlng, { + icon: marker + }); + }, + onEachFeature: function(feature, layer) { + if (feature.properties && feature.properties.popupContent) { + return layer.bindPopup(feature.properties.popupContent); + } + } + })); + return map.addLayer(layer); + }); + }); + }); + +}).call(this); +(function() { + $(document).on('turbolinks:load', function() { + $('body.moderations .radios label').click(function() { + return $('body.moderations #event_reason').parent().slideUp(); + }); + return $('body.moderations .radios label:last-child').click(function() { + return $('body.moderations #event_reason').parent().slideDown(); + }); + }); + +}).call(this); +(function() { + + +}).call(this); +(function() { + + +}).call(this); +(function() { + var showPosition; + + $(document).on('turbolinks:load', function() { + if (!navigator.geolocation) { + return; + } + return $('a.near-me').click(function(event) { + event.preventDefault(); + window.goto = event.target.href; + return navigator.geolocation.getCurrentPosition(showPosition, function(error) { + switch (error.code) { + case error.PERMISSION_DENIED: + return $('ul.regions li#near-me').remove(); + } + }); + }); + }); + + showPosition = function(position) { + return location.replace(window.goto.replace('[me]', "[" + position.coords.latitude + ", " + position.coords.longitude + "]")); + }; + +}).call(this); +(function() { + $(document).on('turbolinks:load', function() { + return $('.pagination .next a').attr('data-remote', true).each(function() { + return $(document).scroll((function(_this) { + return function() { + if ($(_this).visible(true, true)) { + return $(_this).click().parents('.pagination').hide(); + } + }; + })(this)); + }); + }); + + $(document).on('ajax:success', '.pagination .next a', function(event, data) { + var next; + $(this).parents('tfoot').prev().append($('tbody tr', data)); + next = $('.pagination .next a', data).attr('href'); + if (next != null) { + return $(this).attr('href', next).parents('.pagination').show(); + } + }); + +}).call(this); +(function() { + $(document).on('turbolinks:load', function() { + return tinyMCE.init({ + width: '100%', + height: '40em', + menubar: false, + branding: false, + language: 'fr_FR', + selector: 'input.description', + content_css: '/assets/application-65fdd8dfb6b1ba2c6a29d524563f92ed848e4b025b086765dda5da1ab032082e.css', + entity_encoding: 'raw', + add_unload_trigger: true, + browser_spellcheck: true, + style_formats_autohide: true, + toolbar: [' cut copy paste | undo redo | link image media charmap table | code visualblocks searchreplace', ' removeformat bold italic strikethrough superscript subscript | bullist numlist outdent indent | alignleft aligncenter alignright alignjustify alignnone'], + plugins: 'lists advlist autolink link image charmap paste print preview table fullscreen searchreplace media insertdatetime visualblocks wordcount code' + }); + }); + + $(document).on('turbolinks:before-cache', function() { + return tinymce.remove(); + }); + +}).call(this); +(function() { + $(document).on('turbolinks:load', function() { + $('table.list.dates tbody tr').each(function() { + var vals; + vals = $(this).find('td.quantity').map(function() { + var val; + val = $(this).find('a').html().replace(' ', '').trim(); + if (val && val !== '') { + return parseInt(val); + } else { + return 0; + } + }); + return $(this).find('.sparkline').sparkline(vals, { + width: '5em' + }); + }); + return $('table.list.dates tfoot').each(function() { + var vals; + vals = $(this).find('th.quantity').map(function() { + return parseInt($(this).html().replace(' ', '')); + }); + return $(this).find('.sparkline').sparkline(vals, { + type: 'bar', + height: '3em', + barWidth: '100%', + barColor: '#9CC5EE', + barSpacing: 2 + }); + }); + }); + +}).call(this); +tinymce.addI18n('fr_FR',{ +"Redo": "R\u00e9tablir", +"Undo": "Annuler", +"Cut": "Couper", +"Copy": "Copier", +"Paste": "Coller", +"Select all": "Tout s\u00e9lectionner", +"New document": "Nouveau document", +"Ok": "Ok", +"Cancel": "Annuler", +"Visual aids": "Aides visuelle", +"Bold": "Gras", +"Italic": "Italique", +"Underline": "Soulign\u00e9", +"Strikethrough": "Barr\u00e9", +"Superscript": "Exposant", +"Subscript": "Indice", +"Clear formatting": "Effacer la mise en forme", +"Align left": "Aligner \u00e0 gauche", +"Align center": "Centrer", +"Align right": "Aligner \u00e0 droite", +"Justify": "Justifier", +"Bullet list": "Puces", +"Numbered list": "Num\u00e9rotation", +"Decrease indent": "Diminuer le retrait", +"Increase indent": "Augmenter le retrait", +"Close": "Fermer", +"Formats": "Formats", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas la copie directe. Merci d'utiliser les touches Ctrl+X\/C\/V.", +"Headers": "Titres", +"Header 1": "Titre 1", +"Header 2": "Titre 2", +"Header 3": "Titre 3", +"Header 4": "Titre 4", +"Header 5": "Titre 5", +"Header 6": "Titre 6", +"Headings": "En-t\u00eates", +"Heading 1": "En-t\u00eate 1", +"Heading 2": "En-t\u00eate 2", +"Heading 3": "En-t\u00eate 3", +"Heading 4": "En-t\u00eate 4", +"Heading 5": "En-t\u00eate 5", +"Heading 6": "En-t\u00eate 6", +"Preformatted": "Pr\u00e9-formatt\u00e9", +"Div": "Div", +"Pre": "Pre", +"Code": "Code", +"Paragraph": "Paragraphe", +"Blockquote": "Citation", +"Inline": "En ligne", +"Blocks": "Blocs", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.", +"Fonts": "Polices", +"Font Sizes": "Taille de police", +"Class": "Classe", +"Browse for an image": "Parcourir pour s\u00e9lectionner une image", +"OR": "OU", +"Drop an image here": "Glisser une image ici", +"Upload": "D\u00e9poser", +"Block": "Bloquer", +"Align": "Aligner", +"Default": "Par d\u00e9faut", +"Circle": "Cercle", +"Disc": "Disque", +"Square": "Carr\u00e9", +"Lower Alpha": "Alpha minuscule", +"Lower Greek": "Grec minuscule", +"Lower Roman": "Romain minuscule", +"Upper Alpha": "Alpha majuscule", +"Upper Roman": "Romain majuscule", +"Anchor...": "Ancre...", +"Name": "Nom", +"Id": "Id", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'Id doit commencer par une lettre suivi par des lettres, nombres, tirets, points, deux-points ou underscores", +"You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?", +"Restore last draft": "Restaurer le dernier brouillon", +"Special characters...": "Caract\u00e8res sp\u00e9ciaux...", +"Source code": "Code source", +"Insert\/Edit code sample": "Ins\u00e9rer \/ modifier une exemple de code", +"Language": "Langue", +"Code sample...": "Extrait de code...", +"Color Picker": "S\u00e9lecteur de couleur", +"R": "R", +"G": "V", +"B": "B", +"Left to right": "Gauche \u00e0 droite", +"Right to left": "Droite \u00e0 gauche", +"Emoticons...": "\u00c9motic\u00f4nes...", +"Metadata and Document Properties": "M\u00e9tadonn\u00e9es et propri\u00e9t\u00e9s du document", +"Title": "Titre", +"Keywords": "Mots-cl\u00e9s", +"Description": "Description", +"Robots": "Robots", +"Author": "Auteur", +"Encoding": "Encodage", +"Fullscreen": "Plein \u00e9cran", +"Action": "Action", +"Shortcut": "Raccourci", +"Help": "Aide", +"Address": "Adresse", +"Focus to menubar": "Cibler la barre de menu", +"Focus to toolbar": "Cibler la barre d'outils", +"Focus to element path": "Cibler le chemin vers l'\u00e9l\u00e9ment", +"Focus to contextual toolbar": "Cibler la barre d'outils contextuelle", +"Insert link (if link plugin activated)": "Ins\u00e9rer un lien (si le module link est activ\u00e9)", +"Save (if save plugin activated)": "Enregistrer (si le module save est activ\u00e9)", +"Find (if searchreplace plugin activated)": "Rechercher (si le module searchreplace est activ\u00e9)", +"Plugins installed ({0}):": "Modules install\u00e9s ({0}) : ", +"Premium plugins:": "Modules premium :", +"Learn more...": "En savoir plus...", +"You are using {0}": "Vous utilisez {0}", +"Plugins": "Plugins", +"Handy Shortcuts": "Raccourcis utiles", +"Horizontal line": "Ligne horizontale", +"Insert\/edit image": "Ins\u00e9rer\/modifier une image", +"Image description": "Description de l'image", +"Source": "Source", +"Dimensions": "Dimensions", +"Constrain proportions": "Conserver les proportions", +"General": "G\u00e9n\u00e9ral", +"Advanced": "Avanc\u00e9", +"Style": "Style", +"Vertical space": "Espacement vertical", +"Horizontal space": "Espacement horizontal", +"Border": "Bordure", +"Insert image": "Ins\u00e9rer une image", +"Image...": "Image...", +"Image list": "Liste d'images", +"Rotate counterclockwise": "Rotation anti-horaire", +"Rotate clockwise": "Rotation horaire", +"Flip vertically": "Retournement vertical", +"Flip horizontally": "Retournement horizontal", +"Edit image": "Modifier l'image", +"Image options": "Options de l'image", +"Zoom in": "Zoomer", +"Zoom out": "D\u00e9zoomer", +"Crop": "Rogner", +"Resize": "Redimensionner", +"Orientation": "Orientation", +"Brightness": "Luminosit\u00e9", +"Sharpen": "Affiner", +"Contrast": "Contraste", +"Color levels": "Niveaux de couleur", +"Gamma": "Gamma", +"Invert": "Inverser", +"Apply": "Appliquer", +"Back": "Retour", +"Insert date\/time": "Ins\u00e9rer date\/heure", +"Date\/time": "Date\/heure", +"Insert\/Edit Link": "Ins\u00e9rer\/Modifier un lien", +"Insert\/edit link": "Ins\u00e9rer\/modifier un lien", +"Text to display": "Texte \u00e0 afficher", +"Url": "Url", +"Open link in...": "Ouvrir le lien dans...", +"Current window": "Fen\u00eatre courante", +"None": "n\/a", +"New window": "Nouvelle fen\u00eatre", +"Remove link": "Enlever le lien", +"Anchors": "Ancres", +"Link...": "Lien...", +"Paste or type a link": "Coller ou taper un lien", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?", +"Link list": "Liste de liens", +"Insert video": "Ins\u00e9rer une vid\u00e9o", +"Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o", +"Insert\/edit media": "Ins\u00e9rer\/modifier un m\u00e9dia", +"Alternative source": "Source alternative", +"Alternative source URL": "Source alternative", +"Media poster (Image URL)": "Affiche de m\u00e9dia (URL d'image)", +"Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :", +"Embed": "Int\u00e9grer", +"Media...": "M\u00e9dia...", +"Nonbreaking space": "Espace ins\u00e9cable", +"Page break": "Saut de page", +"Paste as text": "Coller comme texte", +"Preview": "Pr\u00e9visualiser", +"Print...": "Imprimer...", +"Save": "Enregistrer", +"Find": "Chercher", +"Replace with": "Remplacer par", +"Replace": "Remplacer", +"Replace all": "Tout remplacer", +"Previous": "Pr\u00e9c\u00e9dent", +"Next": "Suiv", +"Find and replace...": "Chercher et remplacer...", +"Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.", +"Match case": "Respecter la casse", +"Find whole words only": "Chercher uniquement les mots entiers", +"Spell check": "Lancer la correction orthographique", +"Ignore": "Ignorer", +"Ignore all": "Tout ignorer", +"Finish": "Finie", +"Add to Dictionary": "Ajouter au dictionnaire", +"Insert table": "Ins\u00e9rer un tableau", +"Table properties": "Propri\u00e9t\u00e9s du tableau", +"Delete table": "Supprimer le tableau", +"Cell": "Cellule", +"Row": "Ligne", +"Column": "Colonne", +"Cell properties": "Propri\u00e9t\u00e9s de la cellule", +"Merge cells": "Fusionner les cellules", +"Split cell": "Diviser la cellule", +"Insert row before": "Ins\u00e9rer une ligne avant", +"Insert row after": "Ins\u00e9rer une ligne apr\u00e8s", +"Delete row": "Effacer la ligne", +"Row properties": "Propri\u00e9t\u00e9s de la ligne", +"Cut row": "Couper la ligne", +"Copy row": "Copier la ligne", +"Paste row before": "Coller la ligne avant", +"Paste row after": "Coller la ligne apr\u00e8s", +"Insert column before": "Ins\u00e9rer une colonne avant", +"Insert column after": "Ins\u00e9rer une colonne apr\u00e8s", +"Delete column": "Effacer la colonne", +"Cols": "Colonnes", +"Rows": "Lignes", +"Width": "Largeur", +"Height": "Hauteur", +"Cell spacing": "Espacement inter-cellulles", +"Cell padding": "Espacement interne cellule", +"Show caption": "Afficher le sous-titre", +"Left": "Gauche", +"Center": "Centr\u00e9", +"Right": "Droite", +"Cell type": "Type de cellule", +"Scope": "Etendue", +"Alignment": "Alignement", +"H Align": "Alignement H", +"V Align": "Alignement V", +"Top": "Haut", +"Middle": "Milieu", +"Bottom": "Bas", +"Header cell": "Cellule d'en-t\u00eate", +"Row group": "Groupe de lignes", +"Column group": "Groupe de colonnes", +"Row type": "Type de ligne", +"Header": "En-t\u00eate", +"Body": "Corps", +"Footer": "Pied", +"Border color": "Couleur de la bordure", +"Insert template...": "Ins\u00e9rer un mod\u00e8le...", +"Templates": "Th\u00e8mes", +"Template": "Mod\u00e8le", +"Text color": "Couleur du texte", +"Background color": "Couleur d'arri\u00e8re-plan", +"Custom...": "Personnalis\u00e9...", +"Custom color": "Couleur personnalis\u00e9e", +"No color": "Aucune couleur", +"Remove color": "Supprimer la couleur", +"Table of Contents": "Table des mati\u00e8res", +"Show blocks": "Afficher les blocs", +"Show invisible characters": "Afficher les caract\u00e8res invisibles", +"Word count": "Nombre de mots", +"Words: {0}": "Mots : {0}", +"{0} words": "{0} mots", +"File": "Fichier", +"Edit": "Editer", +"Insert": "Ins\u00e9rer", +"View": "Voir", +"Format": "Format", +"Table": "Tableau", +"Tools": "Outils", +"Powered by {0}": "Propuls\u00e9 par {0}", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.", +"Image title": "Titre d'image", +"Border width": "\u00c9paisseur de la bordure", +"Border style": "Style de la bordure", +"Error": "\u00c9rreur", +"Warn": "Avertissement", +"Valid": "Valide", +"To open the popup, press Shift+Enter": "Pour ouvrir la popup, presser Shift+Entr\u00e9e", +"Rich Text Area. Press ALT-0 for help.": "Zone de texte riche. Presser ALT-0 pour l'aide.", +"System Font": "Police syst\u00e8me", +"Failed to upload image: {0}": "\u00c9chec d'envoi de l'image : {0}", +"Failed to load plugin: {0} from url {1}": "\u00c9chec de chargement du module : {0} \u00e0 partir de l'URL {1}", +"Failed to load plugin url: {0}": "\u00c9chec de chargement de l'URL de module : {0}", +"Failed to initialize plugin: {0}": "\u00c9chec d'initialisation du module : {0}", +"example": "exemple", +"Search": "Rechercher", +"All": "Tous", +"Currency": "Mon\u00e9taire", +"Text": "Texte", +"Quotations": "Citations", +"Mathematical": "Math\u00e9matique", +"Extended Latin": "Latin \u00e9tendu", +"Symbols": "Symboles", +"Arrows": "Fl\u00e8ches", +"User Defined": "D\u00e9fini par l'utilisateur", +"dollar sign": "Symbole dollar", +"currency sign": "Symbole devise", +"euro-currency sign": "Symbole euro", +"colon sign": "Symbole col\u00f3n", +"cruzeiro sign": "Symbole cruzeiro", +"french franc sign": "Symbole franc fran\u00e7ais", +"lira sign": "Symbole lire", +"mill sign": "Symbole milli\u00e8me", +"naira sign": "Symbole naira", +"peseta sign": "Symbole peseta", +"rupee sign": "Symbole roupie", +"won sign": "Symbole won", +"new sheqel sign": "Symbole nouveau ch\u00e9kel", +"dong sign": "Symbole dong", +"kip sign": "Symbole kip", +"tugrik sign": "Symbole tougrik", +"drachma sign": "Symbole drachme", +"german penny symbol": "Symbole pfennig", +"peso sign": "Symbole peso", +"guarani sign": "Symbole guarani", +"austral sign": "Symbole austral", +"hryvnia sign": "Symbole hryvnia", +"cedi sign": "Symbole cedi", +"livre tournois sign": "Symbole livre tournois", +"spesmilo sign": "Symbole spesmilo", +"tenge sign": "Symbole tenge", +"indian rupee sign": "Symbole roupie indienne", +"turkish lira sign": "Symbole lire turque", +"nordic mark sign": "Symbole du mark nordique", +"manat sign": "Symbole manat", +"ruble sign": "Symbole rouble", +"yen character": "Sinogramme Yen", +"yuan character": "Sinogramme Yuan", +"yuan character, in hong kong and taiwan": "Sinogramme Yuan, Hong Kong et Taiwan", +"yen\/yuan character variant one": "Symbole Yen\/Yuan", +"Loading emoticons...": "Chargement des \u00e9motic\u00f4nes...", +"Could not load emoticons": "\u00c9chec de chargement des \u00e9motic\u00f4nes", +"People": "Smileys et personnes", +"Animals and Nature": "Animaux & nature", +"Food and Drink": "Nourriture & boisson", +"Activity": "Activit\u00e9", +"Travel and Places": "Voyages & lieux", +"Objects": "Objets", +"Flags": "Drapeaux", +"Characters": "Caract\u00e8res", +"Characters (no spaces)": "Caract\u00e8res (espaces non compris)", +"Error: Form submit field collision.": "Erreur : conflit de champ lors de la soumission du formulaire", +"Error: No form element found.": "Erreur : aucun \u00e9l\u00e9ment de formulaire trouv\u00e9.", +"Update": "Mettre \u00e0 jour", +"Color swatch": "Palette de couleurs", +"Turquoise": "Turquoise", +"Green": "Vert", +"Blue": "Bleu", +"Purple": "Violet", +"Navy Blue": "Bleu oc\u00e9an", +"Dark Turquoise": "Turquoise fonc\u00e9", +"Dark Green": "Vert fonc\u00e9", +"Medium Blue": "Bleu moyen", +"Medium Purple": "Violet moyen", +"Midnight Blue": "Bleu nuit", +"Yellow": "Jaune", +"Orange": "Orange", +"Red": "Rouge", +"Light Gray": "Gris clair", +"Gray": "Gris", +"Dark Yellow": "Jaune fonc\u00e9", +"Dark Orange": "Orange fonc\u00e9", +"Dark Red": "Rouge fonc\u00e9", +"Medium Gray": "Gris moyen", +"Dark Gray": "Gris fonc\u00e9", +"Black": "Noir", +"White": "Blanc", +"Switch to or from fullscreen mode": "Activer ou quitter le mode plein \u00e9cran", +"Open help dialog": "Ouvrir l'aide", +"history": "historique", +"styles": "styles", +"formatting": "mise en forme", +"alignment": "alignement", +"indentation": "indentation", +"permanent pen": "crayon ind\u00e9l\u00e9bile", +"comments": "commentaires", +"Anchor": "Ancre", +"Special character": "Caract\u00e8res sp\u00e9ciaux", +"Code sample": "Extrait de code", +"Color": "Couleur", +"Emoticons": "Emotic\u00f4nes", +"Document properties": "Propri\u00e9t\u00e9 du document", +"Image": "Image", +"Insert link": "Ins\u00e9rer un lien", +"Target": "Cible", +"Link": "Lien", +"Poster": "Publier", +"Media": "M\u00e9dia", +"Print": "Imprimer", +"Prev": "Pr\u00e9c ", +"Find and replace": "Trouver et remplacer", +"Whole words": "Mots entiers", +"Spellcheck": "V\u00e9rification orthographique", +"Caption": "Titre", +"Insert template": "Ajouter un th\u00e8me" +}); +(function() { + $(document).on('turbolinks:load', function() { + if (!Modernizr.testAllProps('forceBrokenImageIcon')) { + $('img.favicon').one('error', function() { + return $(this).css({ + visibility: 'hidden' + }); + }); + } + return $('.field.tags input').tagsInput({ + delimiter: ' ', + defaultText: '', + autocomplete_url: '/tags.json', + onChange: function() { + var value; + value = $(this).val(); + if (value.indexOf(',') >= 0) { + return $(this).val(value.replace(/,/, '')); + } + } + }); + }); + +}).call(this); diff --git a/public/assets/application-604c4e99766b8b13aba9e73fe36bd3ff8958c6aceb3b1eb4848912ae03f1eff1.js.gz b/public/assets/application-604c4e99766b8b13aba9e73fe36bd3ff8958c6aceb3b1eb4848912ae03f1eff1.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..790e0b9a7f05dfd486f69336b31493c558314ab4 GIT binary patch literal 457176 zcmV($K;yq3iwFS6=Sf`x1MIzPd)r2mDE!&{6)>G=NZJ%7*-6Hcqj+t}o@my$wUlJ{ z$jSsFAqh4Ga0t+nCi401Z{51Py3ruz#B<{5$@6kP&g6ZS)MbKA@ZWJ+)LBuFu<6_EpNo8+RbfZc z=9j#flo!w~es`QD(=wf8lO!+T&-x5{OXsIqozSP$-);#bpVjrO+FD;f&FizpG4yr5 zK1o03llRB-bW)wA7wbIO+MGwj51%aRvvR(b>|(>@@1x|Yv`y9$_&ECy^X;g}YW!da zW;oA}7d3wM_r*L*UZx+R@q73=I!{0T$LV>RPjT=@>$e%KVK<$Wiz0(B=J4l#O!!Y} zzuxJruP0eGg_W*N@+v)^W@|-uS+Bv9EUC&OoxiWv$K`2}*ZIe64L+Mqv&+1`8YV@# z1``Fi;rd|Iah*-p3fzUxqyEXF7}t4O^cTe>JAuw7gXH&40^m>j_0=pZPm&7)da}K} zo%C$0-T>xVFXlx86PuJpuTJKRA~`ANNtMk%X7Eow$)F8t`Z2Tem{=7QjKPlk>D5p9uzH>tt`&eQ0~$n|Qs>U>0x6 zDo1ESgJLnA@{2j(Gywidkwd@mlE#D<4A)WgwfVBjYB>^q=FBBrcMe2x!MmOPRjA(98S`+X@>vU_w@P`w}L_Iyf~$yR#Y=p>2LNe(`I5y^!3mj4RdPy>X6KSwx-&prY!y~r!LoneC6beLox>mfBUv(2WX zW<%3x$Vk-ed!C(_AG4cvA8osG1US8m+1nWPwSdM;3woWDbEI>Jz4P*4a82|svf~eV zjlW9#&w155vdu3$^b@Xk;MK~1z`d3hljL}wr5}Txy*!tdfvguH6`2}<+9UopECHInE6dwHyt^bJe}6ofLQ?JV2(lr z0F$dM)?4otzz&e*tYwW2B4Q~7chLYTpcd@Ii&B`Q259AL=96H)hd5kwAK=YVuhDs4 zy|8>;ThE5WI5h8%lE;yUBfz3$OYw<~!4S<%^C3>y3?>gBC)-%#|YWaJI~J)U|;(^PW$}8}GgQ z81N1yfWAl)yJ?*c^vgGjv3FCoElT1bgd>2xigY7~5?Rg)#KFDdZCadW{T{Pdmca<# z5|afl4c~QDjCqtkFTxuNh%7ROmWujNna#^Fw0&8fs+A)FoxrCo&5WwWF-V7fBjXH4 z)ohvr3U0Y6$mw;UV`yx-ql^6=ZX6vUGBqBKxcSh14jh!cbPvyj=cE^#>cs^!o%H;^ zdX6|Hj~^Vxh@l0858z$kREr9p`yc^k8zAy(aefR))}%?m1f-Wp5AEki12-4oy;ppk z7p)&p%tPqHHh>%JMR}3UchU;b)-@*Wi5*H|!r{dA-BGu(qX<0`t&tVMskl*ro&)Iu zs+Y_WK=c+D1kcy#cY0}iL<&Mv_#T^h$B8EfPwk^%`2DPoj9iyA7|2PBtk*a>cDx^G z8j{BQH+p$vE zTgNqN*{*$n-ZYDB7)mL1MvUrqj04gn)3HGAt6(={=efCQ%qqH02F;Z*{0Nkh!PGjX zz1}Un*8#fY8a5LkRbeO3|{2b6}B?SJe$wUxjtaMpMV>hWvFX4v;^Qc&hn4&z;29( zfHDXFVUNy9*i=y`xl~8_B>Zxe7`4Vl8abp4YGMEyA0C_m`eeAKWSkbLX%`+3q}3|} zYSOrSdN-mvNjYP7bdGI-^Z1yfx(*3OO4tEE0A)y`nUv=#P>@lt<48n+9-+3Ro#K}B zpQ^r=dOanHRr|sg_i4|O)ihks#?UHv2e9?}n`MjI>v$R;O=BhU|NM_W{U*h{`o?lff=ar4trAlk^zX4~t5+ z6aEjja&bDnN^1Ci2;$@g;J|#CEM|ZOFex_x?yTvTnf2tNTuhCw;y4|D0Lf%hC1_`W zZ;$i(YShuB&X8V>smQ1yxPGVIM5Q!i4E?f}1^COq_N6m@@B;d`cUqJLRb+wP#1R_j z073&06rFo*2&U%?Kip7XwK4#bf>=?R^2B9s|ksdXd2)0to+uW%uyb6w0QK=SZN}{ zLvs#_pEg7PegE|<)TdMq8fGI0aVB?dtwk6*Wsz!H7_Y@gB%!=IloP=uagZ&=)=)vqJLoUU;M@RW7Esl zq4_8tl(VgbkZTV}Z2&6N7_ND!fscmC=0>BR7uiYO-q94^hCSi4per_i(3Gqi@ihA% zHaCUMctq9izr%J0WM*?eb0bYF*`3eZ37(f3xrq^BOBtlGef~)g&vTU(6LX*s%00q* zAp}kj77@ZG*)bf&aW**s_T^NWSBSNfXCOQllLWg*+Z(C-XEN57Xhj_{F~g~0JH9|+ z#w5%jgGJR3=P^VxVbDWk&2>7r1HUZc+AHTVK@*YED9l(fs7)uWU<{-e622{eJvj_Nu4@MR)6D@!=RNmAXoUZ;LDvT*v@hxLv|aC<&W$7jx~A^TYSlch@n zt_R{p?x8h_lmSx#k~lE9<@EGSuv;+@h#^WhbuB+Nm<+XXxH@0^Xm_Y5CL>r=#H6*X zQ^1DyUY|@R*kx#hi%McSIz|}WLsoDHIKCP^ZN?z}1MfdBXTZ3_e~FQ25{Lc~MoY<4 z@zgdgnByS`!o>g*Wjy$EsVYymZ{oi{>8O{gQt^ z9V3m6+E_2SFswqIUAFwiHaID6w2FH=ZPnGc>8~$^-#D3;fIp&3ja=Kv#LHXl<}`MxxNiDZ4O#HP{z*JlYuZ7%2lPGv@Wgd?qv{ zhrMemznQTeSRre4srkaI=qJoKt8cD4;nfo%xwOoNaNcS|_HUs`19P7plz1ZDwkD60 zp12w%Ac6G;N4_3c?Sa2o|J9YJhFx+26P>t;ruZi^8^*R@chjL^spCTu;B&i6f+GtzAXW!ua3`~Z5U0Uvfqlcm zX~HrHF5#v2*TxhVMfl0`nVtYV4(NL6Bac&i_CVX}{o;IfP)a*JKg3LYsSu|9lIwI@ z%rUVe)_YlgBrR)+R2l&UTx#(l>E8)8xo2s07V2;ZNs8Fj(E94R2582Jw)~5$PV=+| zmqI|J{Q(1N+|sw=^Z(>^!u$3G$@B=>@`Lh8F+PJ!9wEP!n%>mxwx@UaPSc(i*<#!- zOGn9(>`PHv8f-f;$HC~k@AL+Tn@6Zh>GhPk9vbhm7r`VOmy_(Lw|hI~`K&Aut!IMM_#)qH2aj~<|Na{tu}fT zs;a|{maWyB*;`JrfS%y*S0qq>Os5TH^!V%p33_T=|AT0^DgEQShEa4$$x%rvSL#7@d84Tdmp$XWhew!VUw??)c{C1_XNIM=W3ThOs3y zxdhrx8p`P6mogP>Rt}bALKL=q>vvPnuj~xp4pw$+`94L&OV>2Aa-Bsb12eKfCEd_JK0^i-~C?R`up06MW2Y42i;r?^fdj zMT>Y{(UT_L-e6{Vqa)>2rx{UV6AlF;*N$B6$u~P++ zRaZrwUJjGf1(32eSmT;?_aW~d(&d;{Dm!^h(XKgP5t5wfLC4+H}kcDEuY=1#+HEl}^mFj03wUj|WZS%hnku$+O@Iy*;rGmE=dujCq4+y%by zq5+BW{G3i3$hK_bq?d@BtQpwj<9lYRo_l&|&$9C%V~yo@Bb>SO-a3G;8XjC`4#b;V zx_PK0FDL>69cz$vPc0~W%PEMX(J;}LxF_a^jHSllpxy#?YOLc%XQ?rwx#Nnh{fq$` zsDI9i3I>oLnv%u`(JrQ$cN-N)0N*~PSK zWiGd38V>6@KoYNY#_~9i$C2h7pU<1g|NN1e90c~o)jHk3W$Zy_ zRojf|zC8#j!m#o9%JYf(6pKW>*>>M<-EO0!FzPaYTEk#IgBz}S|4Xg8T`${&Mx>=I zGZJDSp`US?ClV;+sdAS@0a;%VmavA2{Sk3p3wRihk|=QdtqjO}I0c@X;(m{>JRzXZ z@>#>?OG3!wq-Vnf$za4(S*Q^IH>57H8T-*jSsex&F$AJPwGA+apoca#yrn;BM&S^9 z7ECH&y;LHKp;fRDi+$Z@Z_rM5Ntx%na1h(`9wwzF#Ya_&sP*!ad=`0_4Bl)03 z@#_*(c&-WIvU+EJbmgbjz5c?^1Is$Skf2N-!VN0us3)f&@QCN61U%foa&k)qXCFn^ip&w+_Ju&j6z6~bfSN(?5eRxyo$%g7eeiyJ}at!^PS_*W16Zp@; z=3={U*Chh_Jx9A$KM71h5QIx&h2u}>1y26Q{q5|lm zoMQmy5To9%$_2G2-s~(35+j-LIG_M2unMPV*_>mL@l)iL$fIg8n*o3-j_{HWMmIF! zd#B>|?FQA<*dHK;`fLgCBd5Y^4P?VCmgubf(GTzi;nlg(ZZFrTAzAluQw2Y>JM#pc z7M3y}n(fe}Mv*iB+_foD+wBtZ+)WMkzo%TiB5aDzi+0m*ENgSq4>0Y@4V#+WW;bmg zNxF8^PhEPs&j;2`zi3JM_BjK(On0C2l_a&h=_fX!+RgXLrop@ECoXB+O}~hzbZbc- zM#-T(?ekD*V-?dFyvWaU&nsSMA=^i}y-(76c+JgEaOT{+-ee^(xFs;2n;f3f%jrMAql1tSAzmSX)OogRBE+ zm;^|@2@(KVJnz|5k@hR~&SZp)y^}nW@z31wso`zBZHW;^I7h&>StRXp#{k7>0xiFk{UZIP8b&6g|PA+eMGI{8pJoosVzMpPY%Jv z93buiU!GgE&S!PPd0;5}22hb9sX^h~Jx^L=t`g;{L>eBbnj&fzsG&q4kLM6GdHl0RjbH~-BejT(n~ zF?;F+4s24jsb6{pMOG0V)weTyY1|w!9nbE0ejD}sAL?kSz#12=wwJfKSwEhmdoRwH zc|wZj&6dQ8z71@blx%jg7-t-wi*^|6RR;TPJ|3dgBwfI<+k5t~S0#Vn2jt7f3l+Zy zJ&}&&vPKtK)SpzzaXJ4WscK0b!ANd6m#&W6%koZ+J&o_48Ae$*-7cgz3e ztr0^6n)%yBB^$2MXll2^>^Y|WjUYnVK3;kyB{V!_GAd^N-w2B~cTdZ0{36#sTFX;3 zN${eQ`XV0#$pDVwBGXbV3PE_*)9KW7Val;kKU_2fJx)*?j>MWQ?nJRMvI}WAWfRNH z=WMOF$uoeNE7`XWP5);Z`wr2Cz}dOzp(xk`OA^qqzUO%y=KUoFeLP2t^jH=+?_OXz zw4Nd^Z?eiNC|7B_=7S{vUG#Y`uWTazFh72%47t73V=?eY@!}mRDX%{o3yw*n8h|?y z@}}|!v5%W+QOv9G5ScWUAF~Ng8k62rM#s@?Ue+aEHzN>*$Jq$+&Gs_VpHT9FeK2zo=54rkJ+;b0C}Pfndarw!M+ zTtb9ap3Er2`H7Z#0a%d-tSc>%(0n(%Eum3e(@T&gpaGXTpdX zF%ag3)u4ssg&8)UUYu2D~(p)gW3-F{ftF&zoc#o01<(fr5I| za%M@IcKh|=24=!d=TGYX#$Z&JKh0()n|RoaXnTKipw3KQ9pVUx6!Zto`Y6nM)O-=T z1H=@T-CclFhH%2zly0C=hwg$W-JY}71676oCe6e2?H{vw)=Xj?3!)^aRKMVu^Ke??kl8eb zkkhxT?Bk}PqDkWTt$gR5_P?W2(6P?dpv%^S?Ui0M*Ru=#2^VYe-_qE;8+b?z0aE=ar3sh)k z)mp1Tqy{;AzJX9%$(MRnN8Epma(i|eD$cd_%MR;nLEYoF_=Q1>HM%+Xy!x3v>HFC< zI%8|C&88zxKgIE~v0mH!0lal+_P`F_zP5q?N#6su_4USU)qf)n+k-amftVtw_p@`j zXLa`HY4IA9kG5+`PSNlc&{wIApl=Gw9|ul9kd z#d;Qfs`A;>d8*6eBtH#w+-c2)e6uQK&(you(+S;nLCH+sr*xizG&o1s`(_v3>!saz z8U@d>a&cVGvn*6KsN~fv6ip#YSdOd=)gBDep+Kq;7V=q&jOA*KwjFM{#&v3uYH8^( zFC?%qIhm0YF?#(Tp@53wJGVv82u+NKpj_+9vj;F z`3pWskCUHShtX?UEGb~bJ;8V8aY0M_ut{NQNYg9=A)c?Iy&(+~YPU_!P#%_1pX`|Ht9H^}Vh@c4_ucR!iF-(`08vaYAA)^& zgM2J4nbSYD_>X!TNyol5bd@G)w<{MOloJ%1*8ZWn@nbc8ed-dNleV4>ETC_9R1CMF z&g~7pU*m$bYb*L`lmSigp1W!i1`@@LMh_T1+NdaN`~h{TjZl-@@(En>r>`2y__!jL zaMR_|_?S-fNwWL;r5V20$g@bKXYcvjCoiA%gfsO<^>tmV=iqaA&rJ2E?|FzH0Fg>0h+mN~K4-xM4D*W}>RAk`(VX*sFAUkzT={AJcqlu0v-{?5z$F5g>Is z7OpL|pIw8Hx_J3p8VR+Cmb+sUrkyk)(c8)45#H^ui|Lis@5sAZN|rKAH^Wxf)a24h zR%}_AXi@AS&D@vl+!zrnK%A3)0?mZkM)i6wQKUh_KA<`5 zUZKoF4NUh<2+`zqV!-hn0zG=B0~&AYQW&LKs>B9#ZEd~kUGX(SL+ zx>xC88I)$Ctvltn*8K>UFt!tqs8U=3x#bt5^xU#y{G@+)G&Gktb?A0Wx;!r@i>Y*J ztfSDO_jUxxTh8msYh@$S*U55EM#*D9eGsos*lHhs?6`;ygUM9y@zEmo6o`TQ_|pLX z^Qg0ax0BpWo}&d$Si!c~O>DQDRpYH>uNY4klT2I-bG{qW;)>l*jx+Q+7pCl6LFT5cuvY%8tCF_QW1WK)XY z1~GTrHaoTU!%a5AXZ!U$Xsi8gtW%$k&2!Di;tMKamD^e$Gb!QpyUIPNF0yWfn?o#i zHvT|04!Jo=MmreFH#G|V&HE4eopOkE%V$+5Hq(Ejcj`+xvAcYC;aq7=oXI!V5}HIm z<+ex@UzFny-q85)Wu*b3!wOyUNgEWpjis!-M+eI0F*NFuQ--brB4!}i#c?E8CFT^G zAHkId=<{+>p_vxh9DBqlFT&og{T2&#a$WPiT``|a$5-61%s=M8s}y|a>E)JzGZpt% ze<66;>ZKkA$;Ryaj#9ZPsUIdniaVJNGCTO-xp-<2L+oTxnl zBAw&rQrwY(y7#KNQ^*9>_0+xE{FYx_$SK%Ve?}0}6zpm?qO~Qp($hd7stz#_4P zUp8;W1ZhAfA}S&vaJO0KI$%#}+w>HMiG=hnomnvq;w##~+Jh=$zqm{2%pEf8y&WsoDI z&7pVDQ3?DSYMx%r+3InD0naO+L`ucAe-+Ptxqg?`#=h{;m`gU5vUi-+C}8QcX><0f zbpt?;eP5VFtQv!sl&DLlqGk|n>n71M!Z@Afbvi||j92c9tVW4}Md2WE13z5mQN<0E zFO|{eKZPcfgfbigms5?)c}9G!($))w?dw$`4ogsu!Bimnl}o%^SyIV91)O+82PVws z*~h$GRPGjldzT`bx8oSCJ^-|TRbD8als|-yUtv0r9gfo3Yx^56PASrsDU+w`8<9EW}%Gl%(!b~no4*Dtao9ZD}X^|W-tg3;5 zUZ3nW)c&5K!hW01>xMm`DFU;m(mk^M78A;gYXTu?Gi=Zrl?HTqdk0!5>BktN<~BD{ z=G1d60fJ0S)9oEOQ?W|d^UzQ-;Ytl6?2oF&F*NEMsd`|XhqsKkx`@>H8CKqEs9vlR zi2Vbw+2#>&e^QE59t?p0Q=egySqx|2q^LB&PPS{twJ(to?&Ams2J!@l@V^Zd5RrZ! zH2Qf!{m4h5x+BuV*Wp^frVh+UY~0nFu1Fu>HfHfHb>hB@YPYE6UytI-pU5x|aTxP! zEBGX?Y@^oS9Yu6yysv@~S`QJ!hbBTWM%eGdqb4@UmhPInzscM0Dy(=~m{=bVEHLor zmii#7zle45wd>+*?85sd;%Xd;8~Kc=k(Pc!EZud?@aJVgqSvni1w+CWzt(Rg(a!?%nU;6(~=`% zCsb!*PG(=ZTC7^zq>GdD z5Rosy>yv(Otv3ku`meIn6pfacE=h9Hn6$i-yNmp;2bREM3$*xjoRBZuPw!%mg-$$a znXP}@^B5?-_JY4r!JwYGwFLTcirc`k5TVVq>=xj3?83-pUg|z{@ga`}PrJP(1!j!E z<_!FMC!Cjil6=fl1+upbXzzDWK;b2Nq>vt!7zcO!*U z&eH<(g|h{Y>rDmvbz~K6stspi0)|_eC9KbF)Y0aQY%JV+=wTxQs`c@6&b!_t^nZ%F z+(e8xhqe<$Yc;t0s@36Ejjui&Cciu5425vIlnG8Dj-1>om~f$M+p#IF*t&o)=y^r! zj-TD)bJiI3U{s!%ZfnRXGxW|oPiKv|WA}-RKvvxtu|3kh!v6XO?GDX*W}c6tk(X_a zoAYlgjubb?_}%HejlCcdjb8DQ{M<*s34dajdy#}uCx zlU0+;NbeX<3qSmF6WS|gi^v92E;fAg#Rhs=V!FPcX3??E@#SLnrAON>FN*f@CiwP? zjR-6w{K0#><40QRkxSQ1A{)Ng4Bmjq9NkJlsT08E8NW|@#~HAf8UOj^Fo`8#ijZ0c z0E$(wu+^7d|3Qh_MO!Emysz;+)1ogtX7ntZ5%Cm%;qlnXu6@WczyEThViK%;6~R|} z4cor*nkR;sxeoWk1~2!QyeyZ!3rCe#NB<5mthiuepvW7aM8L5ZYotLEZBVXyADhL$ z6FjY#TMRInY8(N{Gyk;)M)0a^f8&o9TRN$K*o9HDB^f2TDgfRNo;Cmlw=J70S*4<9 z=u=1vx(kEbn@Wgm{K05F0?n58JVZZtj4(%*S_}R`I}+`inlADkux(LqMBNRRMM>G# zDBlNha1tzK^cxgtBFZvP-#2Q;L3!%1VD^y;xTb5*n zfYQ)^`Fj=Bk`1FzJ@-*^+~eVFnN`u4wFm;C@mS^;>eZst^R;TRht0{+PvO28}%D`q# zUG4JcNh!I1jBUK?4Vu2u#*7#96NDkGpzV!7h03#rsA!BEx=#1X;Nf{T&T`3;7+CT0 zYFrjYHm+OKPk6;IbmYO8^6$}oj@*R$%XX#(sp2@pP!fE44P=8Hp<)V<)cJP|-n=ji6I%(IJ(EfSaQrFww8UL?J{qidHkyMxR zfrY6~-$a%1rmA9kHbqarr|7!@=(ICMsroHZhN1F(_lm4H_N>#sWoR0zGB`DTH|l7L z&`dTr22>$l-iPJs;kAZ%w4)kb*_ZWmMX#3v3^r-P2CcqvdW+;Wc)vKG9hB0p8A6R< z#U?(K!i_Lt#%)D>F#9?cL@4q2QV`P=j!n|P6IPcxORKZsQE!l>H9|aWtLHVk48KCq zF8$&v!aq_P_Ug3nHyj2-4NZK{K`B9JlnMI3|MEY8Dd<9hB_wLoS+b}w>o}2}^$Ra9 zq@(ro6}op>_e61gxzih<2if(teKX_|7<9ki!7Bi(XX@l+*wZe%Sxhp_W&YFKy`A!W zhLTO)$F~aqOuSVm64)LjE;0RjwMwGR#YW)1K&8797krCi6X{|&*;Z3F#I(IXf?u{G zuPcg5b!RFmV+?pJ>1~$a%*GJwRP>zV7HZOP0yOAgb*YmVvco?@^M0dd7lO(;ui`S$ z=z1se!ZU|8i2!-NE}srY&~qt-XqrH}{cwdr0zK#V4DWU@_%oaIgN!KI2%Y5tlp-7S z2f7Rb@PhBFGc>-EFo+&hTg2f|$WCNY6!i{2o|yDw{T?n)C&3Gn^%;=y{m}f*&v+IK z3+ho^E9|aX=8^;`H%lqeo=&2d9^%w~-R|D$9_dsPb{k>|ki5NY!L0TSK!`>*uTBFw zTMA?sc}<0g{c1f@oA^YICC8>?9b}8Nd?-l+O`V8l#mQ+V@}M!1VI!n?&{7l+#fKQb z78O5;#KgsqSs;EOMzw4(r8Q{V)tILc6`)_tf>VAbc30&iF;M*^7h%2-Ivcs=j^1i_v|5+j854rens{gO25@` zeRa@^>}0FN9$SH_kr&hASUP9P%a;1x?rzfXqSul*XAcW9{TMe^IByc+EP6lX>R`pW zEfu9`A3m4NaE$;bBM#0@3N=-nFQzDIxMT;BobAB?LHv*##tpqxMbjABIV_u@qf%^J z0+hf(TvynU;!N(k#lN5T{e0TqElw@ek#nMYqjSKGJ>{0dfBT)A@S!US+YdfBG1prS z@e!XsN98JcKZl#$>WtWE9Yl7UCSd_0xBi(lZl)q@?bHhwU)}RQ>~1e|ZCb#@%RYIJ zpZ7z4N7D|)CU_j!(1~@Gj&tU}!<}=L%6j^!j_6IV*{P8XRKMoY^FD|US23&u5kpHA ze^8!i%z>qoKQog*CEvLD#Hw5Ar_cLTEk*lQE;*b|HyPHys!j(%FOj*3hP+`>@TS(* z=()Qjm%Bpi`7g;v68B+_M|uUz_$BHG?XM!KX-i_UWCdYVTCf1^ZtG85 zzj@woLkq(=c{|?p(j5fSZkRztKW$Fazk&JgWlw7{w1~?#tu<7gfE2UObw?ZJF}+SG zSsd2qHIF&m>v7T>k_AdV+royOhA*S;zLBrnr(Bc?SG;Lub`%Hc8`wyy3Qu_3?_T-*x@kSj`}X1uwTa~ayt~%TZdDb`(LK@ z*(g1(tX_Zc#q#(^OVPF&Rdm*hy>qef=j?-uO=0;x4YlY#xFKR1ua-&JTncqwbNFkGj@IbzakfZw8%wRsp7LsTo6s%AxLvLPxz_jxmFg#@a?9id6<2{ z(09rcZC2PUoY4s^(v23tJj*La+OWZ}37OWK8Zm{S^ZIB>ibl#9*NUPi%Sbs==l>%u zSHRhWb;G$OxHQeFY9Z!>){>G@m1gT%qnccpKXxx*yf=~`T&4$?S+|`Xjxxjm%Dd}2 zFtvTt{RZ)^4+2q%v29G=S0HI&rA=EN$KR zB^uw$c{a^)htTNBpI^9o+h~oYv|5W(%tBhuh`UEhnEimqFETA1|BsEo^sQ<{k0{+H>c z@ead$$2Qx!7vpK3y^stZj+*I2wul;nC_|U6Hh8k1i`#EBy&=3D41=15e&#z{lQ_p- zAHhH02h)RR_wH$Fg=WwR3Grcm)aH3~i1Rp7{s#@rG(o?xH~Svcpx1#{Q3D76LExYX zn1u{Ai3w!k`ja)mBxkjHlai8Gi9%+JkeQ^AU-P`DvTn(SCo|(MWK$3kAtMy@Fi#R# z#SVyf)Ob;iqlE_i>GUPw_+rkp;aY@R{UJRZ+Phrdk6g}Z=Mv_><&?&;w*gUY?C+zqGVCAHeJZGuObEZep*~UZ2@$+`b#d0x+X`wq>mF*9)I2O)SwCH zbI){yBj&}b5%c2DjCcy1xE>PzY#-2_23RK_11xd?e~^|1ldH1#JIExH1U(EmeMe)| zX?X$cuWUkaF5ty#AoqO|5Idv5c)K?%t~lvNQC#%!M*=cz(AH%nrPg$PYspo(6vn}= z>88@dj8SXCss_n}yu9otHYuRs%jr-np;(y`-XnI)uZbHDQo6?f9#VI~P5%tJS-q4v zwTZ9lGf3>`54;SVRb+{95LySZN6;Xd&s|#FYvUFNH=?sEhra>QVsO*aIZbW3; z#+$R}LyX{suUaUACQS6n61wyUs8Q?UBgDuI@6jTig3Oc8JXZtpJkk|QI5$w^3EE(E zjSg+P_l@=~wQ+-VQL6aPcri!s0q@E;Wl-cD_ucWmb2>|9b0J0>2-|;JI@= z_W#^+_v)eV3v^@&s)po>L5y>V?-pW?)1l|7bJU1p>ia%A4vuHmpGB?Li}vUT>4^XG zm#`1nYrPnI%-S~nIWj-wxtSg}Gj^H1>1+H!ZNl%Q0;NJzx%J$DKcxIrThaG$JR8-# zr1Wv%zm*s9VoJ*)uaKUMI*8?+afQ-Mqo{aLhB z-KwdboLCN$+N`bFT5r+Fs383S_xKhMYd=QiEC;xXdokSL3KrysjA5ARV#!USOi5?s z^G2D+&nN}i(aAF?`^!y9Q}ZV90NXQx0xgpnpGOSvE8#RuS{>%w{HOy8?x(YDbFubv zjBhW=F&+)f?U|hEH*?Vb)RL*Ym^AXJxVzGBD0!e^*B3g+OkxXUmiMkGAUwGK|!{6+_-SHgQImp<|vo2MwPcqh+H(qgVaj=^~Q-N~dlqZt* zu}BDYt=Zr#mu^NoqXoF5WV;|cNvt{mXN>Wk>u|$n^KuN6lWO#?ri;?LF}L73k4I|1 z_$6A|<aqT(pW32RSBD_Ate1EZ87|^h zgbWuWF7=WeUp4CNc(|+S(;L4{B-YCf!M&SA}$huJ+*$raIP@PCQ>>F8_-3K1xnumVx6tS)cS1MI)B@2vX z9hb2r2o*GsTA+!?4hRF~Ri_);OT@4C)$haPOPAUkb9)I&U#U5w+@zFvQLe$WdAjDR6FN{BQv8{aXpwD9bX+C2v3!076ePKSmPKvn~1C}1CLAylNC1S zAiCT?V$}ljDx^!GE0&ZA zajg~{^eD|Bis6u#sfLHmUbK&DiOz;CT#H{FHQwe>^>x&bslEdI1Z23awy{~Q`X?Ys zGj_8#Fz@@v-)9u#kdpZtdKI|H+So6{80l$*KyI$7W&Uk28hPB<>J&f1d6?D1iKT$3 zZkX(+L9l|vKiyICmRVKA{u6RPmb#Ju;<%`rWUC0Mv|Dfp;z+C@92Lx{!I2Vl?S9C| zA1XYk#c72CK1W#OwdivzYAXdTu_hSDxr{od%n2QFu5Lm{7{fN!rV^4=Q?y1lotn{R zB5=SVoHHLc3S3uTq_qji@hXE#00`&Ou~t;d-Ax(3l_Q!-3`bk7<(1x{S3ro8?j3Rc zEMWHThMuYI>1yK1D%;yPQj8D%rQ+AY+HnG%PXqYzsMG1J-@V;Q?j}r}lfS1Q(|rc{ zi~M+=!lRE5MqiIMv5j$|eNV1roE*uPN8ZcI_*A_`cF#?3A-B zvL+^f-%rQ~juYsl=)wn^%f+)PM5UZlZ*Q|HdjL}%ZbF`ydj|=I*A*zMH0D>%PuJaB zY=C8Rx03rCo8PT%e6zN(d2oMoYvb$x)xogUPT%>0NwP+y(daC9MTW-CtuE%-NA_Y| zcL8*_5PK5;qD4Z}0LuLUKV7PaN2nbY(fR7yy&uw`3noAAn7dsE<$dUsE*QOzlEme}ezoyQwjCY6N5o zpz|iJDyGA^DVJ;lEsSR9Dyuu6l0n}us!X)BYdOxY&8msj{h+_0I&6lP73JS#d^`~_ z`m+g;^zXNm&HKq(viacNFhR4$NqGqmHy^^YufKt3d(V>14Qv2B)qZ-C&hzA((I!0j z4qoQ3_mgk&H&8I*?hvxs` zpNntqyS94;Nczx50Y{K`zv?Ng0 zHyd4ac97o&BiGq48FWzeK)g!1KpkyOesY!EO^YkIt6#r_g9%3>MRI5Q2t+NJ34+NV zO5MHia)cd`2t;J5po+zCB7hr17Kr!a7p70%PVh6g50<3jgWD2j1w)w$;8=W)kc492 zaJ93xIO7miX0B|m#){O%K=P?(0*A-mx>e1`?hl|&<4phglI|mknWa(e{enSR&j(f&>6*8I&}e?pYg%5;J~{6>TQ=7OuSHS3rG!P6o^ zl6{qkh6?WO1LbFM`q!`xI|*wF5s59I9)%h&!_8o zRe^N6e*eL@-^ISdHlqsU?-74Q4D%gY!kP;mH(ws``hczT;X%4;IK&kSDT-OE(hn%l zn$Ld|UXxi2#L?d{EiGMYIT_4>P5FR)B2NGpo`Mud$qwPFm2R-+WlF~nuOfQNCET&m zA)pr}7;a1x&uHTzVxzE2gsmTi^&lQhu)6Zw54n-zvG6~i_+*XFKo;||t{drfAR;4i z#T?WeG+>Ua;|$s*$@z}(&aq%fel;m%*&qbkGrh-rY zY?_XNTIQGzE;|QKFFipyvlLd>3{4Kr862hEC|H;5%BT6oE+)oPD zh{cwJ$U1Dr)~|s>Mo`oHmq;4W-5R600kh7Nr@$Vd82jq!{u{tudbXXc|9beYdbfD~ z?D_L|mrpj1?p+6ef3=QmoShte5^AOCLhcwSi?f}nCa*a76my|Lmh*`5xC$?J-9HFKL@ZT~eUj+<%Mg&0bL4ji%4B$BCW%vVb45+2;pCp$$$AAtQr8k%{Wr?b^P5oGNq_AT7gS-+tU!HEx%HSzG>^eZSYjd*_q z_u&gWD>@!+lp>rBpCt})k?B~qhVGOsC`&ud{@I5!WIq6oV0HVoP4_|ePYp{011h1N z6@oZ6p8@~}7?I>&j=3f&$pIc;Y`7(pXa#@r115O^rtm#{g(&A1OzmKkQll_fAK z8geuI-@S?^J;b!s1&OQHdC6kbAwZs3!QVe&1I$sei9e<$afVZ=xt*S5+03{lJz_|5 z6>ntq@EvhfRgS7-n4hnkH*-Lq^|&nYn&}#WnET}xh9vEO$Y(?}q%o0k{F|G#tSUFF zBJua$J;#g7Ovh=JnJi=UIWlcV7zDIHT@6{wlK!l$s$BBJ*yRnPtGXRn9BymdOi#Pweb3>%;JeA=N`UV@D8!@oj8KY8gE2W*qyVS#L?cHUt_q-A3qI`5Ja?U=|C zAWG!)`Ea7|y?ScOlod_{8#mP_LW&eG2y%6Pl4lcpNX>mKl)7<&^^Mr}Q;~x>#+)E# z^7UnH)c@IRj<>SQ8PMi(%UIaD#7Y=p?;eL-&aufkT!DkpJR>DRKUsgbyM8)Mx^R!k z#r~wKfB-2enk@5PY6N~F8iQMTMg9RsvkQ|!8C&x|=wvNqHM9uQE5lY4KtO!{gdTf% zs{3`?Y;k0+%VDwuoQk;sIe-k>eay>61>>H=t@@F+9syis&gz10cd!fxV9w}^`h4WL z*=<+w)X?qQH~}PSF)b0@XNMwN@Z68O0W&OTL#W+M>{G@tB|VwNycR+ycS_>Ov)K85 z6S~d1qrO}lzYWN=M#R!ioQLu!gWIQNPj5UonC%P>4f?iZfE#GSw~Qh?Ag4ynB>be= zHRv06$XTTrX0mx*#cm?7fLhTT&4y}zm^ldUuwgf8ShA=c8*^gDFN218^$gY9tMCm; z0qsq2>Doq-T@Hb5B|s!efnjXnHx zL~oK$N=yi(N?6h`6bMC@LAF-Xvvmx1$u0E)SbPIB0f=Rd(Y_?SlVe-rES0+weaR8J zAQp+FNArj5E<4Lv;!Q4(A+c7MnKJ39-TSwU+VOPVH`N@XR#0z4qyd(UiX=K8$W--sI#k3|*(-U97BdFD% z+o1d@`;8s**pFg+sPs5_(Eti7HwZMjzg;{%*)7x@Y#EOM8J9k?8kC#i$8O*Wm* znO4I}k$()CM@H#;!20hhA!oHQW<-<()3C(|RlO3@n1Ga=0VSF=v>EsKd8p9XpkGKF z=yQAEJMO@X+5&#K(@u>K>HHs2j3)L?`V4zJ>HeTe{zz>Jy)yti1$=L)8XYaeKxkl+ zYPBNsYOkQGI9l3VEo6=O{CLQ^;E3OX9B4d-MY31|#$6Lj||p!tfDUigbMhf)B= zRUA~0EvHACE9?fQcm?fQzMc4e^L`?JKiD{?OhS%Yx1$E0xtfw|Ju~6uiQATh^~L#| z7+PPX_h^_=aEG^`#+e)4gEWRJ78dN9tY0J`V+&qnA(a(PHf<6&@GZd&h_EL5LuRE8 zW^0G-_o&n9{~w&UoBQ)A`jsJJyMoQ3fHbQdFp6k$;xgJ|IM{SqX;S;duwQ@sX>S+W zFAyUMH?16Sy2vLO1i>H3on+iL#KQtjYg8f~eKC(ggc2+5yk!15cVbif-EIIWiSP+E-uspmvdj@WH2@&e7< zfI4tCWbeW&OoiOMw2&V!$`@0?CImfv&`#B;ADM zRHa#G{VlIZ8}6;-g_1Be0R{-2l+BXXIZEJ!+Krc+6_#KoOrLTG?9I%;4o6{FmQ3GF@WDB_5B0Ew|64|Mra z*YLsY52o%kF)MpM9oB!m>Fx*YUg&w|F+oNy!b7VBI>uHyuB0$D6WvBr2kGbpxz!8f z3Wsx+$3L)Pq;LLS1D;J3K z09a4J^tc|01o(Pw;~|9r^h2LyMqhS~vvdP~!Fihx$<%!SGQto=-~WF3Vu&XC4_T4_ z3olKK56h?ci(Mb!N4Wrka9&pR4$GxttJy1N3;YcTySqU149ra^;|uZ@u}-=$lM4H* zcjXCuHSvC;lb(9GSD{ZQJeVIZPEW7?YyXM;{gRo8VaISEG-q3x8|)G*?{NSWS5){1NUN_WImrSNO`|OQzoq_ z{v?9519UL6Xty<_ELa8Z+j0SdqD@@plMq}+?Ut$31vG`(%LXNmb1u`7#$+> z$lE~4$P%b8HqFgTOx-=44#A5w_*b_)eFzA>04{!7Ecf)$+oB z((u$Cc8pSwjZw2%Hd&jHhmSa8ry$tYJzy`>s;09B_Yx1rgw`H3nCS@}Ygo{HjXp0= z);?Bf(_jAvWj*8F?O=*z)|jy^2kHq5@EaQ`hA-gvJZ6tJ2HPLzM>Yeu<%DD(@<-Zt zPadvqn%xn*AEIWLE}d+0&8HZCP#oGdmgqeJT(0QXY?@wO6NxIP)%64s|60PXC)a2B zWRexvc?GxpH5z-a;cBb%*)+R`y)CX$EsPi8wS;%TSYvoGF}`DP!NXNJ$4HuaR-tCP z>R7-7+%GOJMi&prd-LG!`nakdtQl{sYW>c|8L%PMEFHsUx!<_5!*}m4?{B<&SHF8V zfA_9<_wMA#3>obi$ou`xbyz)xwxajw9pWa}V7+Vk1k=QyxEOIU8}qA-W?)wQVR!u=58OK zsae9a0ZcP&Df--*aB=-{I;+thbswEtpqInDzkYRn`+pxj-X6q1?Yd>Ln3J5NN76B0 zm2Lu6a%lSg=7>ze#O|rb5Adn^#Cu8(iTK@sCHftzDSmzfNd0qs5!S5CsZ+?d8s z2T=TZKCLl0n=cS&+1=v4H%G}o7bS`&c0(RKac1&z&lqy9W{+MKa}6u**wiK#Bo`7tQ5v_34%+MdvlTrd=2H8UFto{xMkVQ}T#w;8-X-1=F+$SwzZ< zqUUuvnE*B)-h)eR(0})Ca(7T%$M6Drl2$Ff!MFF|tjE3;B9L@*121Gwnn32;%Q7yw zDPQT&#Ptk4&VbTRDYhFmB}Ce�wCCQC{^2-1wJ_+LCK6vRiLJVkevuuYli}lw;g) zmozLQ(?oYCSQDSAEeFKxpVz0bCA=YSf7})zoI;?&OJE}=gU1Bp7h?l*B6XBZuDUFX8*HacwDZYS(~}by*DL3k><7bGiQO*}Dln zgr}AhU;p*+*WZusz5D%Lb@$z&JbrhvZp@cyl~1qMD7g;uitCuXAkRKhX|TOryvpE2 z;Xia56UFAtfmI|u^4v`KPX7@3D?p_Fy9@X)oK$%Llci~)OBn|%t{=hoWPSUlLqu)1&-+pTD*yHPdgwS4(c4r#wCtqF447Q<8pHY{wG1j{ljsTGx+SK3bbH@{o!Y?!$2`bAvuqQlZkERsA)O{~rfHG6{xH5D zR(6W=?JUhvH@9?vAAZ2l>}wci_uOhpuB$7f0ub6v zCZ5bWnWrZhdtFr$zXrcR{=CD{(`)8K45iB_d5Jcm`55E41%uWBCqWvy+&p=A`PY-9 z>tEL%14)5@z7jb_-mJY_Jcs|`d0Ib3EYzJSkAkxyNXrO;Hv})OD+nHoPvTGaXaipT z^x}n${`=`347HoQefH+XlbvTTpS?Orc7A;F_Q}q{v$xK?BpSST8{JU4?b2j-yN|3{ zfF>ne4;f0=I(drNs=h=}5t|fw1irWr{FZmsT7iPv}r-|MWA~CiFpWCzozK zyTDJwKUl3>@Zt%24W5m(YSD&Q_mjJtMa~>W5gfI9E*zl zP`Z?WlH~Mc7i1d{61h%rRBk9I(F|`d`&X~R6ch*};0~o2#sxKY$qqU18 zV%)G3U;v5RX?aVNiFpHj|Mh62qdec>T81TIoS#TnZa$=kJ8T=@1`FAcbF`7LD;(?y zZ-*%5eov@F_RE*=9t+aHK+_>5!6bDZoOt6B?rpItRt$oq*=eN;v>_eRO2H347?`k; ztxj;U?LGVcJ9YLha?}k{SS#*0zz3nQd=`|0#k%%t`~EHQdJ>|PqICw45H{anfwUH$ z4+ZZ;sxlwGzjyD548YZ44nN5-LPkt)9Q1cZ;v&k|Ph@?w2bPT$k%&a=h=UFr#)*}( zt=UK$!0#M53}S?bSTAca!%&Fq!swGJLO;6@W|;h4`4_oU)6Y?PQDk$c!DmR@3I_hMyr>gQdzzG_!y^Yij87|Pn3IUCh$p0Ms>s4c`7aDuD_PNPiwiF7pb2De zPjR89$(Bbc#J@F6`J>6b7avRN>2U*@!sHF?weQ({G>@@&BJqv_dQ7XfI62A5c?tby zNC+HK<`|BahFc7d)7__6ce|8`gH06DU0?F&Ksz(*=Rm7yLG~zdek#tU$R$NMHv<{r z2bPNoHy16Bbh;2dt%x(iBv$Uk0+IJJMS!GaUO7*QK5C<=tHaGB)t)`v1^yO!Z#5>g zP59^B`nglOQ|(4zIsr+G@$_nM(ofF4soe_6>X4PmLv$GXAXy(IyTa?;*IPzQa%DWw zE7iguiV`L;plq<|@s)9=wJzCvyQT-4K3(!TU;O84ZMO_jP##FeM?~?J?yTL?aSLI9 zLre2dDy~CfGd=LzUOG1i-Ac&)X}~d3IEs!4DoEg-#_`}Ue=z_tcGbQ+AHtluHqE{1 z++=UsV13IE1|pR94vCK7;A3+C$f1O0(Cn?)#QN&#)j@iSETcZ1c6#CD%xrehz}r3@ zb#xybku$rP-u;oO7aZF{F*-rl%mMZ0%d=n8rnauk_X2Z4;ggRkY&~c83=8mDB4}3k z&nh)bxgEDuA37+LoRl1y5Bj&QiJ$IS`_~9l-uko?KIt@1Sn^Pu1x>IV<#jMo-ZmQ) z4Hn$n?!IdiA#{|YqL7MnB9~SE`N+I$uu%?${t4^E;08GOAo$s%TrO&SMBxDC46mqp zS=JnNnQ^cHKIAmPf_l)KsO(dsN!CDsw^$B@LLAaCOAh9rz=Tyc4G-qn!hCEP+=(B+ z>vH}f5j_xv8e&*)4hsY_gS@zF(W3>gg!@-NdJF<+5On{3$LF7nVd!8)(m zx0n)!WSB)SonNUNw_hOD)2B~m-09{ZL=JR#9k+)6DxZ9-j2R|MF*9h1zmtKg#y~?e z7jbZL$6eiBZ)gkS`$rqcEm<}ouP-)mY5+>FC<$>p?ab<=o_uXhEu34DS3}ahL;iU% zStbMbFqTTX?hHWkDCnrzRW>}>khltla!A?g1~MlqK;7?D=l>6oEjZ-6K60X zTV`FK>`kaLBdJi*TlTyw=!{T`T1wHa(tE>FER`Hm7z4eCFi7Hx5;U29k2JsK$Ztwlxw+35#XFxyrf-^1R&qnjtM;ZK8&~ zRT^d=*1PPl$7z;6WLInKP&`h_(;vMH^Yh#kvcRVQVUi90ZWRVB4-VyO8GI6trzhxdRKaY8kf4hx2dE=;gzj(Iyl%w7VF!Iumamb7bBPtRB*LDQojHp_G+m_Y zQ`8%XOA|>N^yUSf#sT&}0dUoZ+?LY`rk@9V1qy~9gD$qFr*$QIBx+!^Q^MWKdL2SJpegBj^1E@Yg~L}++9j1< z4fxCX2Y(OoiSxyUPY4j`=xxsDk@M;^zPN>+<-SQg2w1||p&0QDf6_X+HH*yev4L(5fFq_ zZhxLkCY2;7q@44teMelvj8qb%BF?U8>;SS`={;jZ#V3A|yvb+id4}(B!-#3a5IUDS zF}mGm*aNE@;Si;Z9OiILn${_d9_;Nzj0Jrjd}zC|Tg^IhdMkea-Rthaq*!q}X58y0 zhe1>TKjvX5-VZs5BZ@etp#os;pkrj^bXg_2%OVgjO2aF7AP~F*@I{{<`?m!LKDfJK zno$H7;Qj`3lBxJEVX{or#3EwPz4s?2X0EHKUj<2-8O>gM^h%}G1pRq|S4k=B42Eh` zWoUXdYVyd(&1Z`mKb22$5&Wf9s`GN;zazBT>@#2no+B+a(LT#2XN}v3jm)&oy8#AohXFToh;0r@zD=WxI zxxQu0l^QS-9rY=(woGES=|l7Ak;M4u-eN#BMpXkw+og?N`p*Kr;cds#FB{4~X4O_= zF49BO=TDdB z`DGXM^fX)Nya_0?kynqA57rFGzC>SYVnkNDnB=c(0v@%kf+-kN0+3%wlrUcxcm+_& zy=jJeHS*4}yJCQ|B|Y7x8=0;9=WDeT+Y^Mg<(v;V-HdT!!d6`R#^>>o}=nj&k_|g zRyFjCG40JWR*kB;3}xK&w4h|f^3mPoJ;;QxV{5-`Y(7LHtZW``NYoPFwqsh`NYnAf zlF0@r8H6_gy96q*wfG`0fX1Wt*r6LS`RUNCOQ4b94Pxa zJ133P1qL}{H01)r-|M7LcsP{XVh9pJv7q?*@rS{X!k#gZnW}=oOr*-qN7QCtlDt8B z$8-E1Q#E4@ot#D^DUx(O>i8Cxma}mqY;`$y&m}>-OLsfRklLIaw(P}J1UFMCJN_Z| zz<8-aCv8G??5=-fKQp(z5teOg1*HSfXJN9_?dB_Q4?{_H2OQ8EQAwhdzMZLgasKf5Oj0?xYMG0W+N3$<1p#J z4+aDoagZp(AvJrCQseEuES3M17mdsVq+alqi!4~CTs{JKo4ii)`ij#{OSG{u9yevl zYt|udfAZQ`$;&Xh*dxg>e;b^t~m9VJ-$IOi=c*2rDO3`+2%aB4SQ^Jh$+G2)DgR$`gP zJoxGD-jItkJY$Q{ZJ?SqnVR!G58ez&M5D|RVFSk z!^D(E%gJb&NYz2l@6@nr$BWZyq^j(3fwJ|lA3k_sG3ho1Fo>PSL4aL@XtjVW^3w`= zRDl6!O*RCz_xoAxR5@$FU=ybdz|9f+k?S6F($tAbWnwbpdwbr3EQiqOD8Lq{H)4gq z(0O#-lC1M_Y%+ann?YnQ>mB7(r7+)nsM6G1#!t#c?O=J=Ic7Ls9CI#)p{<`ojURJC zkp?Q!OW*4&=319i{UkgD#;K09kenjY#2R<3XBXeXY8b3H68OrY*&iQ=xajMPtlyZ? z8U2JcaBX!9yX7v40BevRb<{Dk8s)~32~rPG{w6%WedY8PIauGVVfi*J?!)Jcs;#-> z;k@$1CdB^JCKXqA=3K5P>~hWS))ib>oRIU*=7aAZd}~rDdp>!dM;Ua!)v(KvpX9>M~j)-$lRMISE)1VVS1c;4hgBT7Ar%-}ne zB}{rek0n$iQDPk$EHVxE5-WWb@i|x}J>l407v2qMwf05+MA3gop^dH^*jykZFWOuTF#4Jj0A|zC*t#L1BCV^~ z#oO@K^Lpsowq3&=5fmMZ(60thukLz-Fqs%?dDJbfoWw@9Xknt)e z1-2@zfJ(Ni?!e3FFEEQw(s@&SiqIPLZC~L}ww*`_pIonYQf-c9kx@1`+CWNfhz5?K z6QV5;_^_D`b zz_ogyp%IsDo?$P%9mKaI?M9=wEe=V;nk;$UcTN(K?cLiIM{YXF=K0u^S8WNMJ4`B8N||j1Zk!6zhCvzkx0^2e=Id@*xN|aBU@%RC!*1$i zopv-TVzvlU4J~6H9tWXjr=N+fOSCBgQC{xe4kH_UR1qXL@P!m6axIev_Vn4)gIAqf zA(QPqy<0|aIxWh`HUT%q>n#U~A=!M=>hqb)!K-q)QoQ&TOm{ZBf*$f>jA0a*KqgK4 z%zq4c9TfhDswIqRjW4|}%Z`dxXhZQ9cyi7kQo!5VH)H1gD!0e*3E7VvU_P5e8^7JUfV53Up zWUk1Bs>%M|v+vd^%m^g)5hjoFQYBhfP6|Ir`&*R%ZAo`hqWk_P$B+M#Nij|G!9UI@ zVw`I~!Z7T-_Hg|>7FrG2e|@NuPg)4FMoydvb2glF5mp88n48jR`_Uw*&N58($t z{-J9x48F9N1NYDlUF5YS#uyVol88B+RaM*<&s~wQ4#wU{rB#6$JM^3 zEp>&xO(MTV@uA>cnKB79*>1sXC*3Ztq{`Q*(4z*WY1dpRp^duvjWUWyEnjy(VfvfOzhQF(gL&COYS+CKuGG(=Gh65 z4D0o=-7~*hD1Njdqu2UU;>|{dDtVZ^;*gdnvstByE>+G#5fbC17uqUH6;>$dvTyPB+y=pmg=A5%^mhojkue#IU`4Iv^F1w(lJ{ z7HS3jIV|hTwDI~Qt;vq02>Ft#l3UJ?B_>}JHjeqdQR*27No&&7sakM;u&v|?M=#&7 z{Cl!MvpR<5u4R}tqB4~Mo}hQjPz6A`y_fzZoY$3}-~yLs*4Njq)0XCgKtZfZG_bvh zDj95t!CT)YkKs}1DYM04U$<@@FJ>kX>{xkzYm1W9et?E(xV+t`pV)pei^Pfbsau+i zo4eH3^Ph4@CL!mov~`ClBCX}6>Etg7OTz=3>a7h{L`;vHYSm+eg91UQQ$1!wR?|#k z@1;hVdb7T#oPm8HK)}X*ac$wQAEH>9VRVrXg>;WQF&NnbS*Pq&Zwq};d}=!VyqX}o zAc*y-#`PnmmZ(tj8zd!6pt~8TV`oMJy?E9A#EM&ZZ?L{dZBgDvh0+GJvt^S(l2xKOkN6<*`tLTg%P_ z9V^4USbyG&EI}O(*W|_V^&N<|7|zUXJZ_dnUIxb~>|;ti%urQLrh14Um@AvF5j*+Sl4u04X`i%sFelJ()xV3U#kt z`}%A|!@>Na+j6DCHhY?Z+Y|;hB&X|pC`04|{V+1BEIIar@Kl7RqP`dtPLtQBn_Y-5 zP#-rt#deQccfxqO;eFsF$DYSXq3jDs-TND2LoJc8?VbMd_D&n^?T2jXckUy+TYR2$ zIOJyUYStwt!97WJ)AO$exERCMH>Ze!LloMd;P7C$t#D6rlwx8TDBntZ(Th7@ddE=A znSn+%sE44d<(e*MK;pksj+{lFy*9t|%L zv^j<7HN-WfK&i+H6BmQoig5gGVe1W)WFcn&$e#dLh9QtOBOBzE5B%a70obW|jdunG zgQth>0pcwTK)M*M3PSpz;Bv*Qq$v8^*L2!m6Qio9^S22yacGmOK>9Dsx1jDhqo4z~ zk*aLrhIVCIOc#>>=@kDGHfLuiKCe0L0OS(@H;hq^CgQl~SCk{G2wPm|5~Zhbb)dz8 zHr#UMP<PuU^fOT|X!g!Fb^S!3f@ z1U#3D0K|s;+ZS)E--zXLo@c0v+CY=rGE8?zsA1Vuo#EMx-x|Wv4zC)ZtEz2ZH3;hz z2u%w)dVQ@$=EHFWsC+$v;rmV%4bc;pYIq9z(Pto~!vEUv{PYv%5ELBCrw@)?9*fna)(Jb0PGW@*+(cra=M5DpN(md3dz#JO3E@W+_~v6{L5Z(}Xtq{d(_l29v2Ho{J^}6j`niWQat2y~2I@^S z$1QO>csqb^7ew)%f#Glp9@`X*G-?Op@{uQB?ja7BlM*qm6SgR2cjU7fbz{)h4Hj?C zg83VGmudClLE5jLK8F57^Ds^N4r_#`@JUNVgZ0Sf>L~?D!+Tj46Wi|5INMzip&&w# zLU%?!1oe?5yk;*%;;ab6$?T<;oEx>MNCmG19ymJO?cW9=($t2-4|DG>%SKj=BlW&NjU?Y$EnHFI7VnjtR;xHdunfd!KSMuy@aY3f&ffStb8r5 zW*FtheP1D*=L-tz^aBuQJc9>DPJzA+^$dI?A^|&{QgB#-ti0nX?|_VaNBLOFli;g? zyeAkFNsOlWr*vZRM5SV?L0^I6oaf0+Ie7R2V{j3Zl(CQ{*9hrjtS2&7-vTLh-fPXlY9bL+5a8hhiTs1)K$sLIEFz+th5!=0c_kKA2bnrS2=SH)Me_rNu zFiZxRe4M~afD!P{paTtlZUtqNhra<;z7b@Md;EhUg2BY&Cg()UK8({pSQ`_}5-YJn z-L7uzL6|Qg@CnuZvaKalM1KzMTZ)o9ASXWek2~$e#t`2kW3)TW_+*FMi)0S+g-HRq zT%BG$lLZ6VIZAlM5~(UX!^n=2(wRe1jmA5EqO6dhin#ipu|rOwT0txiolQ4*uu@%iVh&{nNGmi!hz*1aT)?GIarSb;OdFnwXk=mZ&rwybV@-L zs~WUs1{!pn+~0$QB@Cv42DWhkccG~#$BAa3glC?)87IGEHY0F|mcLPR>6q*>rK)_` zb$_%a7s6#56Wfg`h@7z1T9n`J*teA9|vzc-YJR7TiY%}~p|<@}X~Yd{f# zH;!bWFv%!xj$0B%CSYj7Ldt#dhoqTAa;)_9A?MSbe?Obc=wKi zs-TarZoFgu@&r4zPu@h71QZfYjz%NGfWAx6?os|ve0AUvSA4q4SJON2{{<%Xgw&mn zd|mgF_mDC0Vo?_C^!vWpxiYoDH;>@!5A?zP1RRy9p#KnGeV)8;eg1`hauvP#GP!Db zOmItWJ2Arii)mg1Glzy_0>pdIc{lfPvOcv z43=b1e2*ORRf2p%hPmE=sGG>a5iYfS=PsuVb55ge1l1V3c+Mv&Vi<$m0R(4`=udmQ z`)1qTgBjZC`BU=9ACet*BRT#Y56r%kc#^x0fidR`=Loh+*B>u=>^4u=Cy~%vu{o*Y zixWLBU!EW&dTS+0B+wd9fSGVFoad+c(&x>*Q~GiMOkToXsMli z!`kbfuOmon-1~K1Zup@3mb}K0k=h(V-?Jdz?}oYLUNOzEVwHg#u|kzhw}0*E*}Bm8 zwxGcl%=Ak;AfqebFxy_1s$h+t=8;1VhSXYmQ2(HQ#Hh-W7oXvu> zT6|1@KeR6ecpe5_-{V~>o!`OWVgCVy?R2FHb!`jDRYQ(hqACfb4-f6gg6SZc1Fvex z7^P`ssEUX)-xkiCcrC{qU#8VGDm%Ol7q?>^GiGo3|=-=j2*xrsnb|q~N8PB(3TtQ93$R z@!teR0slq>%Ry2v(`qT%gPiOS!Pzv^FjX>>kKFWnwUArr7L5Ye!QjM4F>bJCD54vi zCw}tGT$nswRNN^qZnu>iN2qU3j>3cOmksf7D0 z*lLY*n=Kx;ibA5T9Gjg>JHRMC0iTeb!TQsqlS8vT0G1QB8J=O>7d_B$U@E4p=JZLJ zqRCCfYpUzD-7(U*8;owHsFcm zem0XwsYs3_q0?S+!Vu7vlO$?%%%nH_9tuXNkN@5myPJgd$HjOj`W))V=DpvQ4Jxv; z6I5f7Y?!!s)N+r{gYY~QL4!VIb_1eMGMpbj%Z+il3lBM6EH_$|i(ZuRml4tn!df0k zsxgLjHpd0U#nUQF-*y7>*G9VBxOR51FEUb08yDQ9(N@wG23o+27uM*x zX3U{Rj7|hFZfv9MwXilM{ zf5W-|W3*=L&yWrAa{8a+etfQJ_dg~l5l@7+K-fb|p;=%~$Wp+NFD8zlxxMJmxA}1W zdHyR7=FMmG&mYe}d_q6=kluz&H)yjtTmf`j`!&#@<(8Rk<8ZHIHWHx?CS~O&99(8F z`Q_PJoh`xf!Ch`7^Xf!jP39S8{4_LTc!W~oVHg+YPc90Su>ADw-;9X4hu*jFbeEq# zJYr`b6HvC<7(t5KL7ck*hDNW3sJJ4WRCGVZn0q%Mj=Ik_A!4W%efJYvTPElQKUR5J zxmx~(xhbLM#76Vy1wEUr97}znv8vFEbPC#L454)!KC7_YJOf2vt!ip(-g2u#2I*RI zCb4sK(jPeiO|N~;`f{&)Oo|f0&zQa!T?0pEPdQ5oeHEuBvDrz~+9SlEJ;n8w zYXhKNHQvT_XKM3VbDk0CQ$o2$q|^Rc+h+nO9&7kRhfB(fz|pU;JUc?dT+ zA|Uk4Gs-;y63DW0tT~3m62us&Q^81@c=Vb&hENeGNssj?PiWFH)`$9VW5Q{n2i8`W zRrWYO>fCn6Zqf^SI83;I{RZX+r6zLGcV7?OnEY1GIfG4*U#Bg@j<4F0{nuOoO+d20 z`Rh%2-HGpG|1}72ILm7`wP328O#O@ zE#~xkw6D`-JWq?6yHIKmGXg%MHRp(_%XxUJA^2If4IEKtoTrkNmF0v`4cyuijnjiJHJM3~kHcYt;8yfK& z&)he{!EWj%49i`rklhf_>LMm_eq|~T`lDDE7&pl7!IaC&w}6oz-OjBTP55X?R|af9 z_!)0Kvt8h|xi9c1jYqHxr8B=ogCXIq0QS7Ks*9u_HHRaF9R9hG%bI& z3@~(*pz=pFUD6bOsV5rWkoA!*yP=env;l_)VYt==WixHuKvOB7Vs6MK)QN7l?rV<97$;vIt_jN+CttW4my?lT z94eW8kbI5{;=#a8@MZ6AAJ8J8IRf8Dnd~o)YH5MRhfc-b8OBE5KyeC}n1e8GqM6%) z@`-oCiH)k!9m8aFmt;@$b4C%siLhC9Q#%zElbHFy^UxkbI@UK;Mj%EvR_4}k>CXM8 z`>*&Y8dS89AAdpM3vLr5jkGjBG+l$ezOiGl0S`NCoHbia557m9VEA5PbMUSut@VR1 z<>B|)C1%pRZ{W3&QFVtP8_h<8#1YA~nw&dki;n^d0BwyimP?Og&RZBW^la+))g2JP zkKEg~u~GNK?I>7HP6QZEoRFb#++93VLf-Hj@4Gk2cZNr)y*S;sH2?`JX$|jd7&Q)ZRd}#Gf28s;4wt4$;O#_v8VW zgTHqy=4p^Mxf!(^=%cup?K4DS{6$^f|6l6zeEHWcy7WCmELTD9>5q3QBF+ zeA+rG!(omVpu@jvE@uDZbFp#%2ZP($v1|UP2MFP#67}h?Snv%!iLE|B2f)JySj_1( zq5Hzzw5p$`uI9i<{+?9nG%qP`l6_)N%lGp8EQb(J`WqC|j=!18@BAX2WfE{n0}YK( zIV$dHSuhe^qz)YUb=Zx1b$XF6rEXA9EpJ=**ErCqa?GZk)>p~nAD>fHv#86#-LBFK@AQmdmCIP64b9F8xrHM{lEI3M+RH&2?HPnh|t&VGO>77d7J zy)x^{2NV|McJ-2dNbB;O)O|Ut%GJU>)+kpr8M0pw2NSX3S{1D(euBUdsdNzI?0fVG zT+g{oh~ogl1ahZvxPY{TjvO|JBxmp#SAU@G` z7(}=W#yqYNxq9S|)kG@`VIhKGH?RDLSa`(2V7m&&ZKr5aL2VnO&+#bXzcL9L(WKV| zIE+9Ef9h#2m>%?K4RL1r1~tuC=hPdRrob3SC7L+L zz>Rg+b=14W&Ak)5CRs5}5ms26Mb{j#K2gpxw=KthN*cB!aP#kIoXLg>^-*X6tehNX zA;Wl9^THn1V6}Cod~70nZp71t`X0YajRO`jr&3X~i0&yr=^JOgW!hWkohNhYy~Wvr z#N|xD&PU87;~q3lk%0P%2Z{$U;pjThwR1%TOsM$q6qJW$(V_aYDkHN!P!F_GS`@tj zW6evBtVEH^n7DOXh>uXZk>NUM$jFU^8f{}r8h2v%C~1S2fn&Ek4Q8^{4`>`*%zA$; zOU+HjwRv)_SS7BXLU#pQ9Lco@)PqQ)n0<7A?CdBGme6Ub=Quwhn56*C%ahz|)5&x? z^@Kxq0)%Yo!vPw7eAmgr-M=5X2iWDe`67G)DhYV=HoJly2k${GO2v`0_`WP8{TyIQ zLObq!VR?|yEII^2>=&ZmgFgZ5(O{KnvvdPI>KIIY<1$ubq9+D-+;yjPlA*EOJH6e; zp4z5#Z^S&T%}NN^Z1M18rHoo;+d6T06XZ4p)-=Wsx!=~0y}sq(VHcG1>66W&IE3(( zU5dk<^?#FvJUR5qjR1J+Gjw-yeDrC)gj87?gz#VAeM<_x0c5*IC}&E>d72g3S-vEX zD3g%~7!Y=Qz-6$u@LMh3A6z}dJgi&1mfWjhtVaV?-8yFfk9IzA<)oTJSI+oZ=>53S zi}O!8aIW{=#6bqWn@Mle`>@9p{{)oD(H){-M;jG)cJZ1kAm*II(50SO3^_8f2RD$r z6YIY#1zUZ#{mXrMDW@rlz0l7R2hQ&^Yk)&Y?cLogMjGjyyg)zLq&%~)pysRn~S zU>US4?sxxieHg({8EC)V=aWCti{_k>G=)!sP@c!kXkB3XH{vs3k`5ttHY6~S7izjk zmlix1Of$SiIUe-JqaDV(wH$8aihJAK3HG+;Ir&cdz?}&}eC45aMSS!Tq}{vqX&r~1 zHU3SOH>`m1xQXO_jL8AHGOc^>B%F&2w}JA-JbOYd)s{Kq*6TqNA~E8;q@*9{23D)- zMkJpjBDD3Gx^4m2Go5$eO&zC(s2xUhUkup0wQY5*o15E}KN~MM^3RKgrZpSB@&YvM zByKE{Z4U&vVbC`_u+b)9smf76`s;?BU`NoBn3=Cp?5%Dd_dC*+`P~yj^xE3PnRon! z9v_v_24+c>1%?b)@|ym3YsPB*tx@IjSfB9t5*XT&p5Hf+ZO zDbuKrk!pmU=-_xoi;IfSg96rT*g{pJaDN8=c_2|8p@UChLs# zpn5J(-LOl6h`mT8B3H*K`AMLOTd@~%_rM3C-?Sggv5W=0rmY*bYq0Uo_*7pvHC?#( z?9CQ#PQNFEPMSj6J*Hd~vjT}~%n^gAAzBml`w8}~`%&6Th0$P*AFZlJd>WR`RUQUo z+`=v0%wy!2j?6p40{8{wJmvUpPA;&3h>+Sr%J;a)tj_ie;yv4wcHeeG5PIyB-V5l{ z@kxKcn>0{}2)RORP2rDPu8gG@L4^Is-RcQ4d6jLN+182OG_NY*^?3cv`aX)oV%T+K z%%mJEK$sgN) z7sGk>E}ILX>(zY`{&;@C1RpA^Z|Apb=a_tbl6X1>>i5b`J}$2QSgRp2)srZvhlFL^ zrVC^NJx*>bwG$G$lf&Y*Le>!qn~Wd;eS}J~3wJ!8Xqpgmb0s^L9e|gU`-Vq0hmp&z z>7zZierDInhlk=7i$QJYX)(ia4!9531sp|v)sUkw10%z94U8 zJ`Cq#BjnB9=Z#^yB*H;GBp{Xz3l^0$_B|6;PbN=qTfsgim*67MZW$kdH*r>hQA()- z%-T?P`|CS`y~LM+$A-(%_pc8bg(m5;_j|(jVV)R#e>XWXZj=eY;Q`#|7|oDuW}|hAQ1-=Egt0dVz%6yfi_GFv`;_2`xE_>x@d)D|ev2 zQ&JIYYb;?kY>(3Y0Ld9i@f**BSnq@}XGZ#=ParY?f7Oi2?8m$q|C^8Ty?ep<7(~XEa^F^(>$7=#459!T!p`S-ELD zA5}nbFM4<>?~V4kKg1T|(1K`X!q$t|cB^sAYr~DCt@7Ocsb58y+g4%#_dg@}>sA+S zi4iF}P51Dx1{|{@@$Th3Lo5=o_J5m$Q;0DNK7Z!O6^*ug$RCcA2gM3tG9LDQ)Th-# zkTaIQ?t$rH+F^~SHHucE3pd<=WVf}uCWH}qllX8vQi97IiVJ_3&#Wbj8K0AuOlJ5$ z;E9gnG+n{9<_*H0X^58O_>Ij>&iwES^YGhu5@4#j5jv7*w8Q?gIzzgmXjv0bfRKCj{GYD3Bz|$HK==l^m8ON5mBmLSA@HN*;k!tAqg^<;t z02X}rQ767h9P!JQGbL4~Sv+W@xx`%h`yXC9Qt%Q8?}W12fYBa|M3l-E0CoU3rmYIc zj*ha?pnU`wpkBlD^ueV?(xOfCDR`OSq$IyNuIx8oUCwKWz+(tQCUIV@Dc6876^pXqNGt%gYY;&?w{8Zj>q{s5cA|;SyhfY;kk3igUD{M z{5G}PUZ_elG|VtaG5u1?Wo)OO*I4H()md|fP&&fv9q*rTsc<)D^ZWvM^^9d5PK(9q z**Y;vkx79*63NYD!K*hXkvxzR`3dShzm|L83T5-I2(8*kG!4$fGdH( zA?tr$&Ovd;p;>Iv!rhckmMfJFnH~nbowqKS#|@nBlZ@moG5684x;|UY{jsavtJNG<(k@5{=r=gfY#ueDyZ`yhB%5no0q3RvK*&VWSG~>-dJmH+>Q6`dR~#3)MiNV z%G=ntf@IWm{vUNBV4oxqS^AQhR3D+N#n3`N8p1zl3x*&w)b1TeKp|Oz+o-^=qdV}O zUE}vbZnd6I6_F(7U*)+5MR4=gO>q(1L0|+Le+uGhQ=diAEu1EE(Wk5+7(+oU(t4 zPrLcpaT1rT3a4)nj9h)nVV_V?IR?qn3Hhwnsen3s*K~u~G@LJxQTQN-^4b@F?Ei#u zffj4Hxnjo@IIhk1MNX@2QB!`3bRH)Ky-tpq2%faP18RJNy$g9&F)NElDP|L;KE??V z*ANe770j(8N0_LFkEDYCazGWBIx+e}ci@qvS*e4(I?`sBE)#CH;}5OgH2(DV%(jvG zN7iRW{^lL&VcO&`1_SPp%!HD-V_+N;^Dj}(5^jXB%y~^0J!0BRL(JaJbM%*2b`>k_ z8CKtonOMu&%B`B4PIn)#YBd;i3~MBJVgT5W{MU3f$y5ZTekqI{Cc9fHcnEY280h3V z{P2HFVYc zfv&pa>qO&?QA)X1Pq@3H&$p3MZHP+!fl2v}dm!nf+hjvM5y6b9i=uaI(v7XW6G{$_ zfpY(LEJ=QL#gPQn75d~m4rGz67LIBl@rqNSX?@c4B<3;V>>$Kww2)9)R#6jE$P`7q zvG)}Ad@fn={r%1{UFe$5P#CaSXzSQzgZY^ybwYqZI7 zAN=t66mUg3$pmQsjd`H6#`e+U@Kf3$nA5{tzg`z}?PJ_vV|kO3+hj>($0Gh3uown> zrPKMNm4aE5Gg&jzNQ5HE4dFx|A(3R$$l86p1{#dj{S~((8L&drHU{It8?`7lw-TKM zs}&AVyU1dL{e@)Dh%SRV7cnW2cs-EB=wdBMD{%*tUARz_heB(Go7amFYm66xA~A+J zTrVVfQLA~L1F_HO=VGr}3Lix#8%RBbJg$guMV$<+wBGoxe{fH*=g*=l-#O`ou7w}z z2dfiaduUSEFT)`5PQNIp06;elVNOw<(%CW;1J^G?8y#qTZok(dM;N+})rJu1OetBo zx*TpBb!W86%*=oE_M&w4EjiVl99Lw+Wq#o%6~i(}sRb`U1_a>vQ_Q#CVT?V@cK>3D z9uh~wU*j%Y_PX6ZzV4wE`$L8PE~7VPUcf7gV4)AFY1O+wId?p7mh9gf9^BtSSOBuE zxGq6Vv(Hh_S1=^D#f&!|dsf))w90G4m}fydRC`m+bUyzI<^1;EU10-DD^jSf7vfMhCk*)VueA?7hcSGcx?UU-UZ| zjI<7`h#X=&HxNyBGD;QSW?Gm34Wxgbwaz#c);c&ht}<({lyxAAElA z?pObI_sf607=3yF-|l`jO6$e@4pFnUbL2*gndgyda=g}qGyx>Mqt8D1?BRpm^kMhV zPK-yuico*x8{YZdPr3<=pXyJiQ_4%;OAs391C;!5p26k+;WD2>O0|ZI4W%#4YX~|t zjv?FjNr0dfbcR1K)*vb&KoOhy?s`kKVpIf1vJP7x`CR;i@Jb6(*r5_Am z*{=q544lVrzZU4mzKd%RPJSJXmzy0(ddQpCOFogD)7|z3lX^dHeQuF*RA8-ImeS7j z?bgPQ46g)7CC`xKJSDuw8WOn|K{+Q?W%W&G!_Q;5$_nDBC|9l1C#~OR{y@}qvwe8u zRzD{Eu@i;=b33_Zr?bab&(+xm(*@Ji<5Zq_%erzS^i4v3;E`e-5L3_9iCdRnk^tS= z5xnbuj}b;uGVXLJm~_O9uax7b?vAWtHG$(}iEuszNMyLLrndNT(j9lvhul2$XfOQG z>vny?mAC*j^uPKUi$h$1L7w$3u86x5dpbX0=7Bjtx&ecTVK22 zs-kg=Rn$#bPY19@P+DhAy$)lfmR@hyq1>IwLDs>v6$9fg5YLwNL@eAt;I`O;;Yg`q zTJnVzI5XBAA?$k5=H%4ucxA=gXj_xY#umUWqJn@B*f2FOh*nARhm%3KASFU?v9I86 zGS6P7Gt`yr{`#PIoDTnWa{TM7-B)`L$FJVs-FvlsRlO=+ot@n2ABVqR?LK(EoHdXBq+AD5PsZtDi?5pE%MbLrsA*NBNiIy+|Ln^mE~;PElT}2H6o^uqPwF z_5kH1A19dC-W;NZbVu^U@jA?$m~1PJ&tx70Z*FUiY!u{jx)rxE<2L)l3Mvy^Z8*2y z(12a_mFWij_+Ca`?0L^@JNk9~LKW~lf13r0Uq%V=U~R5dEGgt}kwr!g1zhDsT z=*_ci7TdUbZy44$5;CXWQn0%aE}65j!WNS}B6>GFb6t5z!d2`R3+JUsQX=qN#3$BaCwX7$SX}~ zUt@cH4A;c|LaZhRMH!;kQjLtevGnWKJtk+q%g`2?hJdC@TZN;b%dD98;A?1koUF}Y z!Da^61S-8a?BhJQK_8$=I^)NO8mSgr99s6c#?(W7a5KDca_ifk-i*F4x|d=k(=CDJ zLx9E>uX(w7BSr)(KSN}`0l7-{n+bRfHbMY+V)4!>vLPP9@d?}GZtR}f09JuydIv28 z?LpUIArLwtX|Q!Y`oe8C3N5%Ez$(M^ZCK|uDkp+8|B6WGyO_PkY_P zm@s&ek#oNgO1Ga}A`Xz*Pe@8rP?m5ek;^jaE-*>RR;!Utjtu0px9m=fvY#B68i$7^ zlxS)@k}AFf9`k;X}c%LQZ=^IxIy?>lc95Js_@YyldeH9#3Ff)G&;!hm zhwfGjv_4k%)^fA3o{12g8${zGL)Y z62O_xv$u{u^MlPc;ZkopW#0#k??aZQzd!!|>9^0uusgf`f%^~0sQ8BpJ@^ZELBF$3 zxo^&`wOf6cEzip-Is!UkoK7a$Vu_Z|bdH`b%giiwM^4H`PL6C~u8@>#{;*M8 z?YBqCfw$%m<`JTEV&X*Vu>43XvSR}R6>YkQ=qrkY!`u`A|3nmM=9n%#Bt8rRW4kEO z%5N2P*=IXm;L@VNo4Q*CM>25D@orv}XY71=F$en-_|qm3Iti92HH+7Y*O9=9_=G&% z4O}V4`jPn?rw{af6BFL&C(7?!XtSRTAG$wNW}$;hsV2R-8+Kbvh5)8uw;Py(J(72{ z=8B(T@~Zu?V2ngC04DXM%3*IqFojTXgoZ*@_|n_zFtr0-DUM~Hb8tPuL!Oc!_a&N_ z5E2qsR_#=n;EMhB={Q_u)hv^1k)P>@J?qbnb0Ep$jE{c{aELq#J^xL3#n}7TOITO6 z;>@a=F0W;c1{e`h_YKG8C1Sp+f(26rh`TR;oI9562fSE%Nw_1Z55z^$F3O9V5>`OccTN^+W!DCe1}tunmrrF&1e1U_A%|h-c`u1F18x}+L{aQ@+|i9?2$>%=$ylFa zcJF@d4`L0la%A586MNUlfoE;CcqK=?yoqy-TlZc___{})N{%KV?ri3$^SgA8ik}ib z(kN$a0IKLWNV{dS0Sy`x!GK7rXQril26n-B@#zoW@pAV&;q2%=7wKJs#WF61?W+}U z%Aj%KeERItD6AI{0*z6svUGYC_067N!^lL*RNOj^@as?o%pA0T9dXfebe^#Xf=&9D zpHY9>NP4Y`0p8*baZYHyyIE0FWH~;PPJuNi<^SJ6QX%AGfEM-6mwJLc06codq)SA7 zf_u=h^Joxjtg&XEaAK;n$`7`LdKRk9^ zX@8fcf$x|=tH0iqa2HE-!b=&P5(y|8u8?&?7Z8X9vF|%uz7CCX{2jr4DUlJw_lswS z>z990U}7fu1>L1zv1+| z(h@k>(1#GC!EIB@f+jMe*NAv09TCnuTMS^_CZgAaBy{gXfRPo2@+veS4L{N@#b%r> zKamleUx!L2V`K3p)J@u_-Y{b7@IX}HxEKT_J7OSAfKMBy2uNn-lBg3UezSL1>ui%O-RFVvRkue z(Ki0RR5QaMu{ba2iGe#q_h_rFz+c+nP$oaZP4!49PgR36E09A+w0oMNcr4H{+^Of% z0h6NF%H?WgS)&jR?H8e;bYOZMIMRMwP9zG>&MkRv)p_NEEjw!(ij{>q@EDWK-M4kD z02?rH8i2W*T*VL_BQTG`F+O4|G6|dTcZXmga9^a;R`q*KF59=JQ6QU**lCv{fr0P! z2MwBNn?i=NAN3F7t8S^+b)|b&>%y=B$^*jAAwdt^lEWu@vHAL?BdnA3FsWpQW>Ns= zdF+Ze-z#wpjQ0V_*%q6QiFjF6)*=P&b$GMWSy+?04lXh(&`fW8804VgD1G`X>Ije& zE;1H~AW(QS!!+J#`Ef%Oo0H8-pjvaT1i7to(@YyUPTWwZmKBvh@=2RIr)$NP88-sc zLu9Z%rW!%wZd3*JJK}Wv8C%<-kE&&3fBx{y+rGt94=w)jC5^fpS1vvyw_23C*OJH8 z$-}>2qqr$H=El6C~p5$8728=;x1Y_^(1 zUW)=9EKjMLTEggE4U}&}H0n;cQ}>+652hgS!rg;|%Y!ze5*~ zjIOc?g23+&BeYe13#`#CObU%I##h=PU<^%5RzqS#vN8Vb0x%rB|GSTviUnMqQAIJ> zz@>&N{+~edsk5X+hkb-Zqg&$+nje5(4Beaj9a>6#AFPzmVh_7oMOmaq6}8ZdVrDlp z-Jm=BYT?QN_pf z2+j%1-`CcanF^5?Fh=P;TXdtR}AKxCFHgW`4v#@5 zp}(DgjNilNhZJeUI)l&bBvRln1m8^n5;058%S)&XxV|jv#%TuVBQ?eFUI2FQ5|TP{ zOH`xifU!%-*H;>P5swMmOx@h06BdY37(WmeLT4q6UWeKsS1yowg<^oXmwLo){U`uC zG7mB>#UvX8QU)|gz@bTVY|skEs-B{3fE#JzI8y2zW|*nm(>_;v;ZAmSrPUJ9FQN#! zxzSA{QTevHANhahq{U@>#Pm5V2J0I9do{ysRMac19s{076yJ)s|779 z8ck92XWEgV74m1mI(CJNf5L@A_g8y{Il_zxg}gv@VuNb5(F#WfLH8rU#}JE$9t=5$ z(36ztWErVi^;Y`8UL_zbttB|%$)R4bta)@-trmdG4=55i@d3>M_-H^=a(%?z0LVnE z3J5kh_2m@>mC_%Am-{WGNrc@(I}h&y(B!!PIth}3zMwL=184`!m#s}Axa6F4|EzG` zb|;2RsY9I_o*Mu^rau4{kFOdyVrp^{Q-!ui{zm{MmQet$P7`H2aNkrJSn^4!ZpKhD z)(erM3fQHKj0ryS14LntWVVjHwpg^DIN74tPT~pj90TsEx0|4b*oWbWs6qse7o<8R!qPYQsq;uQ=6Z%CZ=m z78ytXV|B4WBqu;KE6{sl#?Aw{bL%nz#fszcvzolgU?YegHJn8=4Wjkb*)(a5TG7|O ziQ3gPn2?@|u8Vx>nNMYHsQ$*{`R1qv-4;GEED~Ob1A^H6usJRb%QP!X?@Ge^-Fl1s zC)}HG_hW!G(K(+GL=XSjYKhm=bc*}IgoH;U@HE9+%Y($9fJi|sA9=m7nJ+Y-b0wG{ zGte|g1kK-1YWQY<+TSg*rMc~pbDB6FE>qMVf4te2&eSndF9sGM>|h*hF0;l{!bY`4 zN?D6B(!8dyQKVYLY!C#Wg&L!;0jrAF(fD$#+pi!z%bul!&$zg}I#Iy5H-IImbxf<7 zO%@n%;qWfvvfZNw)R{FN(|hak5$<}nGjhV4GjKC(`v|uI4+P(;uZB8n1omqvh|z@7}aNIx-YF3kEW zz5nEFXtpetGGIRUFT#9*Z zdGL|9e-z%f1cmT3H8MFK9N~@$1k?)~o)kIun2@HR#>hG@${>?;uMk6HybPe+VPeJB zMnCf&_ioMJn$Ioo6K^lPGHxW0@uhH^z5SHpV3QHiNq4Qo9UefcpbSSm=5CW4GuLAk z4FhT;(X4~0dDv3RD3nR`OfGev$D&uYTv9E=@eQgdU8TZ`rGE;d0H?apZ zwbxFMOz%0MiNRfi?*OUv?936jeq$EfXAg$|F|)$xb?a%|x@o)KFnQG4hN;`867gw8 zAwO7kmDl?#zeI&3|{9liK1W*Zp6(!dFchBYrJ1{OUf00s$;=0mQ71+z@ZqBShNX*qz4Q#vK5~OiL$JbO48>s+=dU zxt`Z%C!eB|I?DNY(|$rnc>+6;@fniWyp#x+#Ayb`T=yN4#ubuk!806|zTSPjgWe9P>C4_j$ci@t&;--v zK{3Y@@u(c3!cpY!RdHFR3%~Y?zoju6jyhH;DH_~uy;!&_oLIk(BpL@b>L-M>jxiLX z00*@3)dHMHYu}*}X#6MW?X7dEhe!>OVr0BG+B2p_j&`~LldMN{&5L&>5Pcwzz&=GPn%Xl41nH^LR};~TQc;36?A`DH_6pvj>t^MDtxC{a)6>c z+`)icJMe^6Q(=roql69>=J7$0RL{T?Z+=X90PAJC%uevbHMT@Ft}W%GwkXp|+b2`rR7|sT%{-_Dz~& ztv~XHRJdpnWzP!c(r9RhVXOzQpqw|G7_P`J@$ouk2^~NyNdwL-Jd6WwAUi7`*Pa}l z0jlo?n0d92VVOGlJ^u#7g|K{I>Z38aA=xYQ4Dv)_6UWKD<17jtU&G`2P%im2;%MY~z*`yRSNy)$_wTm+@-(JDC`PBcF{?otI_L3ZS!G)s zSG6UDb^gFVb0_Hn*Y5~g&s0x-q5e0hD%^#qvvNZ6&dT^z`&3`CuFvO`^?%Y?*35wT z&d*sup@8OCqEQy#tmbDq$Pokg<0mG`@VAnVfNor*@1Hup=iFomQr=z}wkebt=w=zlz%=eN;Flh90xeWc_UjR*n}?@b{pUc z!U;_t_}LFe#B=EPi)y*;DRL9S%izy#sxtk@&cXi2jsM=4(TIGnAa9f*xwL7c0g^1~ z&Rhbj>}L=Y>zIm{%tE8oYG$!(k8Us*H;k<2<#pW2!RY=+uJFB&EB{4U|4*6Yv@=JT zUc-)jEtut#tYant;ZqDXH6y##qTLJ2-`K~`qYp6g1Q|eywI^kw7Yu+;A;E?KU;WqW zL>Vl6m#XO|A3m6}TdhSs+`P#)9b6MFXPK4fsjo}qu4q4ok-IEd{~k{;Q!h7RkbVWi zM|yPU^eO1_GR+x*TQ{Srft&&x6i^qJM0fjC$2N$bGNBcEU}>$WYYegdh_6|VV?MUu z24sTbN2-fxLb&=qCR0kz%knKJeCPYbR1l~ewi*G?)4Z;-8Km-|^gV`7di}Lhejd!u zPSD5yA5ZKbX*&4Ci!QVYf%j;v*VZ~hC`V&Hr^s@DMB>S9TPC3f_3E^CJp(5Zk(w!b zt1JR!a{USxR-Na>Lk#p#FfXc`>&M52D@XIC%trGJA+KOC8O=-8KYPAw-Q+MD0PJYg z$6zmebw4cel${EB?}Lep*DxS^vfPk+P?n3!(R#)A@K%HCQ<>0Ce6iu=k+KK1Wh z$||i#x_zWQeB_%pY}D94ZRe+0Cu@(Qe%%Ws*2dDV zjp(rOfJZfW2t&5TEST+R3*4F!yk}XVTVAX27t9VW%6e&;!Io7E8NwYWwLLrvxx!%3 zf9#b0!E@SjQkm#AmTvP=HHS3|PieeJTjof?Mi-k)>v^&#D){?4kpFMB>ieCKVGY0N zSVnIsGN^nIAOX0Wa#~Jj89Rch78kA0rXE<*?4K*pO(I52-D&O*JMFyv&53N1bv1+; z=WV>eQNKMYE6!&CCul$(sx>=H@=mo?i52#<+CZ1gA!8fr!@Yy$tOTz>Fwt~2l7m^c zMECwCHE228M;kxywMo}ogs%(`;4kxwtXwU7O5IzWUJhGfQf{j{^9~-u82u(klj0yj z9WBR;)MTh+I8F}0mvB1mbt29|hq31=pET*8SVlJx@(uYn&kgx+G9i)T1x}y5lb#2z zEN7x?xW!QS|LUQtq9Y!wf6+47jpGpw_AQ2U_pcs~sA}TT=yNj|Cc`ab*`O{GE%e_2 zY)DP4B;h$;M<{Q{d;d9M4!9smn?ga(k!=>h6Va8QJq-<950?zoQ?ABXeGbpIHKTZB zC2}tZiB~6%q zy`T7$Nn#)n!XS>0-UCQVps(xNx1iRH-twzZ>ubt*upyETu&*BO&h%XUVff2lr^zGw zlcHuFZ)oC-#Yz+Ut)Ik5RpBmrV*=XI=qCm>TKwOyCOycc|%5=1qykWHQCkivp z_@RIz$!V2nD)f%(D4Ek+&6m;&kkKW#E_5LP*Vf`ne1eQu0g^QKs__~bTcHoi%Oypg&<8zu9 zbi?R=P*|j9P0Z$IkuzY9`ev?5zcY==!6!_x*4+b5?qBfq#%x>Bu>F z;P4ci-K!14I$xwU1PeShYzIGTaQeM|YgfIScnZPP$l9$IuG1OtRY81T-f%D0SMSWK zG{;KFS4YM*ARMf`kJp4@f!0ifJKFCgX^&5=o(zY6nXScy<|QC!Nz_mE4C6J3yd@2p z(EJHQLYT!U8Q-@QV`7}Nm`y2)mZj#A*M+gYM|%3eWHqtgfM(MVc(vJh>lcYuraw}* zHXSN@4r1rG&7>%ygJeeJaDiS0?1SZ``m&g&kVRI!v69~8Y?RE-hX;Fmdwl~zi|rua zA&Hj6Lq&`ip=rCZ=zzf8csh!04Vuja+oK*gvP6F;dYNb)W;4*2HzrZ_SC`6wsRzr;%P<0G67&0)Wy_SIBfu zA^mE(Ab?p{#bxT6Nl(EC%}v!s^7zH$ACoF&=SuLYyG$im9SfXlF!+e@08n=V2p2Vh z3_f!Q?So`n|L_w;Cw}-zunRxDxGI+E`ww7*{P6Qn&--YJ{B+l2`mIr225Bkan*k|N zd;qZp0{POhf?u%{9ywvUwE(w32s$O@iJJ(wkIOkNe7S(g3c~*cPr`F>8U$l9y0=51 zC1PIbXzifGQtUk1QrN8j9XSGi18Wl!6-m!XsM)^bfYQpN}_Rs`82Q|S8tup z+)1XNtXks9p$$XHo47V~e|{!4H7Ay#oSKT9h}&ZCWcWl75x61Rnf`*ul=ZHur$2nh zn4z?B++W|4fY-Qw0*ps;*gk6dgn=V9SK>Ov?qKkaPx&uEqS}X@L;SkOvnt6=0z*^W zc3Ul|0@?-;NkiZ;5O531I-DnD#mTMIoziq_;{ZF%wa;AFD4{k4;fyAPLeVC3)oSEhiN@ML7_m#7oB#X+ou^W$D`y$h7R5cs9kcfM>&C@wGpIw_z6B3lL}Sy z1R%QugrQ`Zgmbq8F5raZ%j^PUAJu+)nz?^x9brDG0~%oN&VuVfmVEO07hmr4GXCN| z9Vh$T8jH_(R%H}uAVSR9io2&1iS2r)T+NwGDa_%BON`2SIiDi>1qHiGJb-}N(kX}9 zOcJ}{(5?-1)G-tapN(@B!WLPU_NR=}Sokd#j%6#VNaD6Tq7_QTR0ZGt6ip;@(vvD9 z073+*fbKCU0$^^~F>TA39ARo1)I;a8Jlv3CNK7rUdxVv|1tlcJ$ZH_Y;C+`nF7`*|ac}T()dO1q-cD|QKlNEV zq%eXEom`gHTOCA8lWqI(S}tm2gncGEiI8#4 zLKFg>r=?gg0V&l4zRO9(x4Si=%`7yI;xrSAfEX=k#`1SA@&J&vq^=w3BpFcbZFV(~ zFr3M`lSojbM*`H}0JphHFMWuUf*4bdESpvgo}RAez(u+`eO^@J8v$Y$FER1jAV4sV z`Gybrp{rG&QLMQ~253XFO*!s@z9XpsM;Qz)$I(gpD?qu9hh-vYu!o?h#twE`0-Zt> z^>zI-`CGqfNaI5G(@QfRkB^4aXMj<@hTo9xA*EXY@^si--C+BvGRe|J0<5eSI^3EJ zg!MpramX(dze3{9M7(cc__TTFy~j=9Y0RsBR+yS&utvYl8kQ3Hd<_V0(Btb+z$67& z(TX`8XGc3LdOqEQ$cfk`m@l8~RukRQ4?BJQQ4U)xd_n>^Jva5YU zLbomDTGUoWL~C{{=`F zC_h}(KUQwXzellicu@~`-8rw|yT|jzc?yq*lmoQCJ0rf~=b9jcuqwzPnwWrjve9Gm z>|Woq3};%n2lvVVWA?-&LkGD;WkdP1lNU5K>2-jB#{+_JGpX>9M5EIy3RJDh8599i zF3RZ&A`06t?)^dX3_Kk6A+!DdeVjMRzmD)VB{KKt2yAnnL{Vo6cDyNZy~;C9m6B_O3z z+3((D@(TrP(nj#`KnAQHK~oVF1HvXN54b7_S*NR|LBhd~)F4fMd2n!l)Cth{d2tn< zh=xDXTgmT7KYJG3h+xPuV}GVD@zKc7u7;rFs6czL$S5f}9rvf9OsLGvPr* zHCJhPiWBss>)1UBJHnGjxC=4w-rf6O^drDzoZL2~TkOZNrQ2AvAMKI0zWpw%3W>U| zegB%F>x(P92{5l$kqu9;hQN%n`w7jCcS0d%2R?y)$ep59ZT1<9QJPMA+6B!H}t!Cp;1o4cZ4YXoQ+SF9IDw zmc!v6<2x#lB>N-CNCAxi?xSV|l-GAhknWRi_(q`t($%8mcEt>PYg&q$!{=V|l@^Iya%WgLWk~oC>`tpr`$aUH@P?CCrMxzSMDl&7 z_*wyn=u=R@nN|`)> z6~}i@BH|w>8RMs8=rNze2FzKLs8A+udm*f6kVv$mVlAS1tX$Q7*_7iuflDzh0f4L9hfHUEKf?_uLX1bO1R(#=n09WH_*IAnT8tswNAS?=joi zI$_Yj>1yV#bLdyTx)?dxcXzQXKX>!GUS;*JyN1$y{wSXw9enZS=X+lyJ@*w{I|$Cg zo|Bu{@pasI7=96KYhKJXM8c?I2AH}IB#?GVj&rqbCORRX6cG~8t#4dwF%v^Wuxoy- za!45n;ld=p9(MHI&oz1s1@A!7vGpAE%OKpKO3>|@i;J`Z>jJ!VH;rH^KmPGKWG_Ag z0!9kv3rLJONeG%Fr^r`2?favzM(>^Y=eE*0RO7BA*GwgwpR^>Of&MnfJbD~93kTh? z0IP{0?gLAZ&N8TC3$6>aRi^AQj9o-?DhVr=Amd&(8!4&qhYu_Ld<1?j!0Le_0O1btMg>kj zs(!VYRp}IYw_mdKE#QwhN_ls0{~o8DJmts{O1=I&iWa0WBL08ldf-77#j5y zlEb^=$B&2q&k1VjRB_^%Cz8s&3_&(06^TFs>_$njI6p(DQ5Y@RQE5R)ZYd7x=cu$~ zg(3|VMRK!l4>yw&w!zAarVhob;(QFW2MIhpY-tDo+DW=mYxvyujpmkJNO(?yFaG1j z58qRUYIz@OVyQw4B?nI)V`^ig3HQ?tD+*pJY$zd>58j=?Y@LDK7a_?iwD*7=1N8)F z8O2VL?+xj91osniXWz$X!#h6vay%yi<-+_nkyehzjUF^^t*|<9h=DuSC@E!w4U+Eg z(|-po<+A)1!Z<`h>xeYzA+Zg&;T}tmB#DaW=57+meGDhp8SP)bAcFW!liyu3x?fUi zRf|22>LNIHiHpBb;jvaASlt52ZrBqyT5(>l;Hy0JY~Oq z#GGN3>*g$U>j=~J#=UQt;Yi>z9UPckS(<|q9|9$*`5Y_F@X6gp8U-^Ju9#X2*YL)C zrW=`|`r#4RJu{Q@r*exXVsGYHO}2I3X8zoE`CI@As=L-38KegsV3=1R79cv!_}k~t zBpsT630e}GF3k+fn+xN?dY|my`|_)MeG89`#U&%L#*8xc^)E+sSJ?Pd%mBtYK6^^2 z$(+6y1fX(lMhdjq!|n^FB*!dA_m+P&|Er&rs|O9sq^OFqcA z>NrTY&2T#4zUZvbtiqr7fcBvn3eJCITk@%O35b)uDf#&J6aIv2c>RvhPBk$W@*2>N zo=((RkufLeBG-VfF;27tWC_QdzSi$vQ_hiyey|P+zS39;aBNKtdH{vC2(%PwE>nn? zK{`M(R1QMOH1mcfp+)WLLa%{&>}v(xX~-{$T}~H=^dR2(=hWz_fg3}aY%`6r8^M!FW+|CF4VQAPDg?2%T7FBr_bA9wg|E?RE67BJj{#Pr_LcvJB_LL$ zZfOGY__hU%^2a>Tcz4(kF7kd(&ffE=Fn}NbbmSxzUjtRkYUFthMyn#58@DiI0rEnj zj@3`BXid3griZeRG`E&~pwneOK}spZ^PI47v3%TU z3aP`Zg1Q_HETo{6OJlX*tcUfII|8Y>ykn@>o#GN>;x5W!W*yBOjl&!Wv<;$cuG@A? zxjUE(QIDxsWFSU9(ZRJB@xFK5#$t8qSkGkW$Up&3j-VU!J4}<%mzA|raWWC|hA|s* z;{k$$LWT!?C^QT|>>jqrZ}CMQNY^3Jz)R$JlW65eU}*{^Z)HDQB)#LX&)or=N%Y2Q zTneqCV1vrEUI;b$-5n)&8(NvAD*h9MJ zMN&gREKA;^-%^JJvMgoT|cg5`wJ4`_HtjFrk zwH!-}Mb=GXD+3Ar6zBaW(dPbBpIr^$P;#-L8^=3C!SsNu=N7fY7ZQ?Rh1iZ9p*Sta zVT6s~K^kxicxsDoY{lw=({%3)Pac6;W_st<=tKY2bjSTT&Yqp%3-|Lwf7e|Ab-AiA zfhihvCUyNiRsiH)l^eW&_`gWENenOO5_JQBqrB~&1htD+1?3!w!d^g z^B-O$`+K8348Pp9Q2n#nQhF0Jy6E$iw=1Ab};_xC`9 zXS*S74a1h6VFp%unLv7Y4CWB)=4H6em%f?92v#nN{9kP zEWHuPz8HZB4)2<0DEM?FcAqHP%aq~O`X5ECJNoFj@T)oc0ADOnOCCmpjPNz!DlH&%j*O&`Nrk6z zU74<+Y)76sxFuksSLD8QHP2#a6G+s2RzhONdk5Cr-%0xdS0TC`H`#~56F zGIS}SyjJK(TwT!Y;jHB1hQfImmBJt$*UhIpj)x?h%`@CxZc~)pG)1sen3~m>>7r$K za8^^FRL5qDW4wLVbGwGixkp_K1B^2OdS>M_MFYD-fEMcW3`w}_jvFgE>7uGUFM?d` zSh;G^kId4`!^4hUY*Uo0G3D6!jCy?H_RjcGgjVoM zgN=fmYM{<}^5TW`44uEJ^&g!i3EbmlmKAP5$cp_t28(7hnF`Wg!}@3KeKFp`WlO&^roA^ONAW2>!=SXmhZ7mr&o)liQv3 zs(hbcAj%abvUcR~Us+WqwQLRa_ib5ZT_M-ne!!jw$IRG1ft!JeB8Sf@W9=l4n|0Tr z8{upPO0gbh41t#McUIFafSoE=%f3VpedF4%&n0pS&v@cCECj?uC?c?9?%VyOcagpo zCo@NL?f{K-qn@rNOY|@WH!YYBs+i{#iB))7!}0I%zVUJdBcbwg zaTs!Q1brhM(MQeM-wC=&#dgpG>Q3_KgF{ducLXN zp#&$xXgCr17uPKKvF_q2u}0q^1BA>=;OiF@vb;TNGcr+|x`i8Ps2>A*9;g8Uf?Dg!yCh*5t+3<~9d7YGM321#wkbspg#IjRU*S{WJL zl49dWnE+|KmqNjPuH(b;DeHT}Rnu>c%vWhiwLMtepQmllcWO{x2^JRvo!}?EDIRG> zI!_}1V9d-V4#oZPF0aKUdbPk%ZAX8n+3*}CNHgC~{!tiw^2Dg;<)tKjC4tNGT{)>W zStx?Q)i@hC-q)nI3MaWo!9*%Fq5SBk6@lc2%W`;%82uQB<$ded?oHVYI>~FSwpO}w z^w;NWGl9pZ64gAm$);iQ@aw>BW1Sq^BDX7{T0fGt#La8>jMX-nsqNd$l*pJJ&5yw1 z;3Xo(Aj%cEW?WYJl5KtM?oTqi15f^9%n0iS!DUKfk@U=A^f7B6a8rSEG&-#Vy4^B$ z?5ksa-OiMgs3-rXBkAvKGkyUw=lN-z*T%X>6&(7(8Epq;^t@hUuYwcXNQ5d_2}%js z>R@~@w%nP`Zug;nvMgt_d7$kl2yZhbtQW66{1Ru6jvdUX#3Rz@LwlGh9)Cg4dJT)! z1{(|K{A!*D>U|Pg*yS;|+KiToiuvyF0g1HQ6_PUu1b->MAQ*Chk59|@AF6bkm;Fz7 z^F(4-s%1K3_P`Z>K*%7+zrNaiwfFGV`@4IumanQ;#jCTEJAL~Vfk>HFKK<}3g`Ir* z;nl8d@=f|K{g6#A(moaCj}iOh7bc`|`^-xUDuI8ev)V?H{1-S#f$QbLU4Tr5b^%?L zIi;pT8Bjn-gV*zxF?qdNaRCJ9?lWvkT!insuB0kIb_1o2&Yf>@4Nr&tGZNKVy>Ax2K)r`t4(^%ENGw<%Z!%&B^-FnnnZ#1KxqV9#JsM8--R zgVN}jlE2N%({v6B9mNQ9T!YMi8|qtx`35r+0B>2?t$_XMgy387vpdt~DSi63ZQT0X zAa`nBvQ^ktfL<_sf3ZYdLA)@;y*>Ew@1Hz+b-8o6YsKNyl@sm0snQuqjy!%{BA!qP z{AVP-L6Tzvw5gvM_A>%;(kort6Cz-|+o%H+G($lR0ahQg;td!3P8=BVxR_QzWF8#d8xaWRAoXV;1hFYe@B!^l2B|H7kd}+OE_{?xnbEvs~#7+;G zzS;(l7|<|KA>v-a1fXex=dM5;tgV35Y~z*^fay>q!PeOgG+gGF?oTp#$|sE;_|`Q# zyTQDXn*{vZt)A?uP$3ewt4a|kbG+;Nc1gH*{6n73^M7TChmnGv8{D@SPNI}ZRB9F| z8$?DjXUE!mA9HrB*J{#7)mbwDaBB;3?DbkZMgoXd1G(trruMEHc~N8)GEVfJsO5Ok zVagC64Xn1>pB*lGSMn6`U?&*{K)Abjc8*0Bz&COtss9^Tvg(&I_#RRPz&U;z~D zLr!;vFVasQCd2(83NE-`;355HsuJllnu@U0yKgkj=|+u?XQ4DR$*U~fWjk>ZOwKOd zj9p*lk3ci3cNyQA!fe1Goe07?OeDySddMS;c#tJ&S$(+I6UQvW-Xbhg%zUA9%?yut zBdT?!vEr`QLXv>uo?lg)YLM?h#c?(py5 z-TxwTm-+?KlxrYiuq~Z<@yjodsmyEm`ZbyuU&C^|Cipx6p#gSML&#AR?Y_d0%CGi7 zGQlAPh1|HH4!EUIV?j3i)^e!YK)`7IbA4gxBb1a0n}Tb&T@#w_wUY@qff3LM9-Qd8 zhc=i43>^1`XL(Xq#G3(ilHK4A25UM-So+DFlI}sLuo7ZHNK@AGL@%%rH+I-2R9b=3 zTMdCUI%1!aLR{2CeK7-(TLz_EbaWgb9iaIs&6vICorup>J$&y(dHEae1{qvY;>e!x zj2tD~+wDX21G3#X1oc)=+$G&veVbh&mN(*QxE}U2Y1Qdj_82=Z1h>zE zRN(Xv!|5jdb!#cv1Ri4$3Z@%UD12Kv_M5_NSA{^k(We2b)0=;?Gv~$b(rw>txx0UG z@YR7)6tr|3kaii1LoAl9oxr3u3dd1lY)5h(Z0ImvM+NRuF+%~$9cY1-j!^QorZ&Z-73Yxo}$;oA2{1c~h|24x!@PuSNA+nf zHZB)f4ylRbX1LlG|9TSrao2EwgR(+#$Y(sCSeS!~PIzh$LmW_YTx~%1kP*o7wisXM zO+vw>4JbJfN7~r|@mSXk%L>|2{cC3XX!C5_k#m=*Pa478iq#SUv}$Ft88=jP+ts`7 z1YwGlLY)SBM%h@D#zzygt$_DyRthhD1K&euMbY_VY<|4r%+x(e5!1>eIoIG4ODWPh z0|z^OlM`KWR(hAKUVl`cooTIy#wbSJ5XaQk1fUuO3W{p9d&~fsyDrIDyTa4W!JjLn zdsHcoYBVDdZ*B*Fp);j@pk5#|1OR89YT$p}YKD^#>vx=P#Kt;tstMX0y5xOL*5yd} zolbHm`8(#&G#P#10AHj1PA_6oOR0ix1r|ae43>-)UeyJV`BRkX;a6^?-*v~Dr=9ZbR%Yp+8j1* zB%sk$#L>IwZg#L0f=C`{%oL5;{T}$j6sZh;TD0N(4OPzcHKp2;L&>!k3qn@1TQXluYrfkQxlQi%<1&R@83mQ zlkwgH!Wzs5csI|pm8=*~fi%WHN0N$3f^Gd|yD8w8hyG2aPqEC%mM~<>7O|vE#-WOy z6r5w7#GX%e?Q3Q=6wU(?NO-O(wO{Bw%4tmEz@wbdmnC9AFxCxZebUQDv(Z4mjI=L} zOmB|xPDkwMEGC{tI81bQeF{r2<49gHnNq^^UlqCIpOWWK2b5+4^eV2wT_#jck`o{? z+AXqzNRWc%t6GUvkQ)p<2@O;HSFL=Bn(#-)P-uj4}q`52I` z0Mj4v6V-gIEkXW;#5V-handOB1@$JXb8WHUh6-#85R?LXYIGMS?-!Z@4EGG^v||fq zv#cUnN4`gv9`3exEK_hC5aszw-SM0epw0^OKrzt1$YR8PFdR;7R`eRbpnX?4l*~w} z^eBkcrGnrz1G}>kwPDigMhK{OQ}8S*CK4}>2Q5Cm0u4XI?=sgbT#abCHlggIY9Cr$ zay+Mn$P#7SG7jeqC15rh2!n4hwQ5(7y72r=_#4h1v8ZT0B$WK?+vZYtSSy!R^A2g@1=xFlj%Y8}^vD%)sNrM_ou4xkNQ< zf(uGDE`3l87_Ib?)G-412*~1#OE%WWr;hqDsxO$pSwthojy%hy6ACb1WS8jKjhKvo zX7qZ2p|UBhnIHogT{!8%rD@Z|sP`EUeoPZY@Wi}7$075<7<-DHC**vrG#H-(IoC%> z-08W@?AS{yWKYbpY0Y`C{X0u$-Y+UTwiDcaho(5nk#130F)n0V{NZ2!3(g{j2?zD&QYke<} z1VI~Nf^>t9jvNyA+|{I&n`gmT{P76DDYo_bsEw5|$7&R@HTGu%?vGs$*dXiq8(E>b z8}lHMrLRfxT^4?)#mt}IFK|5oykYwW+SwU^XIL=W*z&GllIf>WRz~ojS+?Muy^c>H z$UEI>@9^+c@}*|JW6vvcT>%!$ z7xqM;AAX~YZB+YFL#7B{_Mv|J&K;C3TR!N=m#(?&98KQWi`(jsq8fz3Xuli@vdiQ7 z222ENID8%9i}lPzJA>l46N16zlZe+uE>rT~Q3h??bD;5%Tr7Gt5M)&0a>3QPHqq}$ z!J%Xgfm)Ll0mKX(wOKb2fXQMi$?&JGC9jEt)}H=(cmWKMTov< zS;>YnrH!4`oZ6Z!Jv0V2Y6<++7!oj~E9(;DC=Pp+AqR6%yCs>IPM)oh*O5!OJwHl( z@vgza>vET=csB_U1x1Tu`I!PEg`Zg)hp6<@1Ol}%FC+JfiYX>AeJjkAKp&&eFRRQ0 z!he>(kJ?jw&K%r;30j1-kWC z8V!23+}lllS`|k0LJ9wn97BM~y@X&xh_eEGQSk6dXXN{L>gYJ6xLMWW$8Ooyo}31M z)BhjBITY7SAga{ey#CSG`@*%e05rWonLJ`_23=CFeWVyntuBI=-;gg1-=RH0>ZrYW zE)l?MyJgaNfEj1f5C+>~=#T&az>3@AB@9Du~&o~lsQXgGCr zfB`obS0GbEB6i`kdSvb-=8--3qAXF!)c74Jmsb4c4IGhNPImKI9?$)KXiKm;-B;(~ z^CkSI=WmmURJHJbCqn<^)>B@qp{)RLR?@@U4J1HO0Ye2HSp$_We5yzxh?9RrfjrFv z?FY`#GaSj>^Z6BcjBbyaE$81~w=h+q{gEhISubxSX$`VvKN7#)mUnH$D-LzF^C5Vi za@@wTUxFn?Hdl$cJRK*ix9ZPwjvHdDosD@_+?&y8 zB;bf?1-52@LGDtIyFlj9xtE-7-7X;gn*!ForY^q*pL>LDI=FX$ofcit$h+WSohWwE z8y@XLa;p(~Cec^0F@O#r6Oqt1fhF-^A}BXf#I~_zmXvM^yr+$gyXFw(FZ*FZce8@O zpR7=c7$LyG8g#ziC!c?{zduMm`EvjB`|dyc`v+g%#s7ZsIcJ-pq^Wkp_>4K5CIUXu z2H_p4NjwRQPNC7XsIbtz3!TU(_ID#MH z6>vQzoMar8NB0Nwkz}nn#*a?GPuk`?(nLNRhu0j?-#4qs8<~M@^?zR@IEOTwYyKT~ z`xtuf?}u?*RdU^~Xz+I;S{u$$p^)YU5W1d3JPr}ut#1iA9cq#iTFLr@WR3WL`yqH8 z4yka$2Kq@$`XO7nT&L-D3M@h>2Ses2yzi-3d>Uwf{zxa`su##^{-{XiC*rjWCskEI z1qh0l(XWfMe6|W6!*k3apV!}LN4N{LryEdFSig2c1xQi6KT<20K!I4KI0~6lxl7In&b5%Nzq^104{6E|dQohu?584qRZ0 zlfujg?}Sxw3N_J!-0RM&<_FqC|FC0xg%LxTyq?r-$X2h$9 zTkxj$C-XGF@E!ohaZ#kD08B>1?MBN`LGPa6a)iJMaC>QNnh_{D^{E9}8VJ`i0ERK) zTOC4MAvf{&xTH}zAA1w2Ls8f1qifig#BrVlB;KA2PlhRiIZhN^J+0T6q`&38w#D1` z|DK)k4Far@3&km=tm8Q#@j{vZ|G|B-VfoiCIq>A|%TAIDrf)X-uE15WTIrg1{F)-7 z>5#*Y5UC4YIVM*Fj7ma*jEN47&Rtj~I0P4O1v~rkyfz56OYeNc`Y(bLqBPSo>M2(` z6mQX#CfuXrv_%BS(k?}#7K*-Rw5>}<<>F=Ir!7lIZ|w5PH<4;v%E|JnGN+}kv}>Y^WQxph!mS^*+1hlzxVN`N~ zzNnF2p5CruSXy3=Y^z7H@}&{D%%DgnoS(oTCK_8Fn&>>FWh_>pnH=i% z40Y94g{x;N#yo_hLIpy#S`ad^KsQq*aPge1fy z!3IbTiS^xI?Xh+hKuSq>-+SJBeb$LZpipz|+T(8%T5u|tv^ZsgCIBN3IgGFv|Ju1`NoNfs7j@2ums})*^H-{)KFxL6R&`lw}aU@Dh zG`V5BCQqJqh|%c8M)9;B<>JQ`-;h33Y|nr-oWi`7ikDCp81{f}@?u}|dTY_Q0{`S4 zG`$+TwN<~_sWYrQbuDk|vg9sjr$_v#*D~IjYiJ(kV=tD^A$GLKDNfl_Gd)LZMU$z` zW^oF1zj<}Q3;btP9zmKKOkt%?kj7XbC&MxptiCT+Ftz?XdH?ooqDC~LQP@q&YkpR& zrm(qr&fKA@R;U!Kz@iM=G|h+s*Tu;aAS{zHqb~T2uTZZzkYTK_TvM`&piz7H;L zn!KSSRvcEI?E~iN^e*nO2f%F;-Se?ZLHoww@Yq&pUAv<+t?tB6Gst-dac~N3*70s} zIHWG-sX%rGu~oEAtPRNWF>c`#4CxSVs(E?_Y{uu!fxn)hkrAv7D(SZJE8gWgoL+0di# zZqSjzIUyEoh5YFoAJGG7#CSrYJ`q)wP0t%xbpd2g*z^VVkQ^tQJ9akY;sisr)dGMpDl6x2nbdQdm69Kd|ge!C< zsWEUCSvFJ4Ecy~1rxWsZn5@7J%ZNxegtv1Gm%*ePIt4~t-Wofg4Mx!&5@|71d6FJG zVupsg@`^mEkR!c7pahuQmS=0%?=#$5v>wEGdZHJDr!`*(WY@7Ijo4)+Y3q;tZ-JVt zG5E_I;|*jH0~0ay!;i;X3NR6Q#dyp(Ysvak-U@W@5>J9d=d6{@N>&Ne;EP0bz&rjq zjGX@LdS#v_2|oseTfI4pliID(x;2dwd4R*0>kefNnU!ck)G>`YUp&3-{G^RrE6XO5 zhsFldwoC+sX(S4QSogXUHN7W-OyGxPJ6x4xN{UhWjy^}}o~*3PoV-_HCls8({O&xv zxC`dS3wJVF8rni zWbkayZf|lkF-%&tVf}IV-km_lemZKHgKA4c1+4kDm`l`9{pk2}UZcr$lhn>1FKLP~ z>+WRF7U+dF9~U$Aa90%%o)gSNO#^VBe85lkgF~y2-QE7u)$SJOq9dqah~Aqo;fS5& zmvFp@pRO5KB<_dRGy$;zpl^w$eEII}13Bes<+I|zk%eh`_2TXG4+PZrZ8|?)LCEvh zpplrLw$?gu>~3#A82<3GUw7o_!>jEF4|awC&)z4Ly#6s&h$x+{HCG;>PHbVi0*GFR z2uNGd-FtQVFtX4nSfcKMS1+@{U9VpFLq1#KzEzz8WCOO`dM&pAD!?U!Z$Og$QEH@h zp2Qe@UUbFaZ?rS&>)0qckQ4M)#1{U+e%2@H5B9W?OEq0>T9!Z9=M5|TFLZuAlXR_Z zHw{u%sc+`v=?alhr)bHU6(W)m-O2Gi(3Sr!D0ILHzxC*Ie0s<9fugn`N{#DjI$gRi z)#{6vdRFQ0F^aB%VVI-L4~iAwVfe?(a%yXuWXm+4>QC(S_h)J4E1J0y_6vYc_%ZnP z-}d|@AaG_|b7k|FU2p67wV|fk?LN%oB7>*h_6ca9Z0l z{w^d50|ySCa~iB=EDuz|0DUPuq8Q@5gIE+N$**L=G-b@Q_{E4H@apYFPC34lY?j|a z76!C$d&w^TJlHb2J?BlhdLj5P=M*p z)fT6{uWKVVDlzso+NRN$0)jpzm3CEN2Zp4Asb?{fux!2GLCraU zqhbhP(YOb!D+v9vhg`w)ckRDgf_z+996O@#)>f)h>? zpH6L}IA4_L*DU9xg^r@6+yrkf%8!fWoch2&s4J+tqzBjs`Fpi=^|Tsfy~hgE$q%Xw z^2Pcwy2&k);>5`!d!R`i)nGY68$ZieGvvS*L-{$(t7?^1L%N`!<&*t~kGFRpJt1&c zvKBaw1G#WS*CbVtt1{{2OA3r6^J;-`!!MxT%x9%fAu-)_+8xw*4c~W1EOa>_a|iyw ziPATYjQIOeJ~A_C-pYr5PTQ@30s+_81L0^B;ekR-c;cPszJ%i=;ne&qg$~)xw#h;Fmq?7*gB&V+q+X;jhvjL$OTsXQOH-$2i;41h@&V!(9vBL4tFH2CWAtH*9$4%H9q3j zySyPxM}10yw-Teh2|6;W+O4lg$+rn}Nc<4e)0B12aeY<>Sr17YIY!PSOvt7WIM-Y; z&;BzlaL6|`a&oe<5v@MJYV0Y>fa0xUnsS1k2qjPd+&Ft%*i<=7iG=1x(V;O0Q&ibr z%O9N}4lt{T0g*KZ0uCU6ZBB`GoeeMvBo?q4kXLqH(>P!NC-Wl% zp?hn<<8^?!O^CS`%6LO|#YU)*8nkN!3~7@j5{7(hYj`ios;Rra`Wzwy`P2K;Yz|1P zoX<1U>-{ueo~@1%aGSo8fB0&Du)F)TwN+k%?(6`w?+m}}Ji7x(_@9medw%)}^0rJq zot2;R+36>AnEM1yf}cPr{{+B)vuxfceuwD)+h{iH zC9fu@S+cVWzf2~GH*;5Pi0_DLE3?z=GQkXZ6&iNky|#js?iKK(8K%w!s{ur%Mw8@j zlsR};%yMv=bc_<-I&@@$&h>^Pdhs_50mV@ZjjDBl!C(SK{;GDe=IN$p{fBDWf3znSgHx zY3UO}DnOx_Zd!yb%q|kRy1irCES={I&}6wEL?p#P$H|T8%-~V7PP2%vfNiMXWt6mT zZY&DG0_^NK!CopIX&Ij$2r4X%6K;^@PSBYsF_9Y~Waxl_w*jJHo2=jl**d_wCRF_Q zUz(sx?cYy~hL`FN(#LHE%jeWNFd}_7Zi^11QM!9qbeQ>jlI@t@PPSpOFygGq1Y} zqn#M=N#2mNGf1E}PEyU!LA)fCMnNU>*kjppJZMG!k_s*cRvh79rN`E%iTv%k+@2JA zfze{2N&!0VM@@wlf=nI{{Ai6wt((xYO!TE&n;N2&2ib@d z3^w|U(ijaWp;knw9Ba}gxy9P$#ae+J0z)w?^4AIhuNzim6|M*ttgXn(uSksYdF{6x zt3k9Hvu0X>W|u^-m`k`4K~e_}A=50wpiDFr*@+@=;CgO64?<(1|FW+!#a@&^52xrg zTy_|q0it@vcJ&}H5P~36Y8_3&1GgH*MU%#H5RreP8tiiqiqR%te&c$;sXd{){)$Aq zaF8`fd#hYn#*7pgDM>ZKW?MGs``0uW^aX{%phF8miif!n8i#;>gZ8;35o+762Z@OS zp94-3v=!zknH00Pa9eat0yx5i=%J_%3`v+ClxD$QE=xq5zH+xUDqhgv)D47De%!@5 zPM0Fw9v)es37a9TN9s+Jmeiey5ArvR7y;318AE+{`7C3J?+VEdH3b%~*J3X!!p$KZ z9)0*m12{3S-0L{Fkyrc&Oq3%TtI)4NQ&W*nj#(Gkv^}6llD*Jpoj1*q*GI>7@+*o^ zXL;jX-8D4(haj{xq`=Zm?RYiX&JvXwx#*a=isS`OV{i0AZnK_*)0_QMi|wfnB_5Fw zPm6X$J~0+N1FJ#7;{*-povszp{9c3t8+M@;S9pdcor+037p1}F+H_pl%Yoz3vr=-> zv9oP2I153mq>5jkHj-pHdFiuLig%z*U}F19&_e+d8744KvK#|9fFl;BlpJ75|5#yO z0qLT0gUf=0J5>9AOp#I4KOBUkCs9^LNj#|c$t-ni5$8^{c@ldeQ^||z4=_+5PA=$k z`v%}z>RqXmA-Z13a^@t3Y{p-JI~v6GvEG*kah##t1#TvQhXIa`s|9~>oS|RK%u!g> z3kS*N##xC+w#t{3&=JrQo@_tf?hY&hMgx0*?o0b72ci!Q$dPYTBBTrje#9?Y0>EZFv~&Pq;KpDN z6u0iwWCC8ZAV;|`UsIgJ?M+U9HgMH5YXkNuYv@JDFD8_lVpdF6B+qMI2w{wzl%pii z|JU;$9q$F%Dk%aL9NRAtI;C9Ab+%pmn39OnLQ6#!%<*SP_xjfo-39Jo-{!?zY}}$L zY(=I0pn9f|Tar0K)KfKc!X(3Ak*tj`+Y;Vwzzr;jNfZXM<)nT}G)q(H(*_SXjvB&` zy&ea%T6Yb5mD~upWo2Z4{^AUd7S+-#Wj{J<<`W5tfM8R?8|+|3ccJvxz7|#+P_px$ zN8a<<;%WFM6*7jQvA>2rB4h^AZgIG7j2sjyQ*ru8RI|iONY=Gp|5%lALbWazwn>}G z*c^|odiLNOh~;&QkGyG>)g7F!m8##XEu<S-c^EacYWf;z~6y~Nb^2;%#527X2$AT7xT#`l}n&ZkPrB7w;i+EmH-D3R4nQ#U3suuWiMGI z$Klv0;&^|FGOl^|#dBbPxz&xQWUD@}!B6vv&U3T&>X!4k)u5}q<#aNwxA#h187th) zj<9QRt6b@uc3GH!eaovwqmetAd3#No^?(c{cld<618G;LPC>oUr79iawzH)Xqv4q+ zV|*RNq|8z(GGLoXqMH$ki8N{U7k{;J&Ub9WUv1W&Xtx3-r5{7ex*(fGfZZ+WPx0lU z*Xw%Md;^20M`jQwCWth#&1C}U%^*lT;-l8)H&FS=2T)=dV0Gq*@OXtlMu>=>G}Lsr zLetY(MsP_@Jk*T{?CAww4y53z^rjuuO##{|ICV_&|XJiIY-`M0`uN> zx@&v}EOcC*acOwG=J``|s3~~JOCzEbjIiv82n&ECmgqHL!z&OV#8ppf0Tr6ATeOIg zM^!H()B&mdHx4_17HTqFGmx-h64=v?2F5(Qc^|>rIg$1MqZ2^-j<3zZ|G=EoCAqEWd2_e%_%-zu!|?xSb#yRyXY@l(akGt`M%vLF!^G0~CZ>e~|JI7* zCQ!OT1Q*qrz$DHbxh<~%4dr8?fol-ZX@ufb)wP;DO!NWfE02?kT7#Bmr3>j+yB%`8 zp+8x(WP3}QHk3p5Be`T>!%b)$qwqbZpRZNC-_V$^C~ROyiFH}p#EK^ zr)Z6*1Zq-}^Rl6C@Ce+MKocG+U=5EbW>sGOKwT7AP!SpON?3voh7~$?0ktqmP=j-8 zvu0NT{7Q{D+(2AH*8esnWXmM3)OCs&n^+j&ftiG!Z-hnmRj?ri%vh3Y+^5(*VGBqC z*`bOFGfrbnUBJ1dvD76S1(^5K|K!eyluzQkBU|Aku<`p6!L`|<5*2!ZJ1=A5sHt=MWd{nBe9Hf$m0 z#Ch*f_&&9*JCJ^h64h{k0V83uifLe!n8wiHI~FV8b!fMageD(liyPsf7$t4`6Qfs% zy~L;dH$1kygL^~#mVfb_xSBR{H}IIp;%2}-HTxxsfgyBg)zjHPn3K5xQinJvp%5k% zpY*;IWWhNwsAo!~YPo~a#JtZ|He&%?!_ENE1)8M;x!KK_c)`w_dSPVGYo71&xVXf3(V~s3>J{p3B){e-v@6O| zwOXAxrV|mV!1RsCV+BN9=9k&@`=ZKGSN!J$n#zB5uis}=Mra1tL${g8B?i%)K?gle zuOLowOQIvQD}W0o!#X&mEqxFq22(;RuawcBtIS;@69l1NEd|fayZq90;D`^P@s8hB zM)BzSIL(%DO%QRL^`?Y9vx4M@kdw5CD@LjMyjvxp6r2s^<-LHjH)pJ zq(*%irK@Ej&D%chm~P8R{;s)hz~3HPE;p ze6iO+;|coCpin{fz%d}fR*wI0r5Hg@9O)*GD9kB17_RunU9AKh;%sBWbcMV1;m^UlhqfG`jG^PzM34tq9&|SpeGi2RSQp?KPyz=V2D$NKu)PNYC3`yJ z!a-B4w;~4$@AJ|y>KXkNsxRKA%d-KNM)tqTUQdg3X$y-(D+(tO4eBLLyAQplgLUX7 zwS(1LM{aud+5sXbOa?JJyd>^YccX6;%S`idLqYMB&*yn{=0v-aTrQ{iEQfo!gW#hS zn%zyZ`FUOzb3S8wOVa*Z69LnNc)>v1yy22~>QqwEaTPA@W8$>a_6{!Fxn*+eyHh=dvnUv`XVa1JFK^9JY zQNapboFb5n`>U7@KXdnQF+I;Fecf}RuU<%gI+(UVH4>~kr)0M9LZn{tlBT6I-gxib z2A&-=mc8n4wCydLfqgng#0=u$m!qk#|qi5Y%apC5j$C&BP*-SWea9a!s`ik~$q ze`=zEdn#M`*Ebm4L{pVk5?phdVRk8K;XWM15&b}SSx=Ci5c`*G`At!Ld~<>f>jW>L z*K_FYQZqtIn;BXLyCWToix?%|9xzIgBYZjaqxT;TybJYp;_ zssf{YN})ZBx`N#ROl4X?Xj7oB2%q0apGsySui*iDF)){DN1Fwt9iIP<06PquLx2~c z&O#&BB`OvVllBkU@yC1#%E!0Gukg>TYGVW;no^W^+sqFWVFqwWH)%!rJtAas9JBX2 zOcQ$DUr-Me3it{lzI228t>OSD>qgds*@oGv&_7ameX+_L!V zVxbnl`}ih8Z3or3nJQyImHhL0zt30Hoa#5lN#A{68dq0OED4d^eriKQ^PEdx`)FmI zyF~%~F{Y63bINZq$W#^0c*9i44BN0~N5C8Alwwwqy6?v|tChmt>1K)Twa#&OYT-~E zJa~kH%?)!9PQkU(frj?L7TLTtAmRioxb^@qj#6H@`Jx<;CkZS1=%~%%PJ^iBa>=Rp zFklJ4A{(WEYY56lf1FLHZLsI)gA^^9ZI6Q@{_4^cT^HU}eF7-Vur7mH@vD>7Q@r1^ zdH=5;hVGQC1Gi_WSVE zt>XvB&BBpPRP|}}9lhi{mo$a$`B^@3q_5qR0e~?K)S>_{iIshapn?ZwID+ZcR*rwfE}duJt$@=I{*Fzw)#?~B zl`jqCKl-$g-ZtsnANIS#9w4Z7HDE5}7DN9XV7w)EIdU^X}%^hhs-`G``)F?8*~)c_0x>P+12k4PZg!eO%O z_IMwhiDm3=UvDE{c3*QZyJ8RMM79@~ZT5p?6TJ;tava`UC%jLePr&(NW_*5CJBX^6 zo;wj=qgL>1_(AGXFMIt>4mKLUQJm+miH}Ftr=2`=6m&%XCr)%PQ*lOd9Y8NWAq|DP8aFKjgP>iwAsLb@JBi&@Hcl-Wdl2VhPMaIUasSYvG}HL9+AOD zZ0b}GILhQ$^VI0{qR~Oy(O}jMos!z)J^?$6>~wo=@4j9^enHTaLcm%Ar|ctW)WD_% z@#q(MmDR#UXh;A1`m%M?;u|e}M|Ar4Wy#!M^uAl$74C(K0@D?V^E^1#v&$XHv zgHcZwx)=7cM>*$YiYYQ;H6!mX6eQ#Fx-Og&iroLORZKS1GABE@1M$Z=%cq@|Mo_e= z|FAH6>ol|S`r7dGaF-f2CC*jf(>wf=PB#9zJ$U5L~+*X&k+wBm`3x^Qi_ov+7cO`YT z;kKvIDnIoB*k2+!UjGRjoG$xH+)!#tNzt<&NT(t1DP@L+3_`_4j~oO}GH~Kkojd!8 zqC0^bH|3w)-R-ij>@|4N*}0?qvhItInBxp(d6MnjY~eG?T(ru3k|J&FJ1V*F6=XHt ze+Oq4Ck16cbHw(OxFYg4Z6qFCu&p2~LM4b)dSc!-06n%X%YczxA8~*JjksAxsUB*h z&B<*4zjj{sA`_Ii?LT_h+Oi@kq}hZMO|IqhKB^u?Bj<$43=EIxr3WFqJybm{Kq4(6 zGl#%g#mdQZN-?B3{~~P>KY|~Skxb9i9J9#u)~`06$;*5O zpeH@ZC6Cg)RL{b2)LdBq}he6RzL>L^0 zO5%r|y!kJw9;)_&Xk%eLT%B|56qg@v{$SWj_BHJXPhQeR}G4$aBDr zjGn!~UNk>_HJ>!UK<+qx^*-zzKWeDMJ*`y$_ro`}P8aogppzUtSe&Kv%09Ztoj4Ud zA!}doq$pPHxmh9CSTTgpKsi&uEK!N!Q7&fsIzB7#&udgKYhI$7>_ug3JuWA3f27L;Aa9d`d|=)87wH_)DgFsG z-ERl7@sh^DQL}_PXDBf4ryTHn(6biO*#nMnpLOX2qro)8B#!~ZMv)3P(l|EfIvQe@bFPLh`X%CTe5>rvq^+qN3tab zP@154hM`3Ursl-OkuqXye~l(+$Zho5)7=M;DTI&4*QTzvLoHymMKRD9jyEVu*!%+_ zW=sd%D0gNE$@wT*WCHz)q$zJPqnj?qO4jC9$so8Y2!%rKb@5$vDg zH(}d*8Y?-=4$eT_G+UYkCKhLXuR)EI*u#WM%yei`M5@;gvPe)L^vnuu&2NdnBx1J{RmE+EXBH{v(k{)(uQA2;)33 zlggFYZ6F;6zqM(Z*&V6!j(i<^-D+rNfF=}Anh6f}F`Th^p?M0)haVihig`a$0SL}n z=_ib)#w~ICG?*-o0~gXo6J_#fu;6^-M1@(W{QAEO*Ht<)*_`K_GUHBKB zMMhpj-inmwjj{5FN&Ads(w;hV9N94T+}Iw1Aa=ji{d>vgxKWGJ3uj=BE(JCP^HM%e z+3`u}>*HI@=O+almhw4zGfgp44~;`JsR?|x9r>B9Fx@OT3#pb%oVAF66V*fY&2ct& zJ9-)14aOyl$>#<|F>}lf$a5UB_{1a59iZBj)FtRE#6_^Pa6h7z&<33S84ZV8ft&HK z*(T#v&Ydp1D6i(I%`rZ3?9x1_ch1I?>)ZFMIU)%)HbbJkRrRCLtsm!e6L$`#&$28^ zZka{$wW@LzzBdoBE4c%=U~P2Ak^ft-0TNEv^!9dBg+Nj8Io#;K=j&_Dv|BZukeZr< zRfFvL)$?rYdb=#qc90do9gc~u4|n9eqUd#eMoRZH1l9$GPnu7SPjs_wm)0!^?)iFk zdU|C|t-;%lhft3@L$(<8M%3>A>xShAPoM4((0JV<+|YMx2fm#p_}^j+b~7UW68pUB zyp7jb1*~D9W*ZRmfc(fKmA@_k{m@Okt;z)J!xC6?)E&u~9UZp>R68vx_!ubDz2MqT zRYpBYKhi2%^FH$$Yk$;^a?ZYS4`7oi1s+th+Un{omNZ`5Ps zDW`@%KuZ!yCM?CFWJT7ZjDSQIglwj^rCQ>0Le>D#w$_&5Y0xhQ+7QpY5OawHH(39Z zIQh6|SE-QeK9>@vmAW2@(yyD2T>9IAt&VkV`Rx5l|Vrd(QrKk z-ZS=Wa%@`;VK)gnd^@I{${ty8dhhCNpy#BQX4EwwM?Vcp*p?oqPJi{$J>5Uq=F}^} z!Ibv=v14xyZoa`c^XByd6&0q^hz|YU4WP-9jwR4--3EWLW`PRQiLs-+<5Ouv%rHzN zfMYa(YlyQp$ScNMGXa;Ic{)0Eke8T3nF3755Ogq`N3er4Kt-hZCs@p*MmnqSYd6oH zO;n`85R3YvH<>O1+~!*RuAk3QtC^QFQNEE8u!i0Dl_XJ@4A1Hld2o?sx{jQXu!nS~ z2N|{8e^QM4!x@u6r0jye8@O`I0@JU8uzj0qz`=osf>pQ)$A4X?qAH2xICjXL^c4WN zji@A|&gBiF!TM%5tFjTLQ51GM>kFnW zelCtI6s)S&RDDJp*l5!%>UdPG&XX<4JuFui@j;@?EyADUHYYu8>^7bD$jH13gUN~< zFw|m*UlbLsEnZT=${r?m0~`^5%zf*vsrp``1-5(1&YEH^VNtEwprJclm-up;ZNo!@ zt18TN(A+&HjM(I8)XP)eWoDB2xWrude|Dq}u0BVW5y z;&1A}%dP7=*+5DZP?4yB{e+q%N+a!#n$&Ykq*dl_E3*nuy-8`9296uXz0EP|oO}=s zmAM8plXC}`>Ty-#V2X-uDoGNBhvd+9P!~sfXJf|1(S>drcNo*1jLBNykP9>YV0dm! zO6n_N0VOEubAbmC$m?nj1+wo`iX=}t)|DAPa&UZ5f|LvRiQqZsSYe=ZjN4>=v$!ru zMeFK-$ybR1C1nN8MZ+(*z^WZAin<({HqhB6bT(z|{S18#I51yWs8>>5O;&eTK?%+3A9Kv+iJ+lYpc}T}p5jP!F;k zm_p3WlG&@G?QY+*FA*4C)Tb84g>a_RG;B}Cg^SL zIU{gsP#DA-FuAB~`+Od^>W3||)0wZj=A3rp5il3IZVS=haEILIzlkr}tHtxJB@z3+ zk}$%H0S#j44OEfinV;ulw-qqd7rd$g^cg@o)lUv~G9m=UO7beE*Q`7}Kz6P99cwGx zV5;?meC;ZR^sk;<;kL7*6BBS2)Gu&#OoQZli%{fRFnd&8pk%+c-1Y!+^N=F1sNnTI z`t|)AS8$l@ay|ZjYh#sd+q09)`bCL1DXr?){s<>u?hKwJC_h>6C?l^j5M%y za`_!F4*A^e=u<~eKuuqsTtXui#qB>EEsN9BY4!>1QlHN9N!I-wgZ2Rq#g+KyDqCf^ zz@HC;5P1MbT46N9Z!AXpR_rn>Ob10>;6Wu|cemIK3(C&h&&6r?b*TstfabHlOh@}s zXK(mBw+#>SSyo`4J1*Qa)Cv9n)vk$GrGM$JypNsko`=5B<~=ZRbu}NKmBqYRRlsP# zeTf-Q?PG%_hF`sgb)l(i=w>7|;37u(nXWAgfct`ryo4C0IaZAVUklv~=imaJ`OBR$ z8)HZChIYgqVFP4rHgIqL`m)0wp!po5(0^c~mcX8!<>Rv;QM}^}N@VSlGsajze(;(j z5#F#tltS7WH4QhfhCJ;+2Pckw0HhvK33;R|;MLUeCH!(1N!!PKfnNCuQX}~GJ#+-* zS2KkDa6}9fu(vKezuzzcTR3{M-W$c$p3K6bS18@5nL=76?@aKqe@U#ePqN<7Dt%Y<#PJSDpT)5% zDW;PXC)LoGq?eJz*DuM0t{5p2ISLai{u9i-p>v;jSLj1Ly>3ESL4rY?Wqzuv!@9FJ zJQc#8)b8@U`Uc-Y27-KkP-dAo2U7+fhJevzdd4}ZeR2tRl7}|^FSv^OaJUyF#3(5~ z%YQ+E1F*ahy%- z7NpZ6+fw|{0_q2GJa?k{Re#D2bb=feBCUrX-M^303(VJm;(luQ@Fd#I*|{!b;c5vW zg^+l$M6V2YUcg*JsFZjDq!?Ol*Vn&Qo2P!?q~(wVy!a|y1RIpNwbd|j;rN3DM}q%` z;Lfm2zvyRlcIwk zum%N!dg<)>MY9GWtkE5JJ<#TFy$~9s2MqB5|1p!P2lJ>P1Ate(lSlfl8o!KCe}fA! z81eIYULSPt=`Lz>!0q8NDW9loU`AC54b(@s`fiy2nw814s z6HlX3;T`(tc4Qmw2?g_?_}Jg*6C~2zHMq_1GtgGJGtd@K=b-vM^>T?%TK!0{g)#i{+GLrIJ031u3<`z)4(S;;T!sJ)mCK?%<#DJ`cb0rPA4peE5uJV`?73OunC zQZw3!*KwHK2Rxt*pF$4pgeuAmZB-=y7y#4gI39Y`>HY)q&_UR0hUn(3`=#>TsJp5o zbaIa$pKl&Uq$G_65uSF6_@4QQEUHPJST+-JZsJ~&RqoI%`))?i?BO`MX;Cctu-B7& z!&Ykp{RnHw=4&gEU`s-#Mg3I)K`zYNd;JSAljG$I0TIqTzy!~L6%xb2uD>dnR_LCP zBj3R(R9A+x zxZ^u-j+97gaXtH9qax<}HJizoBcG9`@3x|csu{R$(hfo4*Q^&}jS$9Wrqfr(3kbdZ zKzpUpcO@V(8ph7Zx#yv-T>jIJIUu=U9)6nj)91U+sT)v z9TDTnnCq``BL*MV4xp;1EiEGxxB9pFLr9i+(ukslWW5U8>%AAE`W5Fu!XO4=&pJW9 z0qg-ARnrWmm=^F-6GnjHk@tbw@RU6U3To;9c+$q}FRKasPE@J&4Z zh-ps|Yhc2H%FrAI$yThjtH*Un=JyC?Q|~<@m{`?)^HiO^`ax?ZvZw}Yx2te=>;PSk z&(eJCx|LRE2=qXQB!wW`WK~HDhJWlJ)HN7*3FZ19kg|05;nTm^rtHuXUs(*Bp^wh<|MHQ=4=ufZM=iKE0J zB-We$RabKWjRI(}l-aC>n5J=Px#nzUauqdy+lkoeVXFIxO@2@5aPT~OZVtg_5h)Sf zZon`$T``!8Z;(^ztZ7l(icjLTm~K)w&S`~i;IkaAY|WcIN;FPuL9j?M?%B1ae;lk2 zvRADn1#mNqZK>`^oy{};-R!-K^JXZl0tbj24)tMV>9H;Hjy@cz4>AdkOg~1OD3P2~ z{Z>zIPhCx1#hlgJFr$G>hc%|7Po)*jERWv|DxHOWM?E2vKc3PmQQi!q!GxZAk0{BLN-WMZ1 zv2R*~H|o3cXv8Nwt6NPfqXbg=^lTleWJ~_Ki!AbIHA)mJC+3K)-$8G0BDgzI)Pf-t z0;2;`cShhnn9>}xS?~FI0fH+a9yG9casC+Px;6djX@f`25GxeQ5z~-@zCn^FDYxAq-a{Lb5 zn`_^}LwYS-eN=!EIlCs&C_13c+^+UMX?pQGuD#cIr9-tNvlZbPuK%cUSF|{465ADb zAt`4;QJ)*;BI?X@zwbdl5eFZJ;=I>}puqUbti`O!ok@{7R`nBnfSc36xmk}}D%cn$ z+zYP0nzv4J#L!3F_xOs34K8l&#=*$$=}5}e;;f+3pZ)~@k8V!G<12?Imj<%BGU z?=U{`>b(==isw!)soD_jLBeyn3NRND%oiAp8n}8Y2VuIuwJ7@pkgXB40AMC3=wqM} zcZAXPI_wr9Em99#mW$R$!tqD7$zKHR=WEqCM=i{;xnO)L3>yias!I$3IJrbVvp6|v z#lZ&d884-qDKCq2z^hp?1s-(M7Zkl?aR}|z9F$TVM0CA|p{qhKZaFS@7}mt9ynv6o zp@ty%G0OGgA;O^&y7~La&JNZ6W{CF5{#WQ_<&A+{+8|QehYa!LCzoGfCH^8tFFjmD zC<87GXt&cl5=Lu(*L6=d(kc}xapealRxS>U^ZnybcnT*Odzn!@wJBz!!ufu1Z}$RU z{UCz-B%Ndj#i)L4mxVvN!L8BqR;+Y>B~}G*qdx&MrclQ0-3x(3VF2DhJV@*AmEdp- ze2pSE1DEgkzB7<|6-mXT9e4~pg@S}aVAlZsBNcR`O%#aSeI#_GX_OrDz+cuS<+UIB zm{U~d>?iA;qr5@__=-9%e3Xz=vsh9;Sm``+E<}wtHKM6Ay}!|1oFHc!JcbcDh` zo@x9mL2KBh;aFyT%Lmrh(hCbqyiTOJAb%>vW&JPuDwLK9DWO>W7t=BSWn`bBVjk#p zNpb3;Rga$11Zq=AS4<=@-8f5$4OKV|ZcV=1Hyy`n{ZH@Wukge+Gz8a+Fkbv8%qn1$ zH2pRJS!g1Z0KafY(0k~B=L)~?Cv7jrGVBzJJjS#} zzk6!9u6d#f{r56787Hkh3cm0*BzB7P@;i&ziX+RLBL1$s&fg+3h+#Lix?6VuT&v2} zoV|)=6xKIsbHA)V&~+;|)VU?VnH&U6f4{#M&J-2$JtM$|eG<$RU`#Qal~stpGi(Et zG=9okaZy8ef@6b6Om>tvI!OhHJTn$!bk8c-LZ_9KQ>D)VexL1RR4s=kqp}ShF)q>y zh&jP(ijnkyb|hP!B*<&bTFkuk?((XB=utoqSAgYZD1i5fNO9D-t1UyFDGuDn&q{IN z%VRBHGc!Z;Z1rYL7>QEHq%nxaY^Dt!+g->)10KKzdO!Njg zZy3_r3JT$^V@vycCJCb|P>1Jv;U>?fVe+j+g#+uEjuC&~G8P!RPeTw#s{a7>xS34+ zb|a0jyvgq)1>qd{_#vhVAY)K}Zk&wmo9zKOA6Q*L_roW$YjoU=uWN!%Jg@^4SDfe@ z?p4F2m@R63CYw=rITWSGu^l~eO^d;I!$j>)@_22f)wywosXg1I?}(%V!PR3Ohre-Z zx{u?ca4gTfO}r)cXOJ!y(=zkRn_ zhOeo1c`cRO64JnRh;B!7W}L?U4J#flj`xeZc{u{I4+>Ye2g9iDn%V(%&`>^zWp2Jm z(0)`4x!#L1d&dM*X#>7cipmkgEx|G-%P1DX3`OZlhJd-?sRK12>hX5?q`u4)|z5>3v?D<uTk5&7@#k}1&1q4AW^Y+Z@Dr+sk280y7} zZPtEIRzf_E+n7!$Tpg?w9xK8yJop=b5q!VTHMp&bmmfgRB*21!ECx#8<+A(+qnDDem2QMoSo`qsdlJ){C~xjt`bw1FXM7I(R6Uz7C7fQ2^l-0KIu4&qf4 z^Z8UebBe|dqjUFyOoUG09s)X`39{vkggs41h#6(&eVCkZ9_AvPhdBuS&)xMo2wxju zI8=EfCu91Paw=cmdT5KVN>hP>ey&}_J*dn@I|8%jDTcNhXVZ4h*XiM*Cjgc+!+3R0 zzXQ2=N=OcE67d1+U#7>7=)+b_OG*t3+8yB0oW#bx3ujVr0ZkP6k8i(yS&RiCBLJB2 z2MEuOk2Dx8i*KP%j0=C{lXKYvhpq$zIGRCXC3k_!adj7^3C<5~X&bWtMNj}i*ki+q zh~aY^QrksA6V=V>wCZ`s6u`I{bD%Mq76t8^y%iFj`-}n@0Sm9e;;dx>OV(xp3;G&{ zU)x@a65jAXj%~o*5Kn81!$RhLjQGHF?a!DX2_tSHB&JYvG5EgE{ay`{`BKlGnaPx# zzDPfHQ<7f+99K?Rygrpk6fe?n-GmwR=wea@G!Q3(=;PQmx#henh4YdLSv1K0O{?98 zUbmzCaz3q-*TVbCC~_sxz1Ma}L(1dk+onD>(0|;6tu2*E#f0mLG^WOd{I(x8Ek{F;qFhJ%cMhD6xg;T9D5@VS=^qKRiTn`p7IdR^zAE zoZ%o$UhiKw3EyZ6Z&n@|*8W{oMrZ^;i%Zfnj$Sidm+mb~LDlQV`{eo{>1g&EBtgW4hnjli{G9L-Am z>2ojA4B$mBtgszn*hTV?+wdNPj+Sx_5hlL@6APzBjI9KBAJ#I`rP70yeX@-|Xy8Ma6pHIMUI?gKnn0G%P=72Rhp626^_M`L@l!Djm zBm`jU{=}IaHc8bzJXIX1Hx$>^XAFlYv8&K;C+;n@m3u2{{?gAbb)-gRsO$)P+4Y?Wv%$O#;sUYGLH@H-aP*N1{iN5xFW-}=+q0Tf*0vdlt zP65Z@K<+L@N33%20&oi@-`$`oeYmr;^TqCi2M@fa^kllqCvNcI)`mror^P8KNuLb2 zcZSMTZ~MQb=V>)A^Tl!~{Q@{|I>6?fx?z`j z=DviO*6qi;T_3l`)oze7+EPYA(OE>7Pva0Pgl~TXiYO`4OLn%SSSYB1ztRhYMO7tH zlrC4HyZxoHrl3d)`24KQPB=AG*uCwhOfvnQy_jidV!<&Dj%RFxwahWMuic+OQ`_Td zT2=5A|M-q#T1rlUB|KS%XpaC_7b-Im3DDF*hX8^?paA46U%+F6IY~-@UT)8e{%Q`%wEDm^ zW@tgE+Nk>=AeD)S%Yh8=ElsHGP8TGa$tPfCBMg6<4bZC29lzBI#Y3xDwKgIHL+RSyvl$LG$5j!Wew%S6@;n=kyktk#o#UHcu@>^uy@Ygt-PCtO% z8ggFp@9!CL89yy9-0L~LE2jFlo3^*<0{_GS%&$57Ar`|Nk*_BC61H`_brh$qi+KxV z2xBGPK1Vnz>r8%Xj&vj20%*nQ0>WUu1n-W8>juZwqIeI-zGW{TC#RHYO_=`-984E@ zeMr51cTMDZ-`DO_24ZH5#q;^(1()sASjlDaF`KKf0I zvBsA#fO48W9q0e^Y7fyHoQ66aqQTTW7;3 z)jzvwrml6k@bh||Wn?nJSz4D05FK%7q!NWXUX}QtzY#a--v0WllZ1MNj6hFYL0Y(4 z1V)6(vq9KNeu)&o;A)>HGV(jAoP;^`?gDV*+Q$By@_{!jt^uB*QyG^D?jI zl+o2OC$0~0AULD8-*JeA*f2ez=2hnleN+9%kv6t!q5{3(gC-B@x^H_Z?*G5^pqbA9 zD`$-uubNtBCn}2#N{BK7Lkai)jk}VYSbCda?iimvWGM zWHaUHQ3UJX)SQIuly^)LPJ)O;<;vv~8S+wgnQ|D8Z)j#&YQaX@YUm`32^vfz;mOvI zp79|MuWt+@#us&R6BCg?NZ|5y1kTKHM@)S&mCNf?&Q5<%B7NwA&0hYyqn=dW$5x$8 zbJFwADjSy+&$iMffeKMz8jpir=*OgTkg zwum$IiQk5ZE%=hSr4nd_kpf}ycbc+@EjQ#_SkpJkJ zED>{YLWa7`^kEg9oI&3Zlnp^r5dQ2KKB&@jS7pBJ4m8MCp`MN@=>Yfzfz%36!B~a6 zh0k-!sYRbd3+em{^VM~=UyyB5D-f&zo7<9-n`1}>REq$|6lP^ov)XIG#Gu5l{0+f- z&(C>~%fke?y8i)iw*Y}RMdF4FDZ(p#(XGK;s!2+YQV@a8n2#}!O4La)Vmt$C_bf9m zQiVzZx8uMlx6CF6v=BDYn{h1$jhtbT{~=wBI5?kw9jbSTu9X7 zu_nrLpn*wht7Zw3xX(4_pf(P_T{lxTYTdYsTX@>i=M0)p zuzA4Mw$3!|-N2K0j)`5L4DZ2Nq=T%)p#d>=!i&4)@&Bf({EIlQh))9(Q@1I}si`6i zQak|HWiz>yQ?~+Lp5)Ty$wsVJT4USeTJi;Iik!ZqEV9aRbDo6|@&&)V-~4Hv?>0;f zwP+#I+>_oKA`*Fw#e2p(9}3u>jp|%W7)a?XgkjD5%`}0y25TbaEV;aZcZ zbUA?4gl|F*9NZZr!|{a%!R^R;jfj{FLdt@`_2n5D{gUi*oN?4a=d+!MUp)Dum$-kQ zJbKbKyyON`f|lCo1K4CXi0i0dhw%ORn-8h;D;8()U^){nrK9wPl{B5PkcyX zvztY*N8h}9(toP16|2PrV_>Bd6t&`-pMj;?k(176yN@32bd6xxk!`LYIqHz(vWQE8 zV?RU@r4C9SqzU)J@(l9NgV(;8oI$FYQ+_ReAogpn>JGQ71%%51K1W^}bETFOW((@@ zj>xqSdKd|XO}2xKqCP1VE*L>CjZK7;vD$C>&1j^4UNOF7_e`xnV4hMpKcGkht9=TW z6xIs6iRQSnwgPx;G<|gsX0OAe=&0#3?~@f?eQ2Z|+g%CSJa5#awc@ra!63e+-#DY; zx%VG{{bm|*3j(1BTkq(PS*RoFnG@J_oJAta`~BMl6l{$6jmOkkKaUcSw_7gO`dps8p1R5>rW_ zp9jVx0D=mr6Tnj)jiQ)!O;~HudT9Pu?w)qJPS{=7*<~lh5w`oP=KcL10tza+B{`hX zO%i#>fafE)?Z&_e6ok+-L5#^d4}g%{LZkn0t=nwuTjWFuz56KG(dLkd_J>@oL@a!B zBuMXt9v4wOh6GXuQQq;`V8hkCv?CR7les?N^@Q(*z|m0@vT+>>@Mz^QAzl;}>f;j# zUPtluTP+z4I+x{eNL@4h1Nl-4!rcqJnBNxV;!He}xiJ3o3IAKHmdDdo+5LRT*kj-w zoSq`c!wZl8Y9@teBpXDfJB(crbFK389CIxov~HQ7o`&G2{1!AzVuys`lki$ra_3-_ zFq_$t`ScJNi33SVp8<`1pCWt?r8*WS zl>8KE9qo9j)sJQ*z7gOI4V36UW9`wxz_|t^aXLpmIq{b~iLY=N1i#x$-toVVFkzNi zNK@j+sfr7FwomU4P2`Q6g~DAL&-B!h4tbtk1nmi2fkensbruI0Jf+S#(MyY!EVv@c zalV|T)yGltXD7G-1)Zme3dK3Ut3CH(7hf=y?Xcf8unAr1yt|~N!u^o)Jab=1o_a@{bs5KzIbRTKmWN`{F|^S=(LRVudsKYhK9&-8keC9??A1 zd1AU*d@bGk@cfp<_ z=xHb}=-J|>e1PcRua0bbEAL(<6xr-L5eoQo+$%{p=k zw0e?3#E`qTUcP(V^~!T-%IzP%-NW^<3{ZD%$6XZzcC`Ono?%KNctk^{WrAni>3U-4 z*LmqFvpDwiHg&DEjEjIV?USdHbj923V0Q@hHjL;8N`KSQVT25m%(Y?N_MMOmfpVnb zG&^Esb3$Q)k#Jw}YVpm&0}H|=I}unUvaW49Zfqs}%}E4@mXkaZ6;9KqRI@M+Wb>lN z)Y67Og?!*wL_NYS_FZsK2AyWU!p*Py`cQrz)mj8NN7ESmhQNo#@}+A}yupIK4YW2WaO_7L|KdkBip>jnyUwE{M2=q{;c~?x2d^fn;AO}4RFd^<*_+sbr zcDH3zd9wY23=0@{#|Nal`DzFhtbMs-A^2zh`rSLGIFhdlA#eeq$h~rlMH9ll6DnNU zQ(#nFP#|>1^92+gI2}MCqRta{xd*XIIiHpRJ}OYkC(`$4$35ByvLd%fN;F1G$=xV*ow@ z%i8@1^K-2&sicl5Pi!R%RX%S)EiY1|yw>%46#R>=nuwT!)ze|FK5+As5sF(fH?$3! z7Q$_c9>cn5pn{vpz#JO*wlr#!XoLp8{MN`h#xqI!y<&g8l`ID)%vrjmA-Lzgcu zE(RA5u+InYhwdiqf9pP<_8;_di&w+XsJ1?~fPeStzZgh&)67(ZF^n-^&9I5ZP<{^c zs#;~$5P0-_3RCp(;nOFN9!DXfqT{v7c*feLF^`e}M?kp0wy1u4IC^?X zPMgrE4s@}XSdBt2JO=K)ugK)2Xcoj_z+$ifi^a;~Oj!Gy8=|Cas|iKu)WL~GaLTgE z0>BF{hpU2T*xJhP=qEn2Wif8JQfY;F+Isc8C0lD7>=6(VwL)p0(S+YMxlor`T22s| z`9D8=aR0c)6g1xB8)m^z0Dajo<53FF^%LfM6iW(

S}GX)%@*JB)5BPxi>bGB4(+ z*bBgu(ei@muqgcve|k1#gAcIZWl>dqiF?1CO%YfCl&BJM3pfJ+d}EJ}zeS*O_m$eW z@Qnu%$DeoB25>SrdR+(a3@|6q8$uj)3dTNo?WorWa#=*-AfKN@6aZss!cBOEO~II8 z+`uyMtU22HJyZeU&D}v%n`q|RV2>EOuQ{gH5hTzkd3zI8Y_*ae${F6dS#bY=q|Cfx z_4U<3dP+_WZEUs7%CZ38xJJ-teCdk5;gPvj7@@DPilsib71!XJ4Q=k}ahc*30DicK zKOLblt$gwR+t=io`|PLr@Dv_ZtK(S?Hd#<3RAQB*r;H}_DW9dM*(Y=}`E=q)uD}cN zw>P5_eax;-vw0U$hcs^Zc$H5lZW+>9h1mk}BoxQLz%ffFIg|lY8K|6erxA`!b6_!O znz}Y0m=j_MfsZ^j@?|y~n90Sf3)>5Tw$1~4vFQq|r%Wqr>ZsR|Kuf-s7|P)rPB1i} za)Mo2lC0{+<%fMPG($;-h8V!d;22xX`}BFzp=!bL1Z@#rNOKMF4=6Iu9i=SuF}e5* zSbgMYnjr(IZz8t@=+dRR>rj0S?p?(ReBut$kiAawIRy75MAzBw_Ou=(E$fZg zVmhOUwhhDNzRb_NdyyGZ(`6I2nq8YVf$K=n+Xd#(fz0_?f*%JDQ#mb&spf{6fH zn%5Hvw<3p9bOS|@m3^w58gcs+2HKG8@mpd}xz925Da0^uhozIgz zn@${UK9rY7$wg5TBA%T|yiWWf)G&^E&8#uEjFtG6*vJCbHAlRg^+4(R=rGFr&7N!! zHBjP@lnqMZS6wq@;RXQK$m)b*_x&(9Wv{g{cqGDKve7XcLqNhEza|Ex76I}bUg+%l zW?&qVfSZ^l;Evta`>Fg1gHNxULPP!yRk{k%dS=5am}%eL20r>vyW7N@pQV`hZ1~yW z9`Wz#e3`!hNfDlQ4xjz`sQdH&;otv!bPr#jW$A>n>Ns9}aPL`nbeR0KJi6C8{5$mE z=$>QTXQ!;{{p|4ASn#)_mO~slOPHVAUk}z$R}>t-4P9CUc4a8C#mW$uMR$a^XmCa^7|_n zwxyqjKMjZ2?|X?RCU@s7xtHv80etNWJ=7hKak82M0dmYySxi=d&`fEfKw=^Zhkz%3 zNiT=LRK5d#E#P`FKp_r!CLd8-0Tl%8z)OC~ED-dJ*tjzW+qtlQP&OAU5D5SOrJK@um@}T6p<`p}TYO4h7)o!S|bn8a6d;1Z&c_DH0_m1ea zST~HN@30O-aEsYD5t0>8i&F#uckMey3luM%&vv%ApFZjCB{TF*TP!kgZbIZZXg51| z2h>BMz`1gx6Un=MZ`dBVd3K}jV86Q3@_c*-!3!yEHCE7sx=_$m<*q*Zm%rGMydptQNIx`HU?w((yZz-iKBi32q+boIUD@0fyv!k^=JrQac) zgjxV6OyW6!!Q-`i6(G!z2fHIz&>&lTD_&CNvO<+rSP9)5!v5OW#fAo(ath<;`wgY{ zBza|239ND3#HN<|t;M1@-&T#)hmnOh;GZ>th48p7yf4`KKxLulgmX96TMxm5w7l4-Q_!zBFB=_GpLBew!@MA_XJwY?4d*7zazr8 zX?TtkFd;fnhIIN)9{lppAHR9eD@wVsuueh*X&%+%E^1~9dS`6CuYyx zYZ?ZMATCZETsld#O4=vWblKME$VC!I zznC1Wa_n_>sE>on;K)I1?=&dST)Q7AY`hxS66^si=`@l1n)})rPpBLp;;W-(T=Y(2 zs+5w?#7}F4DYo56Q3r*8?V~>-{GXKGH;t$QMbdL;i^vKhlTkv*vP=n;3)i0B(aPOp zn28F3oLx^drP#MFCBJk!E~c%M&T(i#6fUYMIbdVg_odY z*e?xh!M%n(0{J89N3Rt!8s@C*i8>2$iP9Cg_*w=URyvpo<`!6bX(@vcojxRN_vBvp zq{zgU5SG)j8KwZ!D^`P9K2vvUoF5RVW!k<$DcBuj7BKq<6dM(4>IiU4(U~S$I#o+z zntYstlw(KO(vDGA=mg2wb$+ewNFJ(-Ab77v&shC3wl2;M6xyVq-#T`j{Kqi%(u@e) zw6cu7v(b+x)xD!3(6v3=3Yjoot$ZGBJBAB<*~s&e_fVwWJ#ZH(1B~QgCe-q^DU4e( z_GHr~x8S&ep+Zc!E6M8BE@}!N>6FIZRv-LmHo4K@{FqAYQ&WlcCx6FrNnr2556D5T z)`Rf38&*(zU@N$Qg!EhN{?=;V!cm>ItT(*+hf%>JHJIIVJ3OVc#z_JzLdauvI}&u_fFa7C`7cXtljqY4 zj>obR4L!d3@y8!omn$Ad#H$I$XPr*Jpbd!hS!z*AomU@Ll;hNAaChZ*F-Wwepd$C1 z!$rZ#n<+H!Y1KL48W-h9Axh(7fmR?-vn6^8^34G%0fhb)ll%m1&Xgow=W0EzXF00N zH2(#K6Po_a(gk%vGZ;aOZUV@G!Yoo%QDISg}Tm6V%941YI(xrZkmD?2h&oTt-L zA%Bt3SQy&K%?k>*q^MZ}H|I~1fo@eqe&vM*vb?WxgB)rp-RijNhZ{>$dMSDv<@mRLuQ z^XEp>)C#GJ&~>?@RAO9fEVW<_ceo3Xb3%T{BPOe9_7Pp8F~yB;S?V=x+Wo}tW2{SV zEWb(I6<|xX?}hL8Ea>DM{2lR5=%Ik+T3@7jX?)zUUDclW)3}=`1znmbc3(9WDpt$I z%8^MkJw7rFN@&2a1tu2nbRq=%P1B|A;4H8%SNekljKW1S_Ty5R zLHHyIB8G19|LnGHXaIL@Lyz<{$%O3rmrV?)tZLVnyVk!v6J?)YHvrQp)zhvb{wPSv zV1e<|Y=Uoa_JUz(+{$0)Q=o?EC`Y-4QwW}=okXE2J@(rR`JY)US~w)A>|y9<%Ft6N z<>}};&|Gmkyye#oUWI|>QfC+el}Dl1U{BxT?-32;SpvWh?e7Y6`4g>!?XQOh^yHqt z=+f;quU#l?s1a0pRne`~rZ|9+A7_|p#)L@V;abfZ!zwu|rV}w~5MCfKIuN?$1Q_sQ z$w6YE-y_P`3NT%1wd}tIh9`F`PS#I1pJVb}aV*j0Qux9a#_UMh5h*OQWqLYdX3OeK z2t;jFPDi0Fq^CJ}+kbg=fb*YM--2D#4LPunvRJ2It2GnDR4C+(0#JH*`>M^)KTNBu z`Plzt!SR5ahbX+9>Km^DMERt}j zhF}-^CPv0zh&eRDm_`}Zb)8li|8&btzSo+F`2dj_iv(sc=^)|Xcee!D4`8ojXYi81 zWygYTIWAnuEAYvH!4a|ynA%~cOr{F|J-l$=!_<*OxYmN6;#!4U8voHHwi!9f+ldFW zS^%V1ofWI;gt8un8sQOraaF94Edt5j{aq%gh$1HjsR`p&^Aq|2)(7K8@kw@Ph z>1y#a+)Kv=Y$!v7abWr>$>#%6iLkO6tib32<@n%>5gRj9k5Vmg`4+wo9jn=+NgWsT;$HWP~@saLY{1jUhV^13z`~eki0VV_sQ`_Y(F*T4SG;86nT zcq!QQBAY#YT5}fJhTn#{F7uj9<0ShU+{XIi$hA~vazE1}GUQjfpB{}wm6 zyK)n7-|7>8f<8fboZzP`)bpv#nRns~(u(z@+OC9F*57C?e9Lp_5?&tkHlFo59E+7*Ih54@*fE*5nF|s|c_z^g{Ofx0Y{L>v& zpDqHm>>#*s2tJ2W0vFE~v)o-QOMne&k@_|J3zqc5M4(m)-A5gQzH+;b5Jwi^4aA}B zZg4n8ey4?5>4jd;s5O-3^(VY;Ut29Yz`XdK?5pEQ?Mwo`-vlV0=S4K9$5+?hQ)(V_)ZLQYwCo$j7DvEcs0;bMDN(gT-@_D zrA*vU@zW0?BX!6xvlA!7WRr>#deaX-;qscJyk#@JtQFLW?*Ph}JIb?cR+Lw5vo;^x zE?!mr2|A;I2rNCtwkv%50%j4W#{9&CuC?%aL&tP-KCCctH(*(S%AW;TmOj2w$4p{& zqvw)Y#?=2(&?}C?1nyo}>1jqCET12f|3P~U+G%hd*3Vw2AG750tW?FM1eHGR6bKlMc;mqcA|k%dS8L(IF{F8YQPcPN#P#qF1!P}33Vqe;Pcv*GuC&VE0>k}dW4 z<8OBZB}=4B+0xO*ExSc%ZZg1v5cY!rHUTN6xglB7(Xk;KtOuH{AKo(Khusr8%TE4eO$!<&ImTiE+!|fP5rfVwuh674* zVRbWw->y9d^&fZB`&0*yNx6lkJ9MiKoAeWB^%PZtn@QlgeM?1&K40pT=a z6Nl`0K%KN_HVolpJ|+G2sxQV`2t?KfC;$mUn^0f_!89w+-5M5CfK$-~gQ~-yptU?4 zq@AlnDszNLvh~M3>O7Y@+N`wQxOy+}_OZrSifcVafx+ZX!af`j6JXX28Lb0mLVOuu zh4_xMtGcW?kZpNC?EyC0F;#}B=vxyvlO1>OHI%3iv9%>A4jz?aVi*+p8?<_}9Mdz1 zZy$d{(NU!FW9_!s^pcJdv}WjSMBW$>!q&3+ae%+RB8h0u2?#)j64GP_=<#S z*gGmGajoDj0OoISOkh@+q>zlQj_G-tPnnOd1|%fG1q*+n+Xep-s6;7rvQ0Od34D>^ z_ZoDd?t|g5ZSgMiv{KYBLRSY30XiF12nfk|CZFx>Zf`%t{&CQjc=_?yu6y!i$qcJ~ zXX3j^&@R*Q(%91()6*Eo$%WOMOv%w0b0yx=1si7PNQat?5pQ8q%u@7uA;~I7GJq&9 zq|5Oh42p?ES2ntCuwZa9M}%6Xx|?GHT1~kro**1UFL^aN&61s6`1MHQ ze_z#7s33Y2ngkR%74{0y*Q{J#!ER$of0j-`n+Kv8)du*H0*J!_IgUe`jh<{@A|k#w zu;`E^ZUJ|wx05yvz-QRdu!_5m>xCp(zH>O;=pQo%NPURD#zmnMki+#lMYOu+ZiEjw zw`90BNf34sAB_9qYwX>fedaTK?e))0%kCR?#SQICVdlazV{Ho>kb=MxP)SHMG6|Sw z1ezrz6$HK&|3ilBhv-$27N!E72`gyQ>LZ#|Ep$76BYKIG02K)q z+q-V&n8oDz+n4$P*{s+Kv zR3pOBO{aVNo#T}HZ*hXzpbFYoz}{-vEZ7*DN|1nyDL9+~X`H3=e6gBxoV%(vg)|%X z06v%GfK=~W$kM6?4&ZpMKT11=dnrLG=NhWCo)-}$puIvlOZrpP}~rG;bx81kP+ePM5N23C<%QE zNta?m%RJu)W`&TR#IIOhK}H8a8W<(*XN2HFb^7b_v!`D?*&RtLT5L}O-E%-o1>(D^ z^gQE9S)qTWyOPOoIRl!b6u z@2CR9tnck-sQvRkf#V>m7UuQ3uWIFReBYz0y&^9YGd%Vuh5B(OF+TM;^8s*4=k%<< z^Z3DTm+m2AyZwrq_V`Y8XTuTEyMNlrz}lh82i&(hitoX)F8x;9a*97M|sEAD2ycXOqY1G?Ns%k=bjH}0px zH(al%#%sweGv8~cQRp0HXQ&M6wR^|VVEk=&%^f|(MnJO#tS@cTxPnlQUQ~PIZh20g zByx#KK0N5LKP6%>5kHXK_^#aZQR4sX3)MCqU-0Z?~nABc#){(8vW$tT0Y5Y$7 zQJ;}+_P)Bt0Ik|f{<*(B*xqRiM%O5A3j^I0>Q)0r(EW;4?3x;nlubGLZl8s^`E`qw z_k3B*(H3#anAL(k8MxRGREOkHf}vDt2{{Ii5koLx$ESH6G!=wRvgO}_2 zj#q2IMzW%g5?w1U2%)W8Ok?4|Ro8|rF1p{2;;aTYNOD|BB*v|?o5g~hN%2hfeZxVa z2O&GQvOB<6CP}Jw2=IWS?p$+Codzq8-S^Dwp__>aE?MuI5tdTi}<{vGQ7tr5k9DD+ysI4l87i{K)ytWxMh$(@OaxGr5W=d zJ!4{FC4AhTmvv6(Ae{kz14sk&b5`kAH*Qq32kgp|wny9@rWtt7@U|gsQFfV=AkWHw zyH%wH-mu`lQtFlsONJ-pr8`;(T0gexsS`xLfQ#oeEssG#5jst{4?A;AsRm;3ncE~l z)J>QeYvYBr2N|i`+6qZ$1mrLFOmC>W$=L_elkkco3vTEc_&5uxTSNZXNCl_=S@MuF z9_yqSeFSftlNE`l8g1lj*iUx1F^L;L_%eCmexuC>e`8+0?T1?ZUosP#1N@AxX)WH< zy35}_7&=^H(HQy#gVfvLr2)cMdes#3M^OWqfXxxVZmZst|A)MH|7+vO62*TGe?^;k zN0KcG@GG$}_Qe<{-1Tb#kCPAKI*rtVj)huLO9sZn|9;P_-qkJPcxLy0zu6tr>aORh zQ>RXy=d$j8PKI|4N)WdTOpc-+iZO0*c-$y{R2zd*k%O zD%YUN?-pHowsa*|Q@7Mu@IJHj5Q583Mc0Pt6B}rWnH2C0ir-s*VDw2Wm%-R&R=^sE zvaXH`X>E1W?PaFNvf?}QxI3!4<(X<>)$tKi?%yoJ2Flwgl?gad*hmN)r(K2Sq~BKR z^-_}q{aK58#0kazMlaMFS+wMq_2D`i^jK-;xJhzeu||g+`4~;WDN-qUdZ2&b35C3| zM^aixnZJq{1tg}KcA?9THa4DVy0>oIK*&<5O!BVZj76#Gx~%S^LowE}j0_!{0yTk6 z|BH;S8JyUL5X+?QI!6Vsz}hZOs)GJ}XW8GOM{6N5*i$~!@QFFmI zidhZgge%)sytLISFKNJA*ISU-Fhd)NrezNyEjjjn-YNZ6w*mvsXL3Uj-zdD7lL5Ew zyJhCuc514f)~lNMj&M^kbI2}^d3oUK)RTYV8l;93xeBR0EmjSP_;UT){@>fb07)V* zFw1on*y)a=tFdkNYV|b5WHk~+YbCffkr4}=E9mSI*rhYQ?CV@jkx;vo`z}%#uBPNh zVhr%1)41>G#!fksKE7ja2S>=2@UN_A)h#YA`=a+9f}phiq0tW+*X>fNyu{5v{J zZ6PKiH*^ujoT&42r48has`7@ez2c`4i$*8OBxH@Plz6ti@uqD;Enew5%wCl_|Do8q zh>jX9`5n9Nq{&HnD0e7@Y@{O-rSPp_Q4q(PN#M(<9ApquD>~&A1JjA+XXT+{uR8+k ziaA$%da~p~l*D6p<9sOoFF#0%a|t6WRX%2))6siUCDeFbMCYeHA89_Ko5O>OGz{4# z3j1@N2oBu?3A)Olkc;7EdVZ??dFB(;^={mIM447S4@v_bh1Ql&q2~;#od=Z%rMy@% z8A>zl^JQPJv<-q`%Sj>f00t%YQFaIh)^>3Kdye>p;j0N3*R+csjC! zL1=VPVKr1J@^~!ri)lL99*yko$U)D9>cbKyK7>vy=BQZgy)V^uqR<)TRKY(Y*tMGQ zmZQAuR47Ix1pG{=$y8RJJV^q!`BaF~B zBYAbPuP*!UKPMS=)eNX$7-Rjr?}EH+a)c_2cM3U8!GgqaYX?49*B+@EFXo81teEP; ztF^kUsBYS+bl??f z_9VdMFo6|z{?-MG42&MCv{Cw7q}rhvmRpH80=L;sXGyif%--q_H%Pt|n#ZSm=ZHK=u(=5pO;bXGm6 z#gQ-F0*J5V$Fhyc+wLpH=bJagocg6CZie?-1OOaC89QC=ZF!0 zkSEgF*ObDUvUYweEJhzHgrds3C_$aQL~V3@1fB6|pCDLLg01IpWCj%b8fmBHYvz9G z>?PxZe`43py)#Qw*hrn4M&7vx=@ilWf{i`r(tb%qiy= z$~WY8q3=*Fduo`IJDk}CS?2cHL`*DS(0o@+85BBM3W4Z$!)>SyIaYl@uUdvk-_;k} zg4YfaSoK#Cg`$@3%SPfe-z5|=C2DpO8lBi(?3hcnBSEP0c=Iy{_`YPW;O0B8Rflde ziS7caEYgAHI?6AVn3{j3Vh_TsPI^vMeOntz6-a*_{un9um_2lpz@X6 z)pWY^g=;rq2y+NzEXARuR{daXd_s^vn4aRMA5bk;W5x2@6-K4EfKyrDq*)Ku@_6vGU zhVA1b`Q_*RdnEHPDO^wTaXQ7sZqu~i*#NLSYB{x$$Wb-a?Xc{6q)Zes8;?rqj0BfV zTOU0Bv1R*ajfo4RSHRp}S5a#b0Qf^!&C25vXG}6+JjgNRk6fcyHvf{+T+MS zLG(9ksq0WgbeN>$a`EDMjxJ)16qwKLj7Y6ExQ+{Ks)xS9nh;79sH_c1FoXFl#AB}S zNNva!q7QepldDcTn@vm0Z89<=GIHYXx2d$1l}XUc*3j08Xg)@SGkOat$?fVBe)V)! z1WD2!I@*fsF0^UU3iCIPy(Hv_-~tPIH*-(h9sVD61^Q}pY50v+;ErO z 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℞sl>SA0%rp5yqS&Pp)?qDrhxJQ|T(_w`p@!PD6 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%0D%L>G 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 Z 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

cz2` zZ0(4aNpNn)myE)VtSQrXx*>W|+b6p(nNa+jFQl5Ac;gQBsyLDCk%8aO$@IxrVdp_l zUwBtY&tIt$KesO+20rXPdB68@@9jtY;cwAt4{oQ2j*2bqzIhJqm_LP9624+BX0-!k z-u#1&|B+y}I2E)#rNmXcYd3K;k-M}tsk4S;%8u=&$?CJ%TkcS`MWR;7TN*p*GC0WO zloZw!70lS!uu-p3DKyfAtyBbX%{alP*KSY0YBj{15Uk{U|Dff3mubq-2$w2a-Gq(& z5A|Zvk)=-rza!UQ8G(d`bo`kXTpZ;m&K$dztQd-nr-Vkf#xX|owPTD@16mxIrVV=( zP8Yt@AVf>;(}0`nDe&4x746nQ8UyyrTHv_05mRhCwfh_2GZR|BN_LhZb7fVGy#YmX z$R1k;;-}-fda{`AUZ8dYM26kP=iy9Yw+u_2dx=?i#+Fdoej4ow-NmO;l^7L@{*zl0 z>WGcX*!B20hVy*+`mbH>ZbU;%o0%VUwxcVu=!gJj?PAhNG_pAqJOYuKl`Gl56$WHE z_I@HXI~!cQ!{texGhZ zUbk{bEDQfCEP$=zg_5pI>TyymO0*o1K_@;Z%bM2LJ&rqM;3Y_6DGo>&{vfi01PoF+ z2Sv7%Cv|!Yg(g zr$V+vFE*bqC%t~ZaJ^*M;cRjI3~RoZw=b=g`1A%MIxw3Cgy%H*zK2N<%^kDpE_$GuCqq& zFDsAlkJI?aO2=kFus z9qEnn>XCSkq z9ETxf2y7mp{lLU%|Nhg5cWEZj#qX_GP| zp zZqrSO4dxKxmPv=at%l{)k2`#fSad|!5XEAq-@x^48fOj?Gk29W{VLTfdLvY|s*O0w z0wWIGsQ4D^Yc?8o=bLeoe6OFk+Md;Bh=l}YIN%9<7vYP1jxlrw zGQXj-p3K=BOBoqM49tdUr3GY!a+eG~l+hw2E~XGcdsPW_1iTq^=I(%((53${JX+3q zY@s9(3kT^v-kACXv}E9VR@;<*Ll@+5j;%oG%wlN9G;XU4<~YFKXzGDD-8{rjF3SwI z`eFvSw6PX_4=)#?mN2(UB7{1tf`pnV1xcOT_P8zJ*Ys@rN(|o%D3(Y_Q2U@cd`6}| z89>sEb~U#BR6&r#|JE~=#wWSSRLNCvD-%Z^vTa{uHgAoq*xmC>Fcr#1QqJoypFHpV zmGa^dW6bnG4Vs0;@%uI06MeJ)kInr*{o8|k=FgvBy!glF#nT7R&BKf5_^|uu`|z;) z;@QDBEEnPj(nc;QZipx2irR#oJZLT111&E1Ff^|kVv^lUhf}n{Rg(Q0*D*$G zQn6ak(TbR&)7KiVV^-z9nvKydHLX5tlnL@xt*XX|cOVurXEd}U@@u}++b)HE$w|H!LVE;T6 z-gQvxfxYt}?etuYfYcpX=b>Kbp;E_-{kAJ3()msys}Q!OdU__BBaK*QwUwZpRER|| ztqrn3@-`o;-t#!tm$Oz8(~g^@*g72`=B<{TvJmHgP>$|TtmNeBI42Tk@@f>*loa#_ z`Mpq&k#_&Oo9l3l`_&|ICza;jsaIm23LfXd4w#1sI}ieNS+_Xr-#X^Y3d9!JPeQw8 zKT+N7wP(p5B5yQJa#gmPrF*4W$}Z~{K9HtA;wK9}Q4fR?Psfu_jg_gK3bpO9aL*!l zq{@w)n9VKB;h^P-j>w}vn~J={1j7o+*}ZO0VzVc9#gufI;N`m1^~ zN4aiM@6QfEIW{-*i~)F*xZSpR#tq4v2Vj|eB<@yuS6_|)^K#dYeYrvznqguj5JOQ$ z+|8d%;jmy@g3Dl*Sz_eW{R`VHtHctbuF zhEs!=@k7>|5>p#v4m|i0izn~eMVY1LMq1_Vo`D`sDyOdiH?yX%AGe_juYNAhZ zMTdY^OgY3O&S+-P#OC_SPe@SNb#nJ6JjX*c!KV@{gqK)VVU!ZFs8~3=o zfB5GS_L_t=N7~@ zkM)@VIb_lz$&Tb@9b#-|`S*b4Fp3Y3_+zT1ePUav9celd+-Rq^^daL8B(=uNH=mk` z&4r$WLP@vM@^;U#FN2WvB}CfI|5AIkE@<0#X_l%%u_21C#eKJr2X^-kvCm%_{PPz$ z2VG_BU2fLEkgo%k5UvKD{0r<}KC9RBH-*I|%E>+hWwIx2E${wv_fIMm58@s0Lrt!O z366#B%9XDlqJf;U(qnn~@97~r3RlByJXdy_N%OJaWE+IfITQY#Sl@Pe-|~W{goS6QR&8*gc}BPk}sFH8`oFSPsmDJBl6pSbqsRke}s#Z zg?(-RCKnJOPxBEZ<^y$JUgCYyxY zOIFIXn%h*}l8#eeycN@TcfPhA^oQ%EjC7VAU9StH=?(}?UH7wVVCx<_ zt%oVmJztu?a@ECn00Ki#FMnE!PzC`>S`guu`A<>lXN`LU#91HDT^msbG)OJ{Kv`}$ zm9#X^_J(NC9!fNmO|HO|h8%UdTn7>#f=k4H?y!#JC2pY~7n{CSM-8KvWB>#}y}5oR z*Nq8oNBV2e2_i|2$nS(BfO99EY1Jq!S(uFWG7%$K47TDzlvRKV+f`^z%gc_>FAR_y zh_pIBoQo&}8NL@faAs~+6Zi4ZZY?u&z`c{zfz{D@QwB&`%NrQy6|-h1MM&UQgU91~ zH9Op_t6mpO9`2n^s(aom8rY15>7Ik>vYRJDXwZeiDz%xHgNU`GDh`F{&kbhj%&2lm zT1^bv%Qn7}dKty;eARGhZ8*>6l5krH6HyxR<0O^1I6_#Rom2vBV6j=&-seGZgiU99 zY?Jbo@IMtNHYqj@DNfo7Y1wm*xHXyQkL3!jW$CLhqwD4I@x0R1QE~(}DE|Dk*0MuY zQ__Szs{!A0LHWAB-%pm&qu+^z`MZN|&XCiAim#G>0Hka^jPPPu|50V|HK}?6+5vC0 zKXBwhc$1e?vrV!V1`;27lPJn6nxFAeWo^INml z1{#}bEgGE5d(n7Fcas%q!IaHdGr7Q|kckOZpSN?eA2Wf6v+S;5W&dO`eP5mV3e4mm z1s#^JAlTAlu;mt}X?Bs?yHh)y)JI8YKVcE`71un=Ns_~@){7(WSy1^Duj6i&GCC=1 zEgr$sz-(vAy|czaZ^%Vutf#BIKmZiBEXuXPr4eYln$P)4za4>M%iMz22wBIK zh>uVA^4xl{+qm-)u6df4%=RO;9PT@xiGf6W_+(jN)yG&5-5T|5VZ=^I`a+GnK z1DZz2Qgk)~Iy*C)y?qDXL0{(GJoHpEV$`e_gUDah+R@{TM}2PV`*W=U{gc7Z1yzq` zpg+#)nURpBy9T3mLF7I_*=(`NW~>V9P-PoR{u{z3Dc5YtDI1fDUSo2|)P$c(i59bR zrC}*L#6V za|9#Dv58|rTB*nC3?1NQg|Fn-<(BchEX0xP%Q%j;Ie}u|{5>G=+*IvIGpPLoUCaDz zzO1Wy{rz$^`%gHB%>6h*v{>mVY1Jdglk{71k7{E*uns=rO4=d&76 z{(8JV8IBL@-bLqL$5$TCtE06N^TRZ$RdYRQwPGA9toZGt*!N>MPlmW0LbyU^xLm<> zwlD+l^|z$C9I0tiIL^YEHU&~OWfjK~=fni0c@0otVsjj^SE?M(*}^;LJN(MJB-!I} zQfk1}e4vy)GzZy1=iY;Up>a40Z`<(GY7QCuXuF^SegQ#=UP-?x!p<65D;+80gPy;7 zPZBji!K?8NyZ5-*u4~#1qMV{q-Jf7i2IbLbrVKIPqJ6D-KRVuYm^6L&vd6A78*(>h2*A zhO3ofSn_Htn^z^|hY0VuvTkqr%(fA^-~2Ksb$RU~9QLeW`2y0D^7LZJTpb`yg939{qhnXm7t| zx6Ncs^csn`Z1Go`{vPYNuckbJDMCF2Q-p^N&ub~X)m1HxZKJ!SG)HP>CtLHiAt7dj zmvka8BQg`F$4B7#g3^GaBt5}ZdyJ{rchqMbqXs* zcUqlT_GLz&)aj@9MPO=guVtdfGl68#DL2&)l}Q`hpfcqNElG@B;Nt4G0Olt+n6YMN zGa<>V%$D?HwOY?6Z8oHH)N^JwqY0miIhU^%PBwWb&*xaxo(#PFVh?cG9*OAha;N;A zB^5CzsRsl6^DrcrXY@tm|K`58*m%ASGoA}6%i~wc(&i2)CFc~WE3v4sVd+~3 zO7 z;@d;B?R)Fn!{za&e)PKszx%G65r0A}Y2=xU+4|k8%8i~~YANE*8AKNF(~s(Ac8y-X zy_T!7FLSyYsDGT*oAF%A;z5t4d>$nB5VBp+r`)t%u%}>iDUSBUE;l$*93e@31gr6n zhf?%CTUDHY@w4=UG-b2u-L@)S%1eE_n$$1wdX<7gx3v5=cEkQkdIcaD zr%lK&j_LAzAp(mvkPOsF+=0D`Asm=v8Te!E&PJWh8UDJ}369E=HVTseK~oD@_`V&p zE1Jvu`Sy8g1v^bz6)C8&Cf|B;ZlSL1PGgq#Y}^}Wj8Aq26*)h)Aoi^=!&VY+@V^C8 z%(1^ZD#fNR;6=Y5jJ&?2#BnA&MI{uwF3hM$;h5#MdbdRQ&K0z!Z+_m*sM%w`jf)Zw zB2D+v%)N4|L_qIPx4q_XZZq{n7MLZ20#Dg4W;HQfA6bi(jrJqslzJ~Un~|msYsvp z!51o-Fg{zZ%sG&oC79PgKe@nwN)Q-gJx#4w&|YahWd?KWX&O}>wLNYgKyQQj=ho9) zw(~wQ7^0>cgbesm=Yq@;92i= zf;d||kDZ;sLFZ!7xy;x%hBB#jqiyl_3>;m185>8_UfQ9HS~;ImgTVS1!+3*|In*11 zk>CXcpi#bEns1k!X(*dWML2Ph{!9&{Ap1 z&T8vjXS)Lfz(a^N#YqIu(WW6Zd8z72wU`>_t!1pj>X2G#Jsqr129q(u*_DP!ns{7+ z7OJO&akKew0`sxkOJqoLL)u4t4fSB+q3;J1X#-^mQRt_ z26PqzSXW)-~BuP_xH`TpYG7$%=u_KEg^ zZnw2J?rBDjwxz}}b1ME2&D-D)h1=W1ANK#x#b0U#+kilExXP=CR`e*_9P+8t`7l{6 z=ku3~_43DAbv~@|(V5!WcdTtK2_2kp(3eDRP|~p5*`R_k#mmLfQVCaVKVh_bJ$fWuLE*k96pVJcF7F?dzh8jp z>FPG&dAe$b=7DMoj|LvFmJ)mTJQbud>|Mv2s}eO|-r;e;6J8WfUe}=B5yT5G4^I*Wxnwc!d zpJ&JBWSli*7uvBP$gii@j%cZ0AMxt|7guEb$=Xfe{5)MP&udJ|9@DTZ)2L2eRx?|) z0&-&|)57l`$>v8)JB3PC(HaR2y&i%v3I!-osj64Ff)8No{+neHvB&DR3jmDbB39U5 z;MvxNEO9P!L(b%abdycQCjFr6S4Fv*!jzzlcB@koq|X0NQ({F`eM+p&z)fd_wW1zA z6V~l>jcPfMtPv;Ob$w~cqRBq(GiTV0fQI?N4>Sj~xmO@p_1=@GuXej4!;`HrYRIr? zjl@#RCAb?(cu^XWoZDxa7Ft+uiKM=?2n%9r+4*KMUA`VK#>Zy2TCc{7dJGnU8KoQ= zV}(RGRFAVaK2AE@;Sutl%;zyJcwrn60<}&|(J(L2*%_qM3XMnrx`#1i4Kapc_j)A5 zP*xF@CbQ3&!Z?<)RXYNmZ6fw2QG0!!bX0!HWXL2~Z?T-V!L8Wtc9oYXwaWVCiW-_O z4Ms>WO_i0fcAUW34tU<+f=j!5#PHUIf|eor;Vkdl5Gk@cwucruF}4`_K&lv;@|#6z z5kO5%fkSSKmVW)tecwxvJoxTazm*2Q{dmQQKNhTJEyKz(L46m=3b+}!7*0|*mu=6s zJrMZF!-c5BX!eH$X~Uf>r>)-FWt&js++dKXNt0Y$;dl*;P+%zuBB4pRF|ZYdJUPv6 z12~hpzA)fh27gC$noKOsYX#AC5(5xUPqn4hsL^T>{3S_O3FDbH8im(i9)S3bb^*n|OR`|9-<6q~?Lj$+L=wyS!juW8l=A9BUZ~&17iVA}v#^=BEnDW^zC|fj895%VXxGlPju2_;jTJry4^a zt`u1xMeUuK+$N6MHFc;M22$5-hu%XysUrXgB7#`*3`)}n6oF&fpfiR;gMix|nI!0; z7Tc$rN9m3*ht^u%cIdykiE`f#S7p@LQa8fR?&;b3GEsor_E-KSMNpHWIabsjcDvf0 zw<8%rCQbV)n@Bl%8kGG~uu3N>SPqn)sL#N+2O8y6Fst8N3Ct>%t6y9p8S2+Io*d;w zx)XH9bN&jp<$knXV-d|YCHmWy8pcN;M!SV%=9J+^6l?m!U9hDj!HSXsJK4k7-ttX# zu2WUfRl>=)5^qI6iCc=??z_K+ZiH1ug+sYM(@E@nmAT+0q)EteSY6EOb)7k9IX`Df zAR1Amx){3&3XUMTz(9;tGuUo-eS3>0$o-6n_wW`(yzNpIu!F9$6bfeUH?X{>R;1(2 z+z5he!$d>?r!)6588=9X{^KC6plK~CLz+F7v*KiSwEkOl=>pkPYr^q7^I@`H&Gj#* z)q1Rd`BYs#TSDr)`>czJjUB#NF3+g?z>lDC>OUQ?Cnr_C`&kNDuC5V(KBszl^KR%s z!F|pZ4)4Gf(iHJnVP(QgSIFXr6>+az0f#46!oPDx9Ku);_f8+N5QXCOYoo<;i6E^= zPAy4>;921IacAGXIDm+oCG*npB=sraJIDnK?`&3Crw6Y;LjJ=CJMj10j$y1Q+VR)6zGe6Q}CXR_#R4|cL!SN98;jSe&XZH;n`}rUasLbpq|er)ez26z0gDq1=#Lj zc{DV#pgD(uXU+gSDjaL8i)ykFCgkObg?pTyqX$v6-K++JwMipO3+**@W9YG_ISAn0 z$Wx?W(S9}Czy7To-N^q)c%OT3x&R%{+t1Z%C9}E9^bMbdc!!e2yZLx+=;ri!wYJ>e zNE1{1-Rloyw9YV|q3f80JpEPUSU>)4`2OWzzu(gs7ixt9czAdGm15>W?>Q_4(VM-ZZznH4@6mB}rs%7rmt6TSf4V+AX5^CaB0FIY~8w`EKNj zyEW9e>u!6*CF2W1${oD=c>Ce+y}l;hWWE-`^~qI4Vw#)a=Sza?GrimZ+!DP%{9^R} zFh}oSg-Ft{6$~+FSmw$Jq%1H1FuVA3D+v{MJIr`<_b+WS-jO^?pX}bnlPG;o;wk|w zv)Y02&H{y*@iGbJ^qo=L4O^Y9jG(hT_dB^A=_m}CD|oHu$>~hEj^d4`=q1CZc~hg@ z{Yx)qpiHy`^HZyxa9Nq&5WR55qs(f|bIL*64TD4|r0@Pg7JM9(KUOzO24t`ARUeQT zg2R`>5M-~+QUB$-I_=53|EmE*ZbWFa4awPjJh3O!mkT_Wf=Z<^3ece~R7!X1EM}mj z4R!qNWHzT!Vc?d+>AQNO6yQx(9O0W%4&Y~-RlQt=gm*UT)_rBj z{gYz)Qrpn3aJ=c#AT=t!rSd1yP@d1`^XF!)>*^JYs;pfF1hvi)T3*#U$;z<&rO4D! zf1s8WF`l8|S4ud3-{7F5SQJ=d@j(<{xT1|QV6Ab6Z&^4I$Mzh)nnTK3s}2uet~qPX z*19=21;SBZxr|XwHWoC0DDsa45P6}eCKw_CA1;{9MuH|ZQgc8nrCy}i&ff5qG+4|o z#cWtx4$@W04AOlqfnOfwtMN92ly->3(w8h?yLgdW$bpw{Iiq9?@{5jftPy|oWg1w- zsHs4jSPx*JA(>B4H+bLM>*6I7WFhxPMO~U@5I%a5k=Fy9L$&p?%N^TfU)si-=A$>C zcIT(c1wq*VxW}fuY0>M*%NU`TArm;{)6{ct3|J46W)Cxwe%Z+V9bbdg4Pd2r@@dS+C}E^Ns0tY~cT^w4$79H)!^_~Sg;6KlsMbr;F6~B6pC4ue zkvCC_Z-x?J6Q#7G5^W32%WaXRl-Nj{eC2ZQmS-J`QyLe?zl%p0Cd(+BM}~`&v%J`; zWevm7*w(3hj~j^iSdb8av_;O{CYp|BXC#K}W4=hTjWlT)aPY6;nwSWNzhdJf4=j~E z!R!G}{RSmA!Jm*RvvL&*dafp_aQuTSs6@|rX%@*vFIEaxIQ~p8m=6o^qFBw| z3-<1tUa@RpQqAFQHJ${-v_*q6h0dZ=U#NZ z2HTV5wj}5mtwL{U13ER7={Oy|lG~|7)1iS3RTt<XlF{4NRm*TBY4Gq{^+?b82PB)!i8a!C_B9%3WJX5G-6hYDYameoV8xf zPQ{TNX*5A`?hs50`$KOMN+L<0Cdfd^yJK4sDmP-?{B&jZ;-;+`%?uF{5YXouY{p{8 z-y9^=>^?h1K!&0cQqZQ~#S}%O@RUK)vzJnN;H=5zR^L#qgs-}llIDT?`>!^X#JtM4qVKO1&&TJPr_bRu|==vBs2qtF!U*KX1X3#38qRyW5q z+`aiPNr8+#3iM`??iAEDk514`)0U%)?iz^EdR?^+;e7Q)92LqjmLOB?IgIe-A`MpJ z95HMGHCRb9tFG+M_8v^*#l-AJ%at>#0Cyzkiyd8+3O69ZaI7#8MHeNg6bT*`3Qf)NBN!&Es6&MGKZkTyMt8O4{hu(=- zOr&!~M~@L~!l3a9;7T=BaC+E9ZeO&oDcZ`kF!7P#$Mr~nA^g12uIV}({}zEB0$ryB zN4OcH`Y}affOVAFov7KF03xM#vH5N3`CfK@f}@N}2~Hs8_Dyob#v)tn)&^iu*_hwX+k;N#4BPA%iaa?grYY%R zoJP}yjm1m4^_z>v&zrA@uvzNe$qs9O>Z`GnK?|k&e&1|DfV$##S?8J|5l$9R{Ilw)WK|?whGG18$IJcU7a=XX zxH>siFGsBnWlyo(wzeL3ph(R0?mHDS>Q$e0RD@vvOD|#x;5#8&nP1DkvtkQfbqEW1#p<{wrlp6E5A( zki!#p(Q3oz;AZksjJLKvb1~6-aI|GFm7ueTw(oX;Vwe8mGK>c z4|nu`5{x#eS~hbU(o$o_9A#yY3(@`-SSqGy`$E8ML3zb=D4IO+WRgpDCwwusq-NOj z;n44F4f@w-T}ewy_`PcpG&Jl34Sc_CLf$Pfp`P32%~4a@ z>MsJHxD?3;z1Jfv`h3rJYt&LRw=hoO3q7~jXQg7X+!BZf9U-n}zDM_Ak=G$HA#wSl zi?{9;s<%f+^<-65i*O&Bh!4Ax&e7n2rz2(Du{#9y?9#Vx5odnV@$iSicjWLEdw&#V#N1!s{->05u4I( zTm0JQ{A4z->|KseCDXZM1R5TewrTSA%mCbd&~Lvr9_QUXkg|Ql7tKoA*`8pcn;3T` zlfMe$*yY1>YH5<D)D>*={+ z0nrxJL5HN@ixG{h>JuYRB?Y73M~jL4l7<3nxD%xiJ&i5{%Jf;2>p>sSvJWLA{zf2B2>v;IuiUAcHe zw%`aGv-uZGf<%0BtD(J>nOV}_{CLkA?6sB09St;^kYP?AxgtH8ot`ciPn@YHG2U$@ zqLfl>e*fIR9=@ z*F@b?`ub*;cCGpq%ALy1UO-&F85n+Ay+K84T1BdVTPxw@-uG>>~dSo za6NxKwBXFD8V{&Cu5hBLm{#Z zp3@2>zm66h>+NEGxp%&NyLwgCbr|uh>S&!el>5Jt8n=toxNQVQ4^TN-x|%M%6f97S z1lSlK5PTb?ooG{};6&{_ca^m;bB;q`CqtVj(=tvM?l;tJ!bTbl+QTl?urj$~&TFb| zn!af;G22^~!uV%6NA&C{MXmKVsUa1e6$~jw@*-aNk!~wA_3`X@0g4g*?mn9vC*hBg zC#K37i0S;y$p2%*uez4QQx%V&G*4dWj~d))=N-@HiN<%rXSm6@mktkp5(V$RU2kJ-~G)M>oA3DK5HM4dNC zCzKt=uHEN|t?!n}-kUlQ26kPdW0$m^$&sd$FnkKzYYMaL>j+D3YHN@o-q;;D<`5ev zjQ`o9ndN3(Y^Rl}6o>x{K+(3H6e)Ue+%_xTZUiL*ZENKIP7k5t6P9W*?u6x&ZHLfm zY&3~Bnh^)COWnB?)Q)B;oqInbIEqDR!)p~Rx@5sh162FY&7xt&iH%7-yD^Q5~ukiLzpl z#9anO<<`K`Q>>vBf909kHlB9l>H3c?Hq32qiLAy$o`Zu?fnY=J?E0D$O=fST0$@c^ zU}qcs#C7xpf0Th4t#o8rNv#+~7^=g&1?KP5D!`wwHt?an^Whp@O&O~(>{;%6zfCYk zA2YChBu2*s-!3Yfo1*CmAA(TAM|xTIAaly05!y3;1U`k0W9DacR%Dji7jRr%Q@b`R z--$1}P=_U8pMaS|mgS-z(jEtCFa2gS^^l?^mGvFx^Id0e7`NJ6)-;K(!U?09+N#1t z9S|SRiWmqAOV~Z2sJXT^TJ9!vOLMMlDE#78i(hd0dW>;dmL}5eN^W3@L-GlQHw@%5 zN}}VKMZl>nO<&J*w@1$W?sl>OTRNm>LJe6Il2Hl z1r1UYt3&@nB{PXe11^M6(!8x}WH8B{Lft+faXMI^bVDmUrS$GH_|SxgFp~ZIs7D3> zTQ1C3t}C;$FV4nBe3(W`;hnu#;v7}K_)pd<1NIjG0%CR+GclOa;jpalZMM_wAO&_( zNPK)JalXOtmd9hojOUZqG>$3Tu=$#4mLg1cZ&;zI_n3K(q~MOS4r(RQ&!Za`6pv=g z!3~#s)EsziL3JdnlPVy|>wa;c(y8`K%;`Eak+>7Hk-MUa(qMsvuTC0epeaPYX3J?X z``mgqp6kZhc65qUmoJ^FI^9_+bfw!2K z@{`>Dt!%+b=lP&eegtCQUTOUOzYr6<1t#SKiV2xX$+L13qS-e3i`-h+cG5yJ2o-N2 zku{T(JP7L>H$Q^JR-7E7vWsnpm=LbM_l8KL$vH!fP#0GPTM3dQ<_V)T9ow)52MDSi zlWD9inJI}uLS7kLDptGD^B7;amdcR$XptG|^FtbqII~*ms6^c%f{cbv{QU}4BVJ-7 zW=7X<%N}ktJ0$D{Tf~j$Wkz+Y_vSRYS{t3OI}aLgtb~YYK(3q^SzZb#uB_BsP28mF zgG%lTd^1!vie>$a$K2(T=nCX4S*1ij#us%}qUs<5-3EDnsnzL%DF;g-9oo|6KJ?6O zdNAP}?;=$!a|u19onr$cz9GrwDgYZP?*>|Fr<_UOB_2ExKl@w`3kZXz<>Mw535(5R2%=4}rEMdQoa`}3xy05kaxuqT=JvXx z7uPICeyMv)AzuW7rrXzrIWpN#AUbp%v347|$J1(kUR8_yHWUWHF2k%Ap)ts1YQ?47 zGByOeOxOm5ISzoyRl?&$CWbj#6^;?y?bkTOL|5Oa%dE=I?t%_V3Ct>DGSOl)57+O? zK2CM#y2-i^`uX+>qa4?{`UU+F68S#?#B`;`eXYz}eoCm6Ko2;=Dm5NIHd8IMT&*S-QI(B!j zMXtqWU76=v!10uKsUNX(%y>QHk`bDae?JL{DopoaHbEP!$tz|x6qOM|>G zanKEXv=#5fbRQ`#^JX;#${`Ydv4f@_8*fWH(LaAN zJJAsEt%arNJD8MJHU6{>!T(tVQt(kS#Ks|QmAQ>$&l~VIDQy~J&{Z)vN{jG*u{4=C zm+0!&04ZB>)fL>!E!IDd=Nm4ye1{5Q7Q1ifdbF(0OoQ5kkgqdbUE}k-vS? zvwH&!AJ&)i>dp9+!?CHW*Jg5N5a&il{Ip4rWZh81?x=f~8e(MI$DQsee#g{LXI6dF zW!l!w(b4R}nr8q3hX|q}e2L5N)LpITU1;#$YIc0G#s=@rtE06{B_*N!+Vzo2lUPtw zM`1v$iFGm`bO>79By1M5b!!}@NT-Ny3}*~x`3@9|hvjAst##$4Y7NbM;(9$^pBRRB z0Zu-W_Iw{htg$a3KInJu*>MuS=OQa&p*TmP=756mm_B@s7=sz>mR(ZV7`BG{YYVsQ z?gr53eOA0uK*<~CdGDdkNvIrt#^x|>zb46r~SrtO+jySz>%{K}j%UcTPDQe%re*8lG?#$s>EFkxFf!f`P_8Lo^0gCtcjpy6D45 z2Jv0zeu4i^#*4Rh-82VT^-~M-5&qs=+HsdfS@4QpF6NgABuEGVp_^|n#(vj%0GyIj zk)#~$+zY7*F`v~U8Nyu2cL>Gt3(sp<&DEU={Ajl8!B&DVNE-sa28k%aYpamsRxpL$ z)T4^KICB_H6Ss+5B4wMuBSwLxz==u4kpD`hporg$FXdvI(N{PI&k1pgiX^}5ELY})RZW2^x|UFy>b#{jlo%cyWMFm3cGnPCf1m1QMjR^4{R7yKFC5odTubTT2b!Q%T*|?gW)tcFO9ze~68z!oO{c z&2L*bA)Mu#OzrhB|HbLzHl|ir+cTb+}4oCrOsyZSK+BZEnx}g|I3{+rO5ZPdE8Gw*f;Wj~dzWZu-@7DT9 z4)8@Wz~lV<>oCz4jxUUnwqW=GOJ5QzTf*{%F+*VGLZ+Jo`Wz{h_Hj=B{jUl=QCP@R7fQnmp^;3PU8f|N8w9Zx2JqbY!yKa6bi zygC|h=Ii2tCQ53XGcTvPQH!4W#Aw0NH)nVMtxb${cVaOB zbU#_Kxyw}EpOe&iFwHshuNW7x7>3)o9|GL9TSf&oB@Ij zqzHF9>FYnRG-dGc&Hg`D|5*H^J^)!jroZ@RxCXn6@bUU-4k5{a8&39y)FvvG`B`*p za+!!cxHEy%fRFTT%I$pBe0ukNW6#dCZ?S7AW#v|1{d#;xPWF?N>U0dJ?bpRhA|I7Z zL1~dELz6<$Z~mkA>g8|G_kMf+ynokC0V=9sn0T$4MDqjk31K!%v}7BKdT1S{L~DSn zA!d4HiWP?=mvw@pAHSW9>tF>|_Yy3g`!rmO>b$eJsw$U>%Q-*O7zjMm=p$Ek2)ZrM zzX*(E69gt@tDP%5s);J`hMUMFuOwt-+T_4FlvL- zgA&MYx>-Ir33a|q5pc4sIlBpL<~*h}>#51~Z1yX`DFx1bHxjJ`>w1x^oNbDjdzTDe zArMQwkxjw^q`6V$_kN3+5HzdKL{dhLeN7ujjcvK@Op&W%P)#}!cFkocA^m*SGQS~J zsitKnt0e^KSTBE^Rp-5Iz($%Zw<$ZQw{&-W3$(%Jsiy>pwL+e6cPHd9U0GEqrF+MH z+&7=$*prN6E90*$h#8C&7#eEgtuh=Ax?mrqcAIs4_=6#LG2Cumd z!8$e5pC^Nvx0r_$wns>L`Pw%LbtH?Ab3uW{_ zoSk__U%ZL(W*R+t-%MB0w)=Cs5fsh9!bst`%+O?CdtCx0N3Nfg<0q`f4uNhlK- z$rq#?8S*GWfnE-#W2C(ErPUc2>8}$T2qOi(VDcix`T#xNQ)BY^>5$8Y{7oPtWE0SY z77yM+CGTROQ^yN3UHkqb$4K9B2x5B~>Q!h~bN#h_8#&kr!A2B*^)kr8(0dSoRVTN4 zZ4GuBdm#|n?`Ryx-jRXorX&8IFCEu}eG)mI*|&F|LG#xNqt2aDwD$C40-ISOn0|>gww1dftt**mb*q`0e^FMwa4Lul+>bNku-ml>OEfbPvGjy#Ia+|s=k$;U$c^~iWs9Uu_KtP@apjRs95?`PKo;eQKQIJ^V1Ob8zev?nQJ>17=%r@5J~rK0wl-PrqS zH96B>O1i2-jcPJA_dFIg5#`2=s@)~J2E>E$jeXOui0K~5Gvz#HakpVlxMnxO$!oOI zge>hC`;||G;F=(=mVeh636}|bkeaRsLS7CSAo4RG^-(-FM>5O2Q56^e=dxY~v4sc> zL9|0J+S zU?5JMVI+d^@{QPGM&7ulOmOKl51&4HMFLjTGiZ)K%I!%GSqIB`Aza}E>07WezCe`< zf|o?NUY{O6fB7`AXr{tx@jjn@nw-?-e7(vC+l5yc-2q2Sy~_s;VmTVa4J%rUCJWny zwD(3p|9k;iBoB&N?#y{35G;JhVM?v=h9fi8Tvvi1 z^0YmI7?LfKq;pKk_fxkkTr~kK8>l)wpp2I5`aD!&gl9uxRB^fv`SAre#A0iU-6#k` zUbVyGXgAhigqkd?*!2~GdJm24{nYAt1G$Z+%jh*U5SVN{-@@6(hcNMP9*y?)W2mc0 zH_Vg-DNV6e^1)F;Q5@JVK-*{U93S>dEW|CsLzSFMm?YZ=Xj(!|?Z(V2_L{7qRq%`e z0^J@>&nMO1s;^6J^>(OxJSG3n&j&BGW4_pJQ(r+h+K+UreGGB`a#PWmV$s2LzMkPC z?F)f)qwx2N4Ql3;seq>?671Xs+(04yuqTza@2KQJ=nC~sQNjnQ8y#plF09{#eVD@u zyAnzNlY9bk4}gnAv&XuD37M5?QBz9gya;(S{=(j{w|_yCkfU4ML*ElWW$h93`d3UQ z)}~VnM8yBUR_#BoRjZBfD;~^yt5qe3Fo;(v@J`h%=Y~$TQX^_vgxCBGccrrN%#;Y{;|je)2H zNgP=%(2PK2Og1gHgWWKafnF*m5KxRp_9EMD^feD~H`?3Azt^0$d`}u^a0TpCc4T7A zs9#@=^9H*pP^bPa-Cum(b_7mQ{pf$&a8-IplN;=18|3$bHJw>V)lSN$j_r*2TuJPY zrh->3s@sUIn9OGPt5+q?X#ezCp3m}G%=!tU3wx#vq{jH0?o+FUtB zw6}lhLx8YP7%*&bbNft-cl4n|@t|xC#S@>-%L(K+COuK8lTgz%KDF6Nl?@thOn`g| zZ&haC?lcShz!f-zkQX>FPFFwWA9h8yAtgFzjnEF}1?U~;ShVZ+6KyiNzjzRm#y0&g z5t7jOS`=}?KD4IU&w}s$>*n;}I$D1HV$xCBbU-8Tu!q;#8L?pK?ZC+eE~nb7T-L{? z^eXxssctlfwhWET;F9rb@BWiVS@QFbFM}J%NlbQ4`%F>Yl>(o%t8q?Z{)@x_sLJHw zZGBQ^;TZ}u2`oVnpr7)5i5u9m?J0K~^=aByGN=T_-0gsEtI*)R_2G0(=%>kBP zHwjq&?#PN+7DyS~yiVF#&u~QSq@?kQp4BZ2Wl}ApOK(c_L>Sq&9KpVIx=@#2rRY8peJ>} zBFh=Uw?n|d^(Y3xB_*Dc;D5Cc7=lGeqW?{#<|adoLkE|&`z&Udo=oo5T)gS-y^7-o*SyG(QWc=C4CZ^j+%IyLU z_>rfadQK?HB=0&HRwz6TEy)85nzU#$5aQI(Zj))>X2xEk$Xf)(b?vb{lzL{!AZjK( zc>_WSGnob<5}-(!eVe;^;&)Mx`7+Q>?tUe@fl|R(KlzfW9d{#ldhhral%uAUQ7MPI zQcqKQP0fyxM5tOfZh*5sN)X?zM&<**iLa`;R9L@fx`6JSOVeGV;n2Tp!19CF)YP`) zY1?;WLsDNr;8i-L(CfvbZ{#*DO%IM30~7^yYv5SA@)dUR(?@;dX0`QiH@j+HM_**4 z?b@qMC-Z)WugK*YGz3O3{Ay8AvIqw5q)oB6nKCaN@Mq}6BD-b3t$RURvU-R&jM*XP zb3t7f>zGsr?LLMW)?Xg3ZZVj{z0mr+L%XqSNMzZ3!;p}qMo@A-5@FoxIwip^9$we5 z5FtY%8`HI&&&J4DAFE%$zh}3D#a`2%Y*VbZ@ATkQYEWW(;^fM#8hD-PF0kyjf82 zO3KC94CFW7omO8fs3zks?JUxExRN5faaW3b+4YHr>;>aQ`R+Ov3Gz*9i9+q-%#2nQ z`Dl9?JM6kjIl~y_3;khk?u2gcFF|_?=%e=nmpyAuVnPhZ6s^}3;TdT*f4;8bQk063 zkR*=%wV9>6wI8?1W^QjFwvDvd6h=kuJi$%J%Q|vWMJYi+BZYwWeP8S41R~OXyi&;Y z$Hhs#+;u30Z6uEhYR>dzubruQFI3!?^L8Ek5`-+XDJ;89c-TV%eLu(@)EL={ZaQH# zDJl=2X&jP=e~+!m;}}Be7R3TrF_6Q+JCVJ^{c3N8)Tf)-LsKrB-HrUpn^pffG5>{L zf&VLIK`_5INe}ZPYm^yr9aa#9u&emROCIolqX;GepKpJE0gN-2zm}jOjwJHsg$;2Z zUrs`x71pYrIt{u?7~4b&euJCJ6|SUynotJ5na$8uD~D%_z$EnpOREHr6UHl{+|d59 z?HjroGNl<+FbfIKl`f}Q+j&MYT#-ok?zSYLXd7|`M19|l*AVrHo3PAIg2CDKLQFAU zp^ZNX*yiVug$9S6?jnxTL{qJEe_ht|N=l!8t% zU2(#XlI3<&8`9p3-SAqw4$_7%6X~hifu>{H#i=nR3*wrbZ`JL-b9}Q@e1z=0%1<-3 ztDuB{8Hzfpb3+KopiT(N<`{NpJ_NA~X--2n`0yzx9ODyYQ6>42uBQ8HP1_0+foiWX zy|_(LMK4K0!i(5w?9AKHg{*GL>XfuQ4jn^H8Ur&EOcZM#`tq23a%dwEm;j4>$#*?ADi;lE#*f`0r{4xn-HJY=Q(S&W5uan@COzh{Itd$W}qxw=wJy!0I(6|XYx z9Ui%y8Xw8PIDEM%p<8%|uZ{*yP)@kg#9DoG?gt9a7(;B6^hI5m4xGi@1|4#b zKORbpdIc3oGN`@8Gk;c^bQ8S8^eAi~e=v<#To;KwVxL(T?Y_yTsJ#jeqgmdI-i*PL zM9>St!5uKEYJ<%R#VF?WP^WaL$m{_De|ca!;g0&AJmul)5wA&!>` zOvAr_C~*WwL(Y-taSn!Ybx!a4gQ)6BC0At1c|(?UvH;&XH?fb729Fsz_OEYRknn9gjb_b{ zYSN}Skk zcT06sX+Sy9`mq+GNkOryCW~4z8U3{PR>U2G8g@RPEbGR!k5mh?KRzhcale@LGfLtp zhq_~!662b0E_s#8%sFXfv0GDevNiKpO{X5kss8Jy(W7Ut9=+tV6%Zpa_{J=krhz!M zIDg}v>Tp$r0dVnb`Vfw*bbR4r1 zL@#@2LKJy^l3okb^q7X*eK@toxS>{jCE-9cwT%AK2cWMOYl)@v?4({Y#Ph}T94m)C zoslwZ1CwZWZ=?q;IN|3BMrEg_x%TX7F;hG7`RS`rgdpiw8FVxWbNe=4G90b}|&cU`U~8b9$n9i~~tRf0BCD+NP%lbNYOK8q4wdZq^AvQT@jai}cLT z^U2H?{?~@*k@NEb4+je-SV0K0A&oL$3k0W_e++e0*gBSJ+s9D_Fc$Mw%WzKGMT}O$ z8?V^~_&a~EnE$%(x8B4D5IAH_`)5IeAiN1U!Wtnwn5unqczDe>X~-2rW8&R9XuLzW z_e8M!+PgrIq?A2wffr!rxcPTpE`va0{vtq0X{$Gp{}TnM)jLX*$~4H@ zGwvB!!D>LpK4>w!gw(=YnBCg9mXT(>x4NI76^n)9`JSJGV!90l1p^GWOE3?rzxqY} z%#$+(os-|u^}3DhKDu{{9yD5e-?3)_RDNlUB-Ta@`a!~ytC2O|X+5~qP`lwq z45kDFg-o>?l`3n&%g#_AgG}MiLZfK=+g5#SNq-M$0sAU#C|jT#iqxsGl;tfQg+s0i5#z_2L z1O~w%MbDjLxCA+er{`d`JL~~q>QFqPA*aevDne`O1A7@N1Q{yGfF9is;Ok)lAC3m{ zr(5tz)N`rZSaY0g%`u%m=s}of2Vt%m8~|KS)&I1JqMjFuH{XfH9bK$uIWcMk8NXvZ3(aOW zgWDp%d}TgISj|NqI@$mhhd51PN;4lUy4-IK3Z%`SjXMyHIE^}<^aS0O8W1TgnnWwz zV-l-8e7ZgCZK;-S@$LBAfV1v+l=$*H3n?8*>Fji{#Lv72>D zr^XG_ZzxUDp0Lpf^xnAcMF2@E@>{5(;#wY|Jh|11L}ze`lDUV`K74F#7V&dj^arJZ z!Nq8uEwdw6&d8cSs;m880WVgi4)D+{xpW-2HYg69@*~7^=fXlsL1tZ?M9ZLti3Hnn(@m+%!zuRQ z9KO!_Eu2tdX}rbQbF*nBh|Bl@zmEUNZ%#A zna7}GK6tVB;L-iPm%bs*MB9|OX6Q}7X?s}wa5V5p8;t~~?=jot@6rYbN&WlD=jq=C z?YnF-k+eBTtc+;0(x`|>Sc;1H6NU??3Nul@!{e28p|37ubib9J413u(hc==z?x3S= z5IFo{GK68TP5l6li7cV?mE`sZKC%0`cDH}2P^rt(Mn^&$S>Xojm)#(#(_Zj$Tudw! zfS?#scxnVD4^N$nKPPqTlg9{V{fIQjfa1||nz~3>BN5OV;T8I(%V3sKS#sjL(YOFj zaYA!2!qWb*)AGVNQ=)?}3+tRGsSkXsSLO0WRW2uIbn18?6L{2!JG&i54lz}sXB6~dA83zp&xHeNc1>1}-9x7XtPY>z1h@X@n} z67NT01wl#sXfb?81BxN_zhzYRy3|M%o5zulap{IR?M zZ~_*@1TtrcM(<8rDcn?tceA%4pZ!`d=~27fg{UsjZK@R(+^ZDPLfrK~>ua1XMV7ty zC)2mJ=A4_$8$(yQPs4r7Up09NUwZ(S>Um3{iky^_YG#&GSdde;Apcw!)!VvtJplVv zp;u+8Zt3vgiw^GZJ@^SPbv?8pwvWT!!$(gZz0$Ag_fSXx+!UY>zLKM$|B>EcgsB>j zKmCQCd7!R;#Wt|pg)TD85_Q2yn1XQ82=4VVkj-b{75Mt)6IQJzpT@G% z7Ul=qbJ&x?UCf5$^y}~IRrNsunl;L*XtC$V)x{jbJh8gF!5Isy_zHXlPC2XJ$wdJC zY(^`T2$`JWbOqRd`j040kAI1r<0VR0O`1BhnIv*h8s0rJ(`J>Ev08f}d{j3g!r$tt zYyD(t=S~(FwC*2H*=IwayIU*7aApk z{tj;+F%LTQFj2_TP-Ew4z|&WC%<<&MgA{T+J(w3uJS$D)b5339r9;Jp>(IZ~dG*22 z==E}0RzS%z1gF$Xm@Q25B}!Me7R7Mr zbh`a~o-dHW(%x(0{gp_1RZ#HUpkNhVW$_+P7Q8H0qk6^h*J$MR+C!*F46ZLl!tY^| zJnyD1CS`s13B4Y7<$m^|EeK-{;(>`;whVSa#@B-DJSKCq9csh-wnM?^t94)DrEtmWw0xX@7Dg)R2_CGg z+KU+%G~$cU8nXj;Y+7hff9{yS{ zn<$2j0UzUy;oyU`Lv-1isnLV>>ycyxqQet6hLw+RakQmJrvMi@i>R-Mu(K31hDw=? z`f-qUF<-X4HDjdX*Pi8kGR<|SpFSl0E)-b)*RW@P{_pMyvl|iybjo|$#-xxW`N!({ z!is*{(7xmO(|mU1Bl(z+a??g=;XJ|W`yXD>b+n(ISJ@zuXSXY1Z@B)(*z4y4kaG#U zTqhy=Qy|-2p)`>BLgBMcxny&e^Vf1-T`!dhZ4AuL6eE?NI7dpT-hSMqcgB@4vT#li zVTr$T<8JuI)3eYF&#Sf>2CZFdvJD%o?KD9W7P;C*h+rd$Z`+ny$P?hvtEW#g8N1;~KHh2N$9lTp=w!aG;*aWbG(ll8 z-Irb!7kRn%lolf3f|e79#Z?2h&`KU@(`thNLvy+iNJZ!|iBltcZq8H-_K^49{-wYF z^dFyod}&h~2Fqj94Lbpu39+NIN@&R&Wnab%Y_yP_dCNeoCkXX6VZUgKBEC_eZI~A* z?dOxa*5!bu0U7ivzu2NE!*O2nw&`@4N9(pG;&QP1FwblMcE2~R%9^<8R&+7J-i%Gl z-f}tr@Yoc+o5XtZdALwq2Fl9y@>4T)Uy1=pH~wcXx|4JpO>Z)Wt5W+h!>EhjXvtD3 zrAo6aT?2GAKOOUmpr|xZ@b}q7wIWdojcBz8a0CdH_uxZ$7&js!NpVI|+Y3G6MJr0! z#kkSHitw~C(s~3*V_+2;Dq#c+If+e!{Grvr0p%iq(iYzJ2C@atApR8u3;fl0f7V`a z2^b3@Tlioosj|HL5+qR6FJ&_die%-30=@=aN6oj8EXk}jMW!0>gVQEkjL%%M-)AL0 zgHvc(gsaU?fLT$)F>9|)U;()IN(XNJZ*_tCO>Q;uJw>?Sbh)0fHkvhc`GAXMf)trcHjPTyL%WWS**v5CltFJbb z19i)!2miI@<-;Dy-9sOK7&e*pMu6~Bjz#ni6(&~NtDvF#y&>(5=K1SfrMgp_(A&%Q zCcg9qwt&}7^*uc?#TN;k$rklJXwq1ooy|cj z1=#*?z;-JhrKZDku1z%)WQOz*{I*;Uc$U!~(&81G-oSALA!^Vyv~E%ItyHll zCQvks>1TM|__e(J%BZ6MMc+oMr=@~Z;SvEucL|BB3M zTRMD>bzkbLVrN$ppUFo6&PnBB{vj#&pb#9797opkMIjp4Z5Msaif!{!LT;tzH9Rfe zHy6@36uR2rH8Y#=xDectJ&Yo!eg8@LCvH~e(3Yfd{zgV(0*;-ImPmsL2$i8rH+)Tz z`!q<&+`T@d!nu$2JwpGhm7%Y7=0>tUV|%P%%ezM*MN((^k}s4(Oa_K&Yx~C z-(PVfg-rzL9kkWmv=~r>Y@~ZX^mcZ{>taX6bXTPq@wrJ0k?ZQkQ%;VOY2=d2o{}Kxz zzx|tJAJZyWU?yw6=8Ow+xvy40&X0G9_!cd12(%8?`7A)gf^RmE5nED;i+Cdw!6_uP$I!2be5(MTSSky$O&X?Rj#M!ThqyW zUal2shQLOtlN2|v;+8HB)+ZOmiZZ7PfsGQ&(Za_$f0O7{PS#(d}SH3z%zd~R1Ot8P*SY}jgZAsJ&YaJFx zBhX?2vQO$d)6!2IJ-O@9@V6HECG33xS#3MoXrhTKw85@$P5_GOR-5%L@S_ig?3&hM^$r?hG|&_c%}OY8cA+Cx zXwT5mdpJKn3_~qf`uu5PED~-9;jBmJ=(H4MQoDvU{Zt*}=Yj1*0^0(2t{;opEMK&U z>gIu5%6QrVJ3!!~Ei)6F5 zfl}N$=LLm?lWFQW@!ol18Hzf#zoKw(UW{q*38oB`%~5XSIL{j9x*S>_*v6trOjxKP zG-ubCdhRrBy|(KV$dwd$HVoV5pP)K_T4ODYU+UEXY!7qbXb{*KY-TKjra-NxkQ}X* zHWgd4M9QdMV{l4Wr!{h@%gO3%{DOG0Ll!T;U0S;V)MzFC1279BZ+-^I09n2az*3SW z#K~u7FIAop36L}u6XdLGOpun#yLMd8)#T=Iczv4)86$)c>=rOav)DS@?JLw~f61}C z+paUsGg1h3)uox$kuz-r>)#N+gaSD~q&BWC3>mv zuU4H_E_0CO@vr!j|Mjo6Zw+d@S*{(KO}u$rbg%ssg4Qo*~XG zwmOcD4x1qx6u)W@F`{!gF^(x zQ1O8nvmussDMUjrg&-0|An&4}{@ivtjGx25Vk$8gwE!fsu0Tp;ws0mDAnW3u(3JQL z%`I@p;J9~%C>SL5^;G|$cwDdn=!>#z%&$9;4SYcnceEVuHr(-p@9G9{V!y|- zAvo`g#X4_ucUxEiwnk~e(v#pqW-OXi;?_gU7DN$xq~vb2lA{QC7A7>2l$V~j5MES^ zlom~fFV8b4m0l!E={q!sjm2(RY2zKHLKhRV^PTK!2uU4;LKI!X?p*yf^(M`k_ z9g;E!P*1C3xoQ?{r? zPDhvwCJbq_IrRQ8h24E!=zSL4aAF#Ge~msYG-3M#7z}~=P*lQf&g}5P!@XB~he-L{ zhg-eu=qTIW7$VEz`OfhC&hY%(;rVyN^FIyG|2&)(?>-+ybkSd6#0Ssyh8=fgtj^2$ z4D~g@Y@KmUu!(RCD73&5;Px<|qn^n4F3UunaFSSqMSh9m5Otd&1=G%8K*0#qg%87N z__6rgu+$`T^J2<*yvAg`D&yz`A)~<}h-srLsCkTHHGeMGblF#8=;9x zhS1c_wPsPGHGi{IX+(caq+hk7O`vG9w!YytuWq&VswzL^vxb37b|B26Yv=aurcBVq zszXK^JsCIyUnuNT6M95<&v||}VQw_mGN@P;Hm#43ipD;?sB*0d4(rl{m{LeEKKaPxIrcexF5o7c8zP<4&T7o#J*5&hvcrq@2vU1&U`T zQ|iiwH=I!&wlwzD-{IF?Y5BA$HgYdF+o^tAEPt+wRS-Tr9cz-`eku&KaKW6rjqsIS zlxF3$7sUmka6&d*)`PnC(}r;)@7S75=#gMDdRNrNNii>0UKF6RI{TM>EolU9SWu9$ zPs)f*&13{uWF|~k?=GRL4GDN!sk0Ky$%0atVOUm4BztTQ>nsQTdIZYD)p=3N?)HRV z)EaqDQzgyF_%#(*HMe+qsLdwv z&NA(ZCY7nWKciBU*C9n`RD))y4L99RNwvJEZtQ-fexZW%cK~B(&5PM`2{*S8(ON=d zVPqz)8cNV+<86U{T7d@!+qyydglJQfJhkO$bqxX4k(@FU!9LTL0OmG2SryaZzJ-G) z3b1rpanzofPr!^eleFwuXBycCIQW2F_(k8~>2a>h9Ali=EHsHufRQQr8B_3jIWI}{ zT!>o^dG|~Tq|9`Yk8@zKRJDj28g(?lYWh(V>3i+E%kKO z!A&ops+uj%^{nAtDd0LS#+a{--;p`e9^mY)CxPO^*Ynxy+C*2>CCrk$7RtqeA(!K{ zO%h|6Yz5$422Iy2Ccg*gMo(av!agep2Mn|i3cW%xVO-PsI>d?=3Vj_|s}JK|Q>{-H zi*hv~9(B+BPRzmj9jdaA&F@56FFA)Q{n|Yx${#!a^I=ghA!sz#G|haR$zQo5a>I!K)q0_LZR{LDgo8+Eb(V(}^xM`?i!p`ujT1XD@wke>Yb|kSEn=(NsTUzy|5h9VhQl+J{B~+7Qj5t@{r!zC5U-DQ|LUamBXC1a@EzLv zA#04{(2(yW;dhs0zYRs2&D2$6J(;JY!bX%BkA2_L&AYu0JsTuHPHs|TX&mA;pzR=x z$*C7`x0+mLaSN!O4zdUN>4fqohr=+z4%yA8Q$ocs@z_IdrY?tW=hsJI`MeeP5LRlE zBb$1|(Jg5D7FcwER#73=o9fLXYqTlWexbz9@|Ge*6XXVlOdxK643Lli!NGw)_+xG; zX#_VRtzkJ?6%SW;tj5;H?tH@)N09S0uujw<*GfvC_9OAd$55m(j$|C6n)tg0H8ETa z-ajla)SXL|ji^gJ7hp=xcQdMgZ$FnWoUt!kPt0b;K!kS%1tPToyO&oj0bNBsdg zY+C4OK}i6uyI(`82571#z9tt=w0Hw3Xo#A46UE|#0tU)bu`z20k9EBsjaY_>WcVPB zOhy%g4;J*Qj21Lr4f=zOvmD=fEQe|uIF4$X4Ff>6B*FbEWeOhY^7nD{PN3k{xd0=8 zVl~f)J#w6cEN}Iyynw;gT&zbhkSrGH3o}^&l0&a~i-{s08JVeliQqd{A2aXxf|B>k zY6f@9?6&s>{E99yTLdofRPF2xAmtUoIgaU1M3oeoz4@&jO13KBlPF3xHaR{HC#T^} zuO$&KL0hL9X||pKY}wa=(NQcl>^V$xMAN(p8N+glhUlhc1+(wrZ2#eVuX^>O{-FKT$<`V6Ac2-%G54m;2DI`qRfje%;%4gS+}l zZWg>Kd*`dwaw}IH_Pe`ZYl5={Q~uhVt#`jhV;GqAZf|-HSJ2hn*RLLL{grh>a1OwC zA76&V%Pxgbnk0t;1MU~p<2=ZxYehXiyeQ|z)RM?1KqhBwn%bhayvYN=JNMlg^xKF& z-=nmzm{Bhpg4hJQf!+N&^7k|42z*!+tyoMOoXn~Ysvo}Jh6?Hr;%z4GF}D{IgiSnu zOTN=^=cklvE1(^7^cQ_uOwW7Bu7OZ>)I%@c-rkc}TepGlRaA1m9P!JW8l@G2FiPuE z{8%DejtrUgmyK#6fwYLiQ}C)j6kn~SeJM9)uL!qqVRuj{kqQ}KKXeBW9-JPR!#JCO zmi_-wX zV%Yf@5!Gc`Kk1!DN-<$B%?=orRADW632$hTTzI0=CRxO)db)wQ%AA!f&!#;a4U!SFJ($3(6N{K0pEZGwLI7BjlIk5lxDwg9gHf{jD^eB}Az1}w1^ zJZ`_)zPYUkmLpb6GY}FVDN1({jsQ?kk5}Otl`9r|RWH~X3O6YSJF;zKiFa@sVaxo z5;7LeI+cP3DkWUpKI{#Tws~m8z-gc(=7(_UbKB=DdA{IY+hMk<)QidVt!5}Z$`Q^E zO4f{&smmV7wM<7w1zD&SIV)Q5! zt2^w$AD`y>Ga3Y=hGo0?ZQr)c1nKY2AiL)fK@x=rJD=2jf4;hysMq!(pe_dJ=M1HX zJ>5sQ0~HqW)p>rAw=UvJmkO5*-|sR9a_wb>Uj|b0FIE?gX#(VRm=a zg@UMmNPTh3tcATKo6p2>3(!Vzr>Cek@%!}f!h&vi!k1`xRK|Kb$K!;C&P{wnuUQ@Q z@SgB)j4`*!S(;vjG742CA^9S_0h#~HyjDb*qfeMAFN(nstO$$*s|*9_WLzSOxxjJS zjZ2Wt8GFNEbWXY83y<*DU=z=R!v>S}{AomyfH2HOKa%+Ht^&BqAPgHBv`(@8K=4P= zyn7S2+=-#0oojEL0D51Vy*!WC#pe^ANYbRE$uU`wc>IZEY9M5~7b$Wi)p721MQsy& zT%!+5loLH9s=8%pl{cYi=}wpHxHis1U1?2|_rzj`zl@X;hG&sJXogl23u)0GN`5^Y zNf7M&Q>f~{9Jk9yp?HmQKh`w}GJmZ-#lH_$R8-&~z^SlY4xPbX+C76`^-X8cAYJx# zdki*d`?LTPVjfpQgP|7F4tvJWsjKVH(DJ6&x)zzsAKweQAj)c^8wDWC^UKAHs$42Q z;e*hq$1@W;@}V88Rw6fFT{x5jvEI=h4@(X^NOoy*f zL5bEM#O763q6R61&$CIl+iMemj3lQ4NTF2CKaCuiaIgBZB9Q2?fDRD=6AecYY^BsF zgxWR%HQX!M6iL|ErJ6Mkp%eUlX<64JRmN#+!dWUdY`u7!*nb)tiFJ={F~cxlYpTHF zCkiJOlmW7O?ehvD%?>NqqJ&YC6pcy zg5cupqkmKwY4fjTvFK;L*iS&Rde7feoQ>n95iYX@iR0RE-42p|3c~R@OG2HyHL)!w z6g&|az+9*o2B>j0M0@`>;e4pt>!eTf^)*Og(ki_;EOX3O=+h(#zs`@)d zzhVN<#A%d#Wn83ilr(j`2@jBd;YM{{AmR5^z;RfdB~E+X%k=7OGjeDH%a-eEstBX% zD*jA+OEs}gZNzLx7;YzwU!$6hKttjWAcny-LOo=1m#AVRGjy!9!EWiYXP|uoA6O-O zo#{uzFZ-X`^Z&N9g60-;M_ADI<#dawHG^M$)@lZ8DJ+9gK;n=$T!Q8Wz!u#S(4)5q z^ujEIxV^4A#@q=G8!eQPLn8!74PK7CV-+27y;IhIFoUtzvX-lu3_JgNFY_O}tSrfq zIuzvMqfvCc?q2sE!5zPasOMzo<%?j_u}RuOzI?&XnwSz2qqWLdo9@l1sIb}y(-(?E zYOunY<^47R%z($VpUgh|I9bf*c{-;Cils*D1*XY}d{c(t7_VB%hOD(%!AR5Z$L6LK z>K!7zpww%GKf&geM4a(Zt~(HJY;q;U81O~fF=H*(1mBy$@4sWs_K+kj)`%>4k0O=q zZW`Al(}tG2Ey_}Bc_(?EP}HOOv@0k3 zqZu7zn15sey^!8u&<)-k&#Qg-+?Q6K?|vGzuVSJ%MjwUUWW#`BfTQBr0+%1Ebg3+6 z%zYGgw`8fLSW+^^#qmZVx2{Ae`Eipt#YwyUlXGQY7_=+xJ?O&b#{mW+U)dN(asP6X z6jQ4uKMxi&{-zDaW_ImqP{-&uk82O((QmCrIQpQ46881+#Wa6DpHU76KCt+^Mn>J% zZdkUqg_4X-!WE%7Q-2R8ah4o+Fgz?ko*AdRb67jq1@nTxe(EAr;^6xL^S;G7LAD#TpDUf%qVA|wUPPmR;!@kfT z+7Eqc0+ZS77$APEF;g#VVirQqDPaOp__G8;)e-J&H0(9{kTi_=_yk@4UpKp>qz3KB z$Ff1_SkNrvhA?QFUwB7gKIy|KzUeWBkB$PuSh2?O47Svmv`F3V1`&bd8`;H1AV4`< z$>5iAs^E=*3@+F&-UYBTIX4L4#Aqk!iw?Q$P$=ZxbU9oN{7y9(gJs zNisK2+$Ryim+DgboZ{UHG9tb;jYD{2DuEyrj7Mrs>>}SS*M!f@Li!?-$7ps_N{D7* z26rs5KvU=V%OHDJIusRF0?=a;nmGRzTa{SS5(f_CS0MqJ2@oNB+(fjn%AoBs?2RD^ zBb6LPkbkg&hVUVz^4S{H$uK&~&&BHe!NEZ$Ot!gpzJPA`@p6x8yL2wG>$dd#UF__;>uUmFc9(8S7E-pPFN(Sn2wF}>V|EbviWw%!MqX~ z6#`#`yrQ_|8>YyKa%6<;S7S7DQgoVGB|r^SSZCEpB}+@C3lNW9FV1~9*f3#0L(w?? zS~8hbbMl=Kf{kPU55Q8Gc_%;*J{K^r@{8qOTPI0uHh|ETx*#_TscuHXSsJ!eTCFs_ ztF#FyIBW>g+1Plap`1=bWaf+#uR0}aa|Yl-@^2DJc!A9@ofq7Cs9aM5@N|N%tF~3L zBoZSucBDcW!0x=f!~?uJz_`T1HXCdC}~-&3L^7mRvf!ms&Ex5UdHx@OS% zYjEVNe-`S;i$SkCiNj>_6>S(U283!V2uw+E6w z0s+nvElMu54edAxM=R@AG$=;1JRTyTg!xXr*y9~ce$CwYCx14amA8wPs2C2-TMW3e zUienIL_kmye}K60)G6%%SU{)0^omRA($e@7;Eaz?9De{P2x6cwA-*)|vYd1UT`@%@ zWw1N1%1iVwByD~6$Xn+(nZMF+GR1kRE9^UUAk4DnDEFca)Zbp+w^Wx?rD!`+C?v#Z z_1}2#7&;!Uyws%XXjyPlaXj&NgLY%9`#weMvUm?LUUIM0cRNE7`L0c60A{|!;kf(9 z6ZFX(s-Y4k3cZchoP2eg+v(|e++jEY@GmJu8qwro-<_PVp~Tj2S>2;L(hSC523X<76@vwR^$Q&GGqLbP5-< z#$-iJOl`<2wlY_7g}`vxaVo7r>M zsj-Sp#pS(%BNyL6DrS5Y#~i3%sGFH0Bi*u>dkNOyx^PluV0hstRfE@W-tXPc5?$pp zOd*Dt8(6MmZi3z-Vn0v(1ofakunEr+sq6J%S-nF$^dkUO1aLnKy9bhf08=4q10_d$ zTusiPBPsZ4dTK&ew=U`2yw!jaw`FNlOB4g2k4l=?6NTkwTH<_8^+!G@9|3I<4}{!F zPbeB-tG3!GtG}LCe>RAuJ7AH zdUJ7=;RYzi8W7ROg4Q-LxPBKmy!k5>@Sfm0;(CaEJebrujQ=Zvem&247v8sW9@B#9 zJfAGq%ZKHKh+s4Kz5%zqQXSCCFTEj#>6}G0ou`jp?Io~G$9)F6VUkb5>wZK&I-y-L z>xOQrUflvGR?>rrpjB#E8;Fwb5}wFZ;GDt|dlEqVvu|tg+-rV+5S5--Q1h}6Ek*$r zB0OTa6I)X&lD5CfFX}MjrmqUrZIds=S(Pv0^Jog7d=`pYr->aj6)@+?e%2Ji$s9W! zPhrqZddDqnKhF^HennLiWF25Y2ST^rB<`XU!@&;J&WGvqN*J89MmJz(IGGD4*muEZ z!q8&|8NzPrSofk{2EK*CP_f>jUv8_na|DU)@m)PHrg{JN5QFMrJeFGWs3gnPCq=yD zV%~wayB{%6e>UoAx)~StR~|<#z?E?;1~A;DFpay3$@R{EZ_}q)?PU= zWhHoWv34Eh8}_QjS->`;_0vn-Q0gND&|l;)F})GLnS#}Ab1~Z#@c##p4}>hPyaBi% z@47im4!f9@T8?KEyO- z&mz2g$1f>f0^?$?yZ$iB}mpv%VQX#O`|4 z?)gunRjC&&g`5C~CyFLLKm8J5z-9Oip#TisZvh3eGJjgkW^*ZC62|4K9Xy0RrSN#A z!}sBCv^AmRZbY0Y>8e&Vxjo>e(WXM${@raVbzi%EWP&S6Zk{w!H-kC5wkH~%7g3We zr+0cVJMmy#d7tSD3R#}npr3q9csQ6?G#X97waCjRof0hz(E!-MNGbs(GV4l#)`Nm3 zMhfh)zg(JH3{l_Xll$^Di@SQ=fAo+2XV3PZ z{X@01GweNj_E7z}!<@l16dkMbQoZ3PaZ&GaFq+InVN{(4+6!@g0XRhE~(f#bow8x0w4t&*I z4HSJ&S#-;PfkgL^8p30$NxBQu!Mo6t{B-qFho^KSL;8m|_$a9W8?ZrusTb=lCSj(O z9-CL>IcvqlH7ic$>iVhk?s-(2-anJWzStogdgYE7nAjKR{{>+BR@{iwD10at4lPUc z#DWxpJtI|tKVBH@KQ0s^>_Vv8o^QPt=+HeVfIcyQSCnh>G8=U1rw3h7XPIat=?(pR z51DkdiuN9;?LH*z`82q>(S(4iZZerZ_4TPY@ViS-E}%%52uj)muqSbIf`j5J-&@So zp7J|BG5;Cy17p}AA4N8`|Fia09SxkZz;Vb7C!F>5eSU2$d-G;v>> zlk#j`8*STU&Yg0->fTR&8+Dm&104eGNjA2mSr+MM@y6nH6f2rs$veDgq-D~y0vpw8 zb1O2xW98{w{(ApqCVDEsQ)h0RjWEw+pB4|jn&h?ic0lE%~sD#czNLyte{hOSH`HZp*z;l1V_hMCRhZG=De4E z{~E;udLhQZ()Y7(4((<$5{1C|FZLmTtb~1nN^P$43%(6^-8V2WH^1SUN^{!vE1RDq ziBfoxP$TdjvVAgIl~2mcym~MJ$qq8;97>qvTXoSl9U7a5C;$|INV_?bXgF}I;wN;I zzq^Nopt}v!{2T#gv5+P`r%XfJ(*}V3g$Mu3$^30U3Sx_&tlj?(pRDH%5+MS3!t7*S zXu!I4YHa^=DWew@rM~~+6?q{j%xv^QZT8W$GZ?h!S%GyBmD>p&)uQ3B3On_!943n& zCt5OGnVmql<-2mS zj863HNljSSl$AAL6`~S-eeR)oDaSKJkATG_G83GY0XY3G8gFq>2g3ER89EZy2jlEv z?_)2#R*!+ZQ;boAjI%*{5NSUlMYf~?4TJ%+e5I~wb;MfKfMLFZlbQ5by^dkBhP_F3 z#_|dpEJcATQPY#Md<(B(X!=^mk_k7kA;ZSY+V(HKPrbBw&xrP7RY*UUfrVG?E4L$S zBp=K(-;~11z)mG_j@aZJ7%}0AdFX#6p$+=2gh`6b7Z=G?Gn>x#$%7`yEx)gqlSQwX z-Tm4brheVCNCr2KyI-41U;psOKfHhZ=<(xS_4m&0+xK_B--h}>SivoZekdG5QPVu}cr{W1CT$L}LW^78l3Py5-& zn|SJ6Wm4i`C$6`}Qr%IrF8|`kH&o-z)i&SO&Ta!qYKw>&ns9y@v6LBvaVR=A)-6=@ zUN3rQZL5N0RoJ~2-lM9_%`ny!Wh8Cx5Pk|B)@8UiKF7O z{&^gJmkz81UmTssL0kO1Wv6mW$wujQd|c^xx2ZKq{HtO-SN14S>)#E4x9px=)jYg z=MmWj<{4?p@Trr<=twm9r|&cgdW39GG2&*!;Q)p^i;oev>*%vH&bP=4YcUfJ5@vh% z{@^~R#_d=3twdr|u!hBqth>4?befJDc66o4y(Gtry)*)er0hlGNfui@rY?*mipx7t z62k;8;NV1sdXeB0MYORXhKoPH1rmS5C!*FJa3IN?x!kR&{{?K4yVdGLVMKXMGT>-3 zL7eOtC8V&ID*xW^yHhp@n-wdji16EP+Tw;VY4v$|i7-I?w1=Q%qmGo-?Y@zYnIJK} z-5h;-f&Q>TXPDH>HL0&e9-%uq?D=MjX;ERI#bmOSzi~8RJ!{-GeKcP0BF&>@Z{sTi zjI1)2OGabZjr$1|IYMVWUI1+Z4CG zq$)H}f7*+tq%*K(^_un>VYhWfwNOK7NkNm`_w@$Sfk_@ha@yR6|IpwLwXUz0jW2#AZ@acLs(-dUsQrzOl_yR}Rjt?vp z1u|M6g;G2@Nr)9fMmv7rmM)-rw3e|G($l5lPNXjLw#koI$voeTjSBrWnYjYDJu+#^ z{e|pvKt!S|+aT4pP%zI%e3h^*b_P-(8%>7QEPSJ_#ROti=(|F~x(dHVk<#QS&-7Qi zYj`6jgQRq)+*n5un;Eb#kStTt&uLDV6FWePzu75{(}Vn!Du1EI?w9MuY*Kyra*h55 zEdrnQ<(ox1+1T6$!^7+Emm3=$F^^Gb^<`T1!o&F+#>Ix!mu!#D(HqM6vsBcc!d^&; zxFb)&vbvm9vxgh)l6KUNZYf^?v%9zX2TG-5PC0>c>7JW@&_F znCgpg7@;5YM{^QO*gh8DMi$5D0-8^Y(;}ZeR_7n2zvj-_>cum>AOn|+HY3cM$GE)f zwApF9AwTu(%gH5K3!2vBj9)skGTD2yHJSfAv^4DN(GF<1QS&zPL|KCxD2kwtH9O42 zrVED>qoO{5^uMmVp`OElk|KE(1T#n2h+)jA^~DM5(<-$_HS?iEGB=q*(73z3r<2wB zXjxwNcW(QIgV|y!>_#`-`$ji0=xys?LJW}?dupQps`rGK}*7Cj4 zvY9H9Ynh%lT@UvcE3f^X+XFSizuZxS``e$r?m!HrKHchN%T<;NaHCs^=40i;fbNec z7ex@a`_#UU47%JWcXK^_lfC)+&6}g`Gqu~Zf%`CgQ{Tdu!%U2WpmyX^-2vNnofI#_ zH^F`Q{3#xgH+M$rCta#Om=q1J86s!WI2!wpLEx+|L~gBkKGr*&p_^%XQBeiHr>y%kfL}ng%^4HJAY($3D#a z8KBe_WJt)Y0A7D5L>t59VX25zU%=a;(AFt_QTKT3u&DO$82^okzjft)z;$b_LF}>o zV^ADcqyRGZHT#QLLJ*{9M;%&ZujBcTV1bc+(~mE{4epQkJf{s$jx%E?d@RHG5-4dyS=|~0_OKtqnU?G$cl3W5{@E|T1qBss$(J-xdGL%{wg(K#;%Jb z>{q=KhryK4^G=<@vFDqVd^$LiH)yR%kQ%$vHJc;~#jhHf1N60vc!PigE48t_`fHNZ zzp1}bhyOR*A^U}N5XujeO}eFVW*NPVLIi9fZr$i39jPIi3l>xy#@87}hm1eGQ3usP zJUdk##XmtYV57dyb~`{CN=u>dN57WEqA&6}ry7iV(`G-j7^tYC40n9O!O6=iI$1%| zZwkRqCn6~3(1Z@_jD;oEYj71Or;O6S2vhs#I_tOr+R@4m@vIzu>E4R@cjLkl~e^ zPi3TTQmYa)Xue(}h;X8H9P7dw4WNcEMc-<&LkX9MZ>tU{Y(F1n(xhKuNSlON&YUMe^Sqn7X0~sepW2lo0s`gT?SSI z!+2Uv5SX3cK)Y2iX+Z$(VE0d`9A?-Vrcl?wsZX7z^W#* zTSw*%?(pX5?^Bb1uZ!w!?WJ#rgU~Oq;W0hE28CxF)(BVha4HgaPx@`A+XW%bYIyUq z_!t3IYPk&+KYu-A6RH18))V*1e`r0)TxsL=Y+t#_Y$jeXbXQ=xKI}osaP>sim@KR5 zk6Nw_NTeqU(o6tr+rO~Q=b$|o?3?1seD$=X3`9o5X2i2})hz2F4ED$_E9whq9Lc<< zgWYR@SH7>fIoH!N2J$h0H-d6!ROa|g9H*P-X4farlbD7)f**YxHmvorhr@A0yMlG# zW~an@xh$(yK5L^a8}0K30Eu(&$~SZ-(`Ht`AE{OtiGm_LA%0XJ=YitmKZ2Y5tW1bH zHbcVe;hX^v65Rhb;NeHle-J$9llnn$0sb<((FWCN*pl6c3Duq@&1eN?Jy4je3)HBt z7qk4dScFW*x`?GkoSAo7&k{`-#|A%6i?Fvv0@Cr`(GI1eCd;*_NN1RtkR1EgAC41t zV=PIk(!FnzkW>Fr*TSmEU28eJSEqN+N!sbfRd4LAf+(z%1ngZVfkLnYFK~btjXq$R zwD24INri+Y(r&&5hB$IDvff#leh-n+zvFaLyZROL+Vsb_a?t?V1thWd2)$l>N z{4jh0UK*_N1oKKkw5H6o0_nnTRP1z8%<~z4ALpbsa)yv(3M@$jTcTx_*rO=ix{ACh z?b!hCFzBU%3FvRA*)b;R(E<#B-FQB;TV0quKc_A1Slkz?b80V;?W&qA>N&<%`QPQb z>YY^OCB*8Om3h5*ldXC+wc48%mD)wU$rSugdaF`lb>5rKi{(imO^yYtsuajRFsv!$M^;UbD`Qq*Fsu8fe` zI14*&inho$)EX?Z-!|@2-;=jJJb+vEe9mLQ_>oG}zGw=b6M20CJ4Ydss}BA{X;k8v zlktLt;*YpYbcE_YG6Y)#rTTvr+gF@^fZ#Pl{rdqZP%86;A#KdVW5w5)-_OcLXUaC2 zD+=y$i}m`19Oe3d2_}y!9V(51^VUH?V6A}C?Pb5xSh7agkc1(d!yKnHxe8}xYA56j zA-fcg5Ug$FG7SrYRe>fj&PpEnRT4PpYY3)u0&tM-`;3^^DgNlZ>&V~j^`fk1d6ko7 zhu%GRZ@S_Dq_{vkTlhg6Z1<~cpI5rIO?EDMe-9x?>2N*I1la0EW01NbLsA$jB|1?1 z)`a~Z4|lfyeDvwXr@e;{Up_iG`1IoCBdg+dP1-;k0|}83DxCG}M`*(XMI$o1_J?M~ zLN#nXWG(w`XqiNq`{jH#++Qgyn+{)t*)RCf3=h;+f19t)t8#sIK2)c1Ue(j8SgzFX z6Z+K!iDJB#P=gOh6;y~cFRS5?g@OwGmO4w^8XNnSl(u2_Wc;;ZkK7zC8LnIE4eVX6 z(VH`j>fGB)BxnSYF3Xpqi0z9ATt7H@{c~Lg%yj!wWtbQI-&nI5PgH5_WkcxMFalxE zbWH_u`7&#s+ylyM+c-0dJY}z!jW^3+`?@G_Jb;E5vzEoE6a&!&_s5g)#wbpVPy{IC zhCuZ~Vp}k#NqS7kZH$b_%RoLY+vs1+yd@)scciITO>m=HFu8~Ma&>+U;7!Xl@Hsu} zJ|N7b+iBSpB%X!eVS!P0D031H;?^yEC5|-_^aw-zE_l$8HggK$oEr8TLa{c&eM69^ zrqD)1FCa*V7gJ!vZdu(R5>;0+Zin!4atU!pK7ZzxsAQ{R@!{By8nP=OstKkb5T!Oc zrYpPKZqOlId($K}tNCv;6W&vB~QJyG6?t41yltYRThMCO783@p|q*nu{&8z&wblyF;39kM4TY5Li*S{ukur??PwBk zP_Ngz3QuC14B&>YZG={Ma0}2wS>pe5=eBf#zM+Q#Qdn0xp5zANDoNJ6QPY#7%;YLH*yRm^J|k*DrZmT$83Yz@&}UDQ^? z1lg4Hejf?exFuv|Gk7UlMI&r^;ENH9Zy~uZ@(x&xi%t5Gf@8FIr^tvp-XE6J^+n!z z&PZoumNg!bnmXn8Aw1-@IFI{PJJXRcjY%0TTNy8!pVW;?XCX#F>iSnpH(e&u@7?Pi zZcO#O3MSRTQEx0qp2LTHhNWsr8;5Fg94UGO;jN`^zcyLJ2wCrrL)BqJV>$7ayjIrt zsILd5FR0orlr7_~-n&Zg#CIp z*eJMIF`YFL$F&(Z6haL){1~k$bs3d>{UifcN2uLi_xY17l`RK?3hJu>E}G3 zsD>}k^L!2l4cM{zyR5(@Lj6$v7mFpfjdA7`TeR-Ys>vC~BEVm{+CcCZ2Zp`D(^+0C z(B=4L2GNJ~Ka;awy*{}pR#cRN-(YANYSDWE4SSF4C1yZbmFwv_mBpV38T^%_6OPO9 zi!QscA`gptiRWt7>a)v>_e}zp$V?03t-uGk?_I?%wJZJ2{#3*!E{A5IcX_3eH4YUl zu1ElcgN*9=-ymyk{>}@9V~oQ1^wgn48rv?mhBt2bIDWW@Q+mcWXhC<*2o1ca1S>oP4MgY@@DNugWEam71JQ8m$t&p1k4*s`hfD zzVH;*l-brpL$*v(7y{IS{<915vY{m_ZyD=t>8 zjHSCJRJdV}IC7h^LIPp1sJ^ZCoBCr)>3oN~y`uMhZ?68_x)m;&*_&Ri!{R6weOPmN zbxH|WEF5@wda9{{Ee*KRDq?D18cCTbZ3#ijLZr}7Zk9Br^ao95|Bgl&N(cNTMc0)F z#EHQ*$J3CN)UViqY6lyZuMUQ9gjAI3n*M%OP11B6>H#?qvn3kbk%8jjR^!Gp<>G)` zmlfp7oIP+2eZ<*}UE5b-5Upq`@E?l?AGB&_FSFBhSk>ZbWo+4c{CZL7!gl|8-*jS$ zVrwf(4eHLscnfx=5%%bk2}OHT>h0mtuC%*7Zbjo!OAc=xe1K3aJq~rTsn3hkRk$pX z(XQA{n-5_j)4KqlX{lnPlH^WM zbqnF_k4otkKNprfp26XHaWo=V?z?w;O#=_G!VaTWcjUZ(8xVT{5k#kxRX_Ns#(k@| zGY}Rny1ZE;Wtx!cTz%E{=1N+Y0CJsBZ?QSfE!vUos%yMOO6b*P<8&VR)mI772lwXB zCYy?n?82L*eCQOjm*i$X_Mmmjh$s4*Cr5QYX;!FoxVW0jcmIZjxh4Vwe{FX=#Gp;f zwD_NhsO?KSJ^UL-D=$QE z(M~uC5r|%#KmHL1No_xK0*`qAip5y(o%n@8BD}c-swmRn^OHKS-hqzU3m*rvm9Z#V zQ9Q!>L>2Dj;%DO$>9`)4lpYWkJs9X^#$Q7Eo#}ZdN?`dN<%;z`voqA`En~#Pp$sVM zjwdVP!=>5bSdbLiAW3BKAKwU;#xuYx#cx^qeA5Nd8;%WDlo-SpOr2fO8$NGFruuex zy1F#L2G)~z;bJoCACQmuIs{W#92A~65Ya*0`RVDn6Pw%GX(T2PIz#&XMS4>$wRWe- zKGp^;S-wy_z_?wyn(R?E7PxXpkuD!Te|qyT3QKsV07oS#W*s&UsVcxE;tbTQyAh#( zWyG0rgjFO(JYxXfkIids9L1FnnUu;y_L5~;f_0e!v$?>o+x`W$6`xSf{|PlEpFEAk zCr~bYGD?U~S}URbb==6?M>Cpf(+?eCR2p5Fn;qLf=0W56JaPm2Ab?Krm6q`4UyKcM zLq~_Vj~bY#u;IiJBZq=#;qnQE3p7M(4P$F96)`{*63e1~nNMcV7xO^r=10p_G|^}@ z8qiMt~)4FabG($6sh8}k_ z-NLT0JIuFQn6~}K_-p}-ZNWo3o+Hm^Lx|}mrzZA??H%AmP=q<}UT;ICNLe5%Oq2>P z9c~BWAL}W-=xg?d)V|rU&ESb?jiSxZ8lOy&SBxSpc=F3mQxtA&n^a`(Bepnny$viAejD;cRI!!}uZ8~F$8uMg7Kkd_(A+{^UaxnC{?|KaA za;J;V?pJMi;*+4e5$Wscfg`SRD(MZz)Jo^2?y~OToRjmt`pnVA1iKjs(OE;3gxv#= zk0&+6UFmHv#ok8`zUJG#V?+wGd&Z z{;J^xWJP^YjNH7O%mnVkn~eeY&&49}F%=5o6*0-1M1$~Jz_Ycb^#?8?S~5ZW)ga7p zan3SafcAMgFK4-z-9o={XU5z7!vpo=Nm;&KFMYw`&bYU;bH^qfy#tTm+Q)C<@jLtY z9X$TYKK=;o=X*yp*p*SPwlT4AlETW=x%A@Rbsm79U;&>VKGUG7l{2cB+Gh7zz6z;Sr{XwU%fptP@4+L7k} z+Z&iSaBX?9&%0PjNSD-LM>0NN<9I$Uqf=6i`iq$awA5iO|k>3ns;Nmz=*BX zQV=nj98~qU1{YOZqAd!G;N`38TDM*}Ob02CBri!grBJHTu?ZR&e9_@3gh0?9?&!aF zj*^4=Dj-Alh}45r(7G_IHei7>%*#k9VD_`kB7>fpcE>fNK$I%RlEgzxp9+jBY#w(- ze++?6*lA0MN0ZFFz4rin_w$23WfWM znC+$@Qvs#NVAV^=~J7oi>9gR`J{T_MGLYo_Ey4qER2A$vS$7!(WnCY>*dm#vo*AR)t=l3 z2=HMz0uNE~Mx|c2tQH=xX1!GLqsT^KMt5fQt^K;sT8d*}%i3XYqp2#YzaYD3ILr}o z$-xEOencmQ5aAlaow~(W%y?H^b$lC~-cqfU6vk8pem`D{wlPAjjmManSln!<NE$<+sF1Y0}Y@H8FzTfGyhVEzd1r(Rsa!VM{NBWGvuho|WKCD%A?h?+J zvl|!7o#cK6^ER-1X!L9O()^xy$z-@8t$#pu$!hr?f7Z!7Ea-`Xj+wYIw7NXt6qVas zBKKGX0zJ5$-2BeIghwZ?!eHqyAS*b;RIbZ)HO+fC_h~urP1Y;bU9tKA;ma#Xu8Tjw zW4OL7t6A?Hg56*&^eUf|C#WJw=Q=WaS$*i8f+iAs(UEtu$SnX(kRCnWd;R3q@r&m# zUmf@&#np1$bE3TS6+Hj-w*Rb1-*?|xDdWYYn6FAz=TD({@Ab?5Hkq6%(qC8eVNY_~ zUF$;`pb4c0n|tk|m|iiHud5<*zlHb5>#FFOuXg*F{^6U;H(N)y2IKzWFK@OL4}LY+ zE{F$*;X&uyzr3lx`NOt*DQH3TqThuH?sn2nk!jBhjU_M5%3}*IEB*F%Mh?+A?PX~MW(h9{TP6k_;`C8VgmxYg4Z~kX_Uy9;QGz@ z-ka?=+ez5DwVWr{QjJjlFv49jM#E)5x>>SO0MD=$k?RQ2n_# z`ev|=1hyZx6fHJrYm%!iEplqiIF!SkBd9~a?;N%9&@>jnTpJDT?|;W|Xpr^!c(NK~ zfvQcFHCcGnR=qdw-@9@6%lPj{x5n^CZP#!9u3+%X_|5jcKa5}#5ALZ_fN|;vl<%8z zgYiB0dvNdXgL|ePfbrgV+4?AEh;sDw%)+=AFvFS zY)C@~ASFFGo^ki>`RM?wj=d1DnsoE&sd9E99Y3K@gBymW@Jo@82{5GN03Y2s4&~vz z-EH!7QU=MrQ7o1NP5ckYUyivh|i{+huLUb_NZc)4bI)0+Z<6n!=V?2tt<8nN zlvIo|ylZX*dHFTvm|Wv*)+qnjTdCKcoRTg~YTqFw*E*vT_%sW})@wQK?OGZrkM#ZMVqRQZ|0MFweN{+EXTUdbbc@ZeI&{SFky(_rJ+|p+@;!Lu!At3l-NX5 zR4Kd|gngiOHfu@UNAU>2QtBaAVKdlbn224e#Ab0`(op$+1EBaNJHbNk^1l;M{Dxzr zF};%j*(BQD32D?h>GuMsW*T;-K43~b`2La5YLaG~)xs6a;_i)-{##A@ZGJy>7(l6YF zKrF50T)cT-*7Y`C!zd(8sckYk1j&u&QSQbl#)t25eFmg}V?TiCy%#xwae4#w!3E3@ z`N64xE}`!dkt7GasEbAVz!tmHjm51kPHx@W-Msyi-VeRoaa&tko3*8vDH^V9vfn^e z7AO4FD?kZ-JEA8V_sS8dGb=PQB3l}Ufx>2Xb%PPu_(p}-6iOz5RJ3)(#;p6`x*8O$ zq~@VJ3HNajx3a<*DZ25Hv%n7QNAEHt^>_=^am|dqKavFbBIcUM*(p(q7;^Q5%JviG zHYUf(vz`Dd{$C+WLcSE6#2d1?IBSuDT^EmoAwya8P?uGHoD>w3~lQ zsPIutyk4!!1$UQ0DSEzG@9Vn>|FSHX>t+19m`cs)a3N1sYsrsbVsSF5;_r1a%f%0& z@xR)1Is(cN#qEMkN#v!v%%>u6?Anr|ZHJz|& zj32?97?G}(LJrrK>i9mc_ZWWm_1X`68U6BeeW>r0LQSqfe!yZiSZlcw;FMV909Z)5 z4sw^tegH$MhQ(Li4>0UOg=dN%&Ks&N@Oz>%0V7?R0FtP@w}yk^VhI-b71gC(1S!S* zZ$Z5WZud|ve>)8!j=v4YBiGbhi&Zw;&DCGg8@UNckkV2glJSHqN?VsIntcq*Nk4 zIRnFS_=1-kOtnYhhoMAt zTv>XP#y3~ed!61JQE_z2rV$zwZ3?+ELp@{j6L)EUMLq_=4uy-s|~TA8P#^ zDvTp*1|GnNeSi7H6D{fWMNWJeg<@$iFohTjSo%P}(@nslNMjm?Ln3X)fn7gq@VeWO zWTIZ5o)+(=7<8sxDiNoo!PnBgfXbO#Qe#a6(pt26(~yo;X$^%`?c~6mtuAj9-%u4mX}`Q}Z1QfINWtu7 zSTDx1sUolWv4s3UK=JE=jQ4&`XNdF5;hTGJ{&;jNw806GZ(U%53B&b_?Jq@?uXejR zfnSs}NNc>BPBFE+eSE zY0bb}r#C=16|Z6<&tCmD{qVCV|eSg zP4)0KRnbR`E8O1I`J{dv^(IIJ{Ju<`uG8_+r7>7K?1%ROr+^9-WKm$V?d-ze?;$cY zQaq=yJC0O!?+;Z`?PO@nt9M69NpCVxgBv_qxoYY`agVfPWgsS&Qy;X%6T>(Ix}uKV z12zyQi=6OXhh9qN(ZQTt8NztwM zDuv&|ARE3FCa96fJ$F8)OJHTs#CuB?a>Jq^=rmKj&u?2R> zYb#N|({S+k#eB;;uj&^WSk&rg57AHk`sIem63TwY5I@h?p0mayl*)DrA=7fM3YdnW zd~BZiIOV3V=?P#KMFa|)X&)6TwR9VZ9pTtI4kc;_>u%ORF8vqiAKSS`{|Db}Yc-NW znH)~9C9a|?tj3({q0Jh-&`>7Tk68)2B|)Fkb+CcGE@pYxMNo90oOWD{~9OjN<4Y(L#_SOpb zk9?L2vffrh3|D^D4e=Z%X{9>u^_YA8#Z1H^ZA9hVRb?ga3(olUCh&YmPBbs+GA4n5@(T4q`KBw zW%aZ|T!Asa(`Vu{#o4|h9C)Re`bm{fo>%*j2%b8;2eTVd=`sE;77EdSeD(B+-z3b` zyB9y8{oR*%20J<}gaOIv{35cD!Xk^3GGocHiV00XcB}i#gs!d{yA?=)UI@N+?RyAF z;%|gPLlA#l1ZM!$P^*3;44-YCdmFG!Lb0~Q>3V(~mzvg5qXZVw^xm7I!4M(2SL4!q z3xA+Slw5eecd$hO;zav9SCh*u+3?HBWyiLKIR$DCqn{f7KUsSO<49k!6J#*!NegZ5Esb5{RgiN47>bxV~Y&gh;WD%*1nO zif1I*241Dix8w6X-R;#^8;}jVa*FsJ&rn}^L(Xn(NTjUriNrzvm>N&o2X>43Hfs1T zdH3@uHL;$&LMH)_)Ni7@v#`64y%dW&uQr>YS&u*>YMZbc-H+zw*nYig*zivAVOZvi zDJWRn_%a(mSGU(;f{M$L0jcS_{uEA-eLRppmr=%nds2xwvI95lK0>B9K%! zlDWeTY-~5qHG+{s@CO><>(+z#5sr^Waj2(7>tJfjy1--kr^j zz(%H@fr0rkWyj2#$R_V$6GFD9PU!Zz`_h`JP_a{wkL-~mcj6okD09=J@Qmf(7#y{= z!Jy5?+t%(h;-8Df=IEgL+Z28%2&iUf<>eqem<_vFoK}i~2og0WuSFhu*{12#=I^?O zV~rZ?1gVGR^m>rGEEWxrG67lmlrM2vSca1jOsYr|m`uB>8CBAnl3W8u4}+?WP`Xd4 zaMEBRSs2sg?}~T~c~{JSQskl!74M;d3sc98c{KaFM+TJ zA?PQt@aoic*w%dt5je6mZ~{vyFD^?z zWj;m$;}W$^B#Hlzx;Jfa+ej8hzw1}POhyDPkd)+|3gc0{Bs$02vFyprQ9L$CLL_XG zU;t1OZR!2(x0c?~peWDGd+*INV-Y~F)z#Hi)wS5MCWU1Eu^8s*qNHFcRis?z(~Yi^ z{+1TY*bc0;9>H9LqU(_Dx^z;*shL=Yh^|mA)Fr6WmjiJjhrf>Xv`cC*p3$4y^bMae z*rLpk+ax`46gPSQt(82Lddt#}o~IatC^T`|HJ1PmxB2eymlw~PJ=^AJT2#mVkw)}! zIE@S1D<}xG(GR0d9~@1#6ftp1Xl-1Uc{&Jbhc*XUK0-H)s_r|y#r0&Id)|Dz&6bW8 zCjna(sj(}(IK}~TPcVs&W1AQ&PVLEb@?aEpX z2VyFHB@B8FOm3um_arN^Ic@y>H_qy+?y46b6e5t;7ICtXt^DOuDzfr$d^>8zz2X?xs?W>&Rz+;oi zZk}g(*c1`*bxlBxV2~tpv794Jo&j5O1sgB8cM)N zX{df4mRYRN8yW@jM{7NYIGx5_H;JS09r{v9`bc`qyN;)k;V~qPy`N-Dm_yFdTL$nj z;<(i+>8qheCx^V`G|Q9slt}Zbm5Ug^;`4CzOy$3prnz=jZ1Zhe{4JiQqZd@sO&MX{ z07zfs5l8i7aiMwO28AE%(LcQ=ud@vC%9*^4Sg#Dx@L4r$x5ZCZtO+FV=-MeVe*X&b)SZdfxUT!8X!Z1G1 zW-rph*60Zhn}bzCFZ|3&DX(NPkvh%Vcqe94X7)5?9ZzwzMA#~`rVeOjo5xdpUaJcc z^2a}D{LgL|UFC;Kn4-<`CRn&-qBG%JIxR8%D8E?04<$=ujExhZSb0-5&q;Zotj!(| zDR;B5{#i56b=BnPRZP5K7tJID0CzvQi9u>d;}|1tJe+k#OjkBp)hH%Ms{y94!bR!D z5=QZq*<+)d`lTT~EEhv{k-$&GCIRixL);wbBpblqM9VAlWc;6Hntv&Thn6p+1bVc`?7~Hd;*;a!y(jdp z={f;x&sQr(h;~lZqMUH?W9*EqmoMy>j@M}~_@>gJJ3g{@J$9h8-~HHABwD9_`JCl{ zOY$N`2k+*+ruvZ1%@4bsy?ym92Z9(=i1!3O?eFeAYVSU1?>$rn1XA~G3MId$dk>*W zbYqZj%uQ_%+1g*u3_Tzr&$sW(1kXT>T&PBY^0dWxpo=^?g3SbPbHjhfsRL#GLEG2n zENLCwAi}xRW6Mo~?vBTK^B;+PzJ5&AQEe6pT|k^~Lx8L3NVx&1mGS1~lV@+Zqzy(< z-4h9(;37Vg06jp$zmqMtXg*sm!-2*FS*GHlUFC=fU2KbIdGrJZ5>;{w2J&T6JXwEH{SYS{Pn!{k!1jO^}LOOWmkW z@?_H#^Cn1?b`_}C62Ajqr=~BzITp8d1tNF%lLIbtQz+(OBnCW+Y^QN`Ou2s7=85GT z_%(SwqDucdyM@z&irL^x-81!AF__UGWGSD3ra<9#=nF#OFXQRG7Ql|}lG9*y820(j zK~u!EJf%fc6&0|d@Hjk^?PNN4+Op^1grs;wMWwWW?JCz*yA^)z5z`dc1V@gECq)f{ z)N(i=hr@i)IP477K}Tf5`i`U=^FrM7)yO*gC3zVy!Y10z62{R#r-1c95HWUMK=vWQ z1Wu{h7#hP218G6@Cx8~e1eBF?L7u3|Yyj-Mh=F(x^~)Sxi7|j;6Pg<5*>VwN3z{zb zrj%qrP@ZO42@_1>5ym?PL8=^y11^|n;zxl_9ziMWe1kLCZCMa6M`;$Y4NH&>J}1MH z;(!5Tr&B9x;oztW3tKItL;1KDpW3R^jLRW!@Jl}D?NEM*S?kxviD1EzDUL?#ZmeZC zbzya5-^$U!R5bxsrR@Yf%G8l%NK&Vg$_`ra9OLzk)Lgbv4Q_QgPl0(ja{RvBBM4hB z!TjNls6r8m%-8eFWCk}xbf}jFszd6bJyTMvV^c(n}@3&gDlbyr`-DE*8OKqX@BjWbvij?1^=j18_U79q}np5>1rW z6GNdckAx=24S1ze4)6(i5CbhN${;(H6_OEAJz1xK!vQ61Kq`>1IbmzJdw#Bj zA5=?pfvqXJFtaup4=1B;u`2N5JWu{yra8+LUDuXDEa8bS^gSno(<+gT;qW|8r$EZf zEYO-Jf`QP@#05P`J`6}JK??{T-jIyqd{j_)oDLIz305(Y!Y#GgoGKoXf)wLsDZD-v zUz|dw3e>%D5S)lYE%6I?1c>t?b@o2vDwdU&CNNuttZML9qhimfN2pCuO)k8-M8lKB1JDzEcXN1|U6;05o?!?zK?h(Xt zy0=Tl-4I@1Fa~rmoQ3dpv@Ikt9Uci5(70oL@KW^f1&FG;#`4I z&^r6vHXo$;g!gUY7Cu5FhIoYG4Gavjny?Mov-u((Cun?P^I4kLQSk#=P74jLTyx@{ zkQDy`222~|h|B%!Jz;q?45?HQ8HYpjo^a+a2&L>DvI(@b1>&RtdPm@xSv%l6WY&4n z`i`rboO#}}$jepMk+vH{(RVGaLU4qvX>fGDHMqoGkMm@)Vb{`0(Cw|hGYXn#?Q)+B zL}j0!d}v)8`9@&vrl`jPmPf7RsFHjLSSx%1DVvUjJf(y$p>GmYH&dD=`GH3)&54_S z9Ia(Z*KGxRCg15C?ke3)*9up=%RBid6i=WKo;ixg4u`v@VUCqwp?kEVbOcFGLP`ow&HlM@fMP&v&f%SwGCr*Kjw>}ifkmQ zA1>TRHb<4NDTH(14&scnMzZia4=pz{XHc(}vq6&A4oX@OrK1mqJrO?joM;1{6_)5_ zmvdJl9*ufyr@P*X^CB&9A3U?{tpevgW?Q#R%94t`nh@}uYRWKa4RqGVOeMlBJ7YIA zT8?UnEXO$2sO7GG-Bf~pWkfcivF+sQn923brg8gJvDI`9mIwk~Lp86j$Khz?3G^&T zx0@;amd`rav2O5`s58(tFzU>R3c~~Y#c0Uq6Gc@zj1&}*&!cncEb@d+J?XkFtegmm z*#H8{ZS-Kv%LQFi?y8PO7B(ZW{b=#fa4kXew* zhik5G>S&HSWomeMpW;Lny@qX5lIuE-(=@!SiGF9zb&cxCW{T?PZH|j3;-t@nGj2Nd zQDgs+=Rd9_-&1exSs%K|sB|4=bHc0HnB?I=#3mNw`uFT(%godYgiP1knwk{BLNsuh|CjxS1zglnkQeMrC07+5fw6Q)l8g% zuWlf(a%qZ~c{3n+cs!HCsSgBTmRb|dc-_%zDM-{t0)jstCpm_PtF!o(H$Iz57ZQ|C zKvj6%oz7_b-NjH|(Gf3GUa67!IGxjEC{g zljX&#a;rvGAYrl=Lu{LG867F1mmzM8yB&NoGhgu!1iVa4AUB{a_m9l~2!H0i;+%rF^oZjv@ zJiWh?WoZ~4RaK3n)j7?kl<^X8E=v*oEV8m)%M{{o?JfeW&rycsytK>dC~xF(69t~H zuTM{*vdsc=gU>MKfK>qw+1ke7o3AM^X>VPhIu@6yNB`=m1GEY~{-fWjVf6G*C!HVt zYv|iFYH3L7ckF_b^J1a8jD9@fmvAyZ`}3e$2R)nMb4jm|Wqp&SB;I=7c24Cle?uIJ zI~l!VFCpiRzm6`e%Ul@~rNBtWBj(#{$=!_jtiS!ZC+AF$hDY;^VoklowD0gU3TE+z zdX6sulhK2cvKG=idNjQyIUdiOtVn4ctc?TnlQ(*A={FR&H$8N)ih}bfn8<>^%OAf< zpj;@+7;L1Yta(@Vdlh@{oD#{v8x`4WBHySC-=Z(Og>(DsZ}!)T#%r`E3Gok^khI8a zvJ4IH7M6FW=sZXvUItch+7%@owGfB#>yeiwb)iEiw$)X}J#@4nA1E&btR{(&n(ojEw1!8ZgEm=aZ+h<IjB; zw!nEiGa)}Yfj8=%$gI6yh6WioWxHYnr?-UD|+-WYiqoE^}bbLqJ|^cWOWIK(|ER^ z6ScAc_=We&X?l^2j)8Bn7XzcJ<)_o^{O{0%diV!Cpg#|N*w?@R0l)3#gFf)b&{@db zJ{i@km95@@yq4-oH8EV-#a31^)tWJTfmyqe)i^@FRVn=sZ|Rk} zJb?i}U6|Gqrcf#L52FyRGfbdmKy;^Xj@5vx`QaaXCPI1^oWSmHilFXqj0OP5j-HTF z$@=n-eHW>5!oHfTeSf`wVH1cd)-Ev4K9>+0FzEr?r)Sg)R{H52?NY7H@Ty z0>k}enu56d)}@9+^}3!O>oRaOp3>e`FUo9TJ)ftea$>!iBq5>)KVbPO6 z4Ci<2yzN!qDBtxOj-glkMf-Y*gQBN@stYCDL_JB!>}#f;f{_}71?isiT*lXRK@%UZqQ6P>E+7Tf0Z>Yb}CJSi*bsML1gA5|x{ zoP8VT8-Uqv5QcN$}{kVs&N}f{Orzk?Ylu7@XomYS5v_Cu)pO)6L*Bxu*IOYf~l@do}$@-j_o2ck=CJQf!0 zlj(@#X$MVmSaDretr6?y&U_{>Yc{VLyY^OnlxDfbPSn7#+p{&MFj)HfaKLV(2b*SC zS4)7oEz)5v{KaR>8;R1VR^d+Pss+-G1|Z`lph7`lwtQtNMy#?b!^}Oh&UWfWcIisr zLLcUw&s7@Ue4__+q@fvQ^t8rCZ8vFe=Kgp(!w~Di0jh*_< zI?F|*&anvCX*$u+=kZ{FQk>Z;1Sk$gUFHy&XF#yCC>SAkIDh-=FEkJMYvg9LopcKO z@yve2q2;K`ymwE(#DR|8mpJT!`;y1Ns+%A8aMb*R#%`bykCDY}QI3AN<(PltHv4^1 z&7rW|n>A&RU@1h#T_oL7< z2f4j4P6KzUmG|J)J-gEVT^M1A7H}h2fKULlE$W!?!^N(AhdM5foCW>LI}Zo}fMQRC zla>j$LVqY2de-MN{aFCFwT5>i#4gU>WpBp=YZFY!94LliQ9Luil^iAQc~Vq^l%!}4 zF`R%j8b^4OG{fxf1{lc{G+e|W`X0?oZhCK*LKMQke+ll~H}{O{6KR#KV~zx?c5!0H z22q1EE9tl1N>)$2CwAo~vidVu+3LxuWcBB6EweX|6+UhIKJ9e5e6ZVL0S&lsW=dFa zQe=dBH!vZ~D}rLV00@Ms*z|eKCOd+=egQHmf~t)bPIB@a|>}UtHJl zoogGeK*7_Kr{TNTf@1gk8osyL;_co96e7S=uV%~adJWDhdnwF8ARtUNQFmM|H};jQ z?#*yeEoYI|GW#vLSgUfHIN#6Q%ok^r+(pqecqC%hDKlXuy?5Vd6$0h7LF*ozZP*UR z{zRGR%t{YaIfj})U?CV;n771_vHUTpo2Yw$cyuHd!GmMUJhsL?V7kophr{`ra|?j$ zaBiMH1%s!UI&Vt^-Sy%i@v*qlN#T_Wj65g^w1UB;~3LaijGnZmvC%2`)vHCD} z{M*%sK~3n7=2?Az^3dm*;$uF?9jte-yX>2;rabWVik3!%ho+ zM)i*;|NNu%;r1V`?l>i*(i(H++}sDEzmvTWv>mE2tCZaLl^pm=-l>)}plZzY2b{t4 z58w8$TE1W3J)ip<&*%Qe^SQtId|LLO@0*6Cj5nNNkgM+O#`kpIO`&rqxG;PN{;A+cI<4Ph-e-G?0 zOe*QG`-M&*`fGiWM3MeFg1#QKDd!hSo>t8^fgIX$`Y0}u3;nO-*RMJpXf!=tQ89D+ zx0D+YmT!4TJHD?mCcsZ-_~Yg7?!(>oAIswFDhY&=I@LG8J*hBOqRlGq$5k~kPmx-nOxKS zh&)h_!y$D)$7iu1Lc=3`+yaf*SDaF1{C2L#`VsfbWh;$8K8=hbSp;Z;QeG#Fg*`wvQQ7mIbxFzq{+Z zS+E=8fRXOokHs*)BEv5*=8ttx$Lx6h&TYAps- zA@ldPc#(|Szr&JX3~C#T?T`xs&z-$;45yiM5L3|}QNk@BwblE`4w?cL4l1Lbk8CWh zCINA<(jTvd2xh&<=|%+hs^Yum7@(0squ)XeIZOf7nqynNGm3h70}fKJ0}{!;tH6Czf~f9zt#f=87I3f0<>)oO}+ubAXu zYu^Hz8IW6SH+VzBE3+cax{ylT%h1o!0L++)ku!4+ST$k6)JVu)T<^GDxJ_4>fJ)=O za8y1H#Tu-gE^k#?1@cKB4*tcNbHf{t%#i+h^_37Cx)KPXC&*vOVhoXa)!T1p$E1fd zvZD|c_`&>4843#VnIF8Oi5#MNo}uuER&*)nb?Tyg<*+-nVMX0q?@MF%`tq3yQ{M+Q z1Z}O6p`lax=7brAbIuJ8N@8@G%dF<= z1-m|C@S3hjI!w@osoyFTXc?(&wULXT>qcs`qO~=a|l?go-cg)Ypd^tRKz;s%u746g3_-niqCKyLBU3 zt{-}2><9eWOml$Kl&{vrA>MEcXKImJJUYTF>~cn>tRvenklI zUt_IAfZ%GrNm#Kwp~w#iUi~{V!+DAxwVKxGk<^4QGL)fu){`!yedT+W8@3*lX7P5oMX&( z1k>feMspzJqd{~}{nFnsFhP(0wE;XyW^qsaHQvV;#2_QY=UEw3yfO7tetV8_DM}iU`YFG?2lAtxc*XtGokzP3mfxA7zE3p#gW} z!H6$46DLate=Fy_f-*13PvTL3)gM$#nN>qP>J+?`RIO*{SX1HR;^Cxcy5p%@Mh#UO z<7oGcnA+N*&>r*L8Uf4eJxh1uIu`Obev;ofC=7owL&I>XSI2g(SI63gl7bn_&*D*! zhVrxM;n1UswiJ&>PXG?du}E;trJUD#HC_Xs7!&nCEo>g^FTW>)|Hk+=_~|?ue9=K{ z(&Fe@Pb7rW?|w~&Uow6@#-IAj%XrA|XYtUzj+NPJZOxROeLT{fldaXlVBhbum)U4J zO?ZRYS`yK?o&8(-98j%V^CI_Fmy36}Pf`kV+n#IPk85vr-O)4cWA=3Y;GO)wl_A*K ze%}Z_KS3w%!_2iUgMMw>&35cUIdg4YzW6kk`Lkd3#MF- z>R_rcDpVwiY@kzKP~t3X0N7+oVVGk+M08XUmC^!2;yjay+4hzz9{a z+69K%hyTH=JeVc%yx5Y)B@(Nz4i=r$xqQ;Y%oqYmR7Pnu?US`a-fuJxu(0>8yKcRyq zi0AGMX*b|;DNMXDKf);4n(_^i8WMn;M>UVqehCu?m}i}Ao>Cfd0^S_X4CsP0ouFk0 zwrpolK&p$ll#I4g7$UaQPx}Z`V1SHVmOSRyI3Mi5Opr(OlZ%kHpcP|!?%aUU3^>4Q zkd|9>>dDH;kVaW6ido?`Z$)!VkJG>|8{Q(ZkGAsd?VX)rzaI-M-`)-z zY$ny{OWIJv%cS4lgF{cJ4sUcCt;dMZJp`0Yq)-~s6gz*MV?0Hea|_^Ml@g1F*>TL7 zs8b9tQ~3j->y~s=PcAQ^ohWX#uJC^h%S4fWXRbI?I0lLYHO(cGm~0^^&^ZwwL@(SQ zllY7wiaFL*DyJBkxnPN>i#Qpw`H=*8v9(~Vk0TrJOBJQ}s&z%!jz?i2lP|*LMhOZv z5w87tBFBKlLy@z~%i-naEr5B}VFMmao!n|+W2C5|!Kk%|T?CSWqQ8VJNK3bH!G@0u ziLpIE&jY*!`8MqD!HOhSe(}UgF5c)i^IqZ(3x)P9)OUEv^|J zk{&vQ;1!J$2FE}{R8Hd2mO_pGsAIQrdHD^)koL-mGkf>)D*^{#3~E;~jAapwzorZB z;T*wQEYb0n*Ha&|E}XFv!8rvyoW}F<61eKi%LbfNQPNL#V2eNQibS-n$BpequkpCi z+G%_)`e^#FjiBUTJhFacCn<*UA_;RSwaqA?UuGS810CSv=W}doTOf>CO1y${R6-66 z%Y-Stwei;ABE-4^F2qwdHWP?P>wBJ3YFNY~%EArw7AWeL0{F*Y{})aW^RfSpf{XSX z@^75Z3A_QqXG!L$!+HuWhxkQAmNnzjCM`iYK-y+}RCC;d69*rPZeu6iX>>jpVzyXR z>?xw1Rt^3DRRoB48eRI^*vVxZ{!+DFi8XNh5+qTrkq8(7=U&UDl7Lpwrzi(ql+YbN z*`u;cxC25O8=;VGtiTl<4F}8>Q&d0#7z2 zv4u%3S)CA7|1oUdmV*J&9!eljiiejx!UyPiriRf$tY_^5{#fKEKnFiW-$WBVixi;d z;(#ZA3(j|7X}7lZ)we4b8|53#Jb%O}%=1#P&u+h0QKn~^YMFygUQvXE4L_yBjBoC@y08Okx@Gz8 zZQgZ?q4MmwsJsGc*lb8|S*$MyX0(A3v%`j@8+b59MgN=T{|nS$6a-WSPz)N^Md@6M z`a&2KE7nzUq6~RZafrAC=I&DaT{e#mydm{Qk`%Z9tS*TN(9j>aOgd_|I(V(7Y*w4C1Ht1iM#x%QlQ_*eB#cm~ zh@<9&&S%t;Ktu2c00b1aiequVI4M8$Q56J#;ke{_D7GGmmmc(>O@peNCCa4&Phuf( zmXQ&x3koH-`u$T`C=**onvEFiA0?qORac;NIDB08VB7r}?zURjkgs&7KYu)YJhwKDCOSWbk9&=ie>OhcZd^7` z{@MI+yLkzJ8b5z%-Tt{dMpD$X>V89v?%mqGYW3t~7f3;Jq>bs75YS(O99SUYy2mb} z2_Xn`2Vq0t7%*m}_M*2M@q{8vB8x;q!WoS!Tnn%Sn11@@!<4y=DIiG7(tc!-G?tM? zEY}jno)i({aaCuMB2B2`#U|&AK@;=G>5jcx_5!qakZMLUyj-#l(~?$?^oYAXRowV& zFP4_tJ!+MJa?CEsR>(T=&r!f64LTiOT9GFY+>u@;aq>nDfqiJJt)C93xX+W>qFimT ze%1Ao6g!Zo8Y+HE4JdlHCtq~pvdpPT`sIZNVytvPW6Xt;VUs8}FpC5j4Kbkg%bXzb z+q;)9G-XzO^nEj|D~Pz8Fsx?+<|;973s^~Oum2c%!~;B3G1 zptFbX@Lpvm-(xNdac5#*Cq0kz<(J^FL>MGsqvruN>A9Wn^X!8 zP`8GG2gNL%CZY@ajezO3no*?$oArvw0EA8|PJnE$8@zk{^mWkd@g)V{`X?B#z5qa> zlq+bGYFvKSNQkL1kyr`Rx?;Jl5ONbAjCgxb5Q1%m*WSY~@a2d7y)6zQDSCv71Z}pJ zX$S3D_7(ok@K@0enlk8W&}>D%(WrML(sMh5e4ZgyMmQ9UWQd#?>c%dB69+jH_}wgT z;|Da33kWmJlOis9vYmkNfsv>4I}P=hEC;N78;{auA&ZHN44Ay^_B>loQTK=>Ez2>J zg1^o4YMZhgcNdH&S;6d8nwz6cQOkLr{-cZ|{J=@(#Uf$0V@InIX@IO~e;{_gI> z?(UuL-fnk)uXFcd2Y#rjyhPlZBze*c#&Gy82Sm&j?K6I*MFGgff4Tx;ve_F0WdvAo zmal_ZAqgqqoK;RgSePV8TusR`dx3y?0)PoyUJSIcO}(B=+@mnb-^*GXG0y$%nWZK`3iRfDPQoWFkeD#F&V5V zXdlWwY+h_wafMV`r|pZ#&H}GZVH_B5w$O*F^dmy5jvP9drIYxzNN!YjOd^(sYcax5hXq z1cu%3(X;ym!3WSLwk)L&O279z=AR&|AbR|bl1~87F-4C@(({Wed+uHw);KUYdui0E zpbElI6<+-MBb1h(Y*pn1LW0$nvoQR z17r?`ohLvS8`CB?xb}8~#Ddcuv*5jP!t8WMrx2hI*I&*Bkw-(hA~6?2BpP4@Yqx`{ zztfz<@2o|c15cd}#cRLJCapRpc!%abrVXavbqe4SmUa8Jz#c1A{$@7uUrDWb-79ijb@;G00XT`lc zcOE`^@R$9Ee>?6xy!V&=N1eD>T<9jA3KT&LNVL$zL0rtH3`8{SJICF!M42bpE+(r3 z+>fXT#6qVi-;GFC#H79>DJd}PMCTxIP7fZ)cr${nJ!x+Lu=n83K{IOdst4()-+8UB-*%htB6Lotxg_+q^YLIM@`rwQ?>CJ`ed1r>q2!4;&-Od?6JkC95zb*dgAGdncKc*ysZ ze=gJf%gV%1?8Dp(ju68|iNdGO+C{>gQ}zt=%sRLZ(wQ)%w~uLRJw--a9km%Sr4vC# z<>C`%tZfa|t(arMEo#@Lp==2`%wxRF8Y4eOW>k1aj(M-8GcgT3(LDrSu$xAWz7;hE zdpV9zLEs7Qb@uLb;h)ak;Pvs}(YZ#gS9PY))YEsGzwYB|?(wj0Mjsu>xOAXdp7FZPa#GBI6JfzMFAF=DmM<4R^Ga;~-th0M?6Ep{vD zc`6XICA7p;qjl1hqitdi*Ptnf+%zK`+6ZU@O1cOtT+^sG0iFX5lN16<+(`>ESUO%V z&bmZYu+JYxSi=QYve27opFnn0Ozls|w0`;^W<1&tw-w+3vL%!q(MHUWi+1$xM- z+Gxg5`J^dFD(e2-8l|QF4BYh8_fI%E`{$Y&=X_5&6K4(ZeGhIx>wO zg}g>GyQs*XNmc!Ro$%>~6bif@ZEvghd_G@02CIH(pkvb&e(fbmi%_&+pj%|5D{2`F zq!&Tyl+W>=h~^B!jJPz1C29cQy;ANXY>EY((> z*LATVYhbLwR~s7Iv$5^4H8Qe|26j#SVV9N&uf|qr=rWBn&AlE#)6~;x%w~sB4h|Ar z8xnX%xDU{2A}G^YqN+lv*XMH?N+keEWroZbA85j(iJB8)#(rm4o`%%KN2dXx?%%Fj z9s6x$bR#fGt?@^Wn_+Z zdu)B<5iKZRspowxg0o@TOCRW3EvHh;m!pokK!T|I?*fT)cAD|ITpBabY4|F1LEqw|>0nU=6ebVkE|#lUe;_rK+R)z6D$TG#gqx4Eqls^=D0z!nAQ+lo=EaqpD*`thLiJ`~O4MTYKo1!*bW+h@EhXCumD z?SP;$8q;2c|L*(L17hUzev*~FSOrD-gC++254kdhOb%MDy780cBDRTl#V8>sF`J#B zsWy`&An;f$xrm45bVYA##t)|fmX4^5Z`?+UxEJ&WuMSLk_SFuLeLHbzr$n_-|BwEa zWnMEp*(8A`lJz~qymjmUgcQLXzPFUSAeVO`$r>y?=M3fwU*SA`U3V2J}C9G7( zDVFSP=^IydKPwm}nygeUVEu(+dgu~xnv7G@DPlcC><>O^(}NTGml<0tH^HYZQ-hi4 zQK6Dt@%YjpUs^hX7FAIIc z!Iv5IXs$-UH-I7CK{eV9G=tN&Txg6klH_R!C8ub2U?Ku#Cr(i)owpHyWb6nNmu=vC zJZ(pDKB8&iEp#E&EhudxkU$m>@f+U0QqUQ^QK9RTmRhBAGBpJ1o#I~36T0CyY)xna zqqsm1E9plSv+12|VuVJF*@Er}RR7Qubbp%WcnL&oC0_q67u2BA&;s95Bqm8@b6J!g z;^8pG(BcC0YSXH%6w)v$?=De2TezomyR0#g33rRY7f*D-95xlGWR_k^r`pq@j;UP$iY83B`Frd0BBe17mP z=PYrk_0PyqJ0O!xbP`)LfbZKn*4_a&jbJZz{r2`CBt+JZFTvwrDhwiR!i_Xl-t6%; zUOYzfp->#-`XvDqy%jV9@+moz9=>>?J%&Qo;R7A-Qb49J$rOZr%c@;BM;7Di3LY(~ zrGYRW6wG*P%9G8Lh;|G7{~QjGwr&U=w&PMnZ&|Y?B`A1HY8q^8OH1fn4oQ zr|7GrWI44FWP5D32mLEiO zk!#%$WE0g`-RMe<5|{xHaVcZG3Y+^{8!EwT4Gv3PyL8Z(nz1n}*3Vuy^2%_~g>K6E zx=cQzf&+Mq+)2ysgWbKo2V{7k$HOm7B3Ud2+2Gd~%98@G%Z0F!74g)N1JQ^*CL2Fl zh`oho@yfMJOQngaj2fp6^T~&5j{aCIR{+Fm%4E_oSdPD@)6O*RKDe`g_wJqrYM9A* zx&f4hkpoSOgL1)a1?(K~Xj)`yq~Q2l3PV?pPX`TR(B4GFNvmhF1Fp*^0+E0aURIL4 zH%~CDN1Uf5)tyotk(jF#0ENV09+1SLoj7u<@N0xlXB^7{rA~}LxtvoV3=V}^1P=mC zHWE)`8JL!b1EYNtPiFxf2Lbsoygm*>>Jj*s35IHu427(9IFgQPQ;-mzV5)9ld`3y} zrGx{6?aDADRVwcz(o!iR*ikRFhA>!`Iz|eIJ)=k|M7PiuxCa;jD^Jwn&i%W4_nZL% z>XCIZEeLW*&r>vuy$J3GFM&Bu8RX(>&7BPf$0S!8^by1qK1ok2Av#{VMD0()FzOUD?qykm}r$OL-K zia0=)MPes7GBt;Lo!~_he<^}l0@%G`%koE?y7S!IGwgZxJHgYmz=bW?9C8>BCzjr* zr%sW(cOKol?@a1t63@wepA5p~-ux+eh+e!*B6^%(L+J*G_A> zMu*2RS-5A#{f7_t?me{jr~%e%PYkOtPC>1XgFK>b7+{H}>;S53xJq>vVU?F$rHYV( z!lGT+cn-vjgAOj0GSZzon@O{w52hY`8pDwgYd{{A$~q>VuaNe2oMW{3b2<{0Hl2al zQH96&8;P<75cm;I1NKru8bc-`<$s2m#ySPLr;Iv%}7KnCMn3WBY^7HkEtvsqX<2Jes}PQnO_kS7-6e|c|n~@ z%Xpv^iv$HAwL$4*!r3twAA}s}tc=^pKeU3>YD6rAdU@>{SWJII)oVyevC8$yg9CTI zh}lYa_5XN(gh<8V7m$LX?RxNp^b5oQX|lkqi({`~VG@98BJB0n&!A#RXI52{zymL= zI5^V``j#How5hX-{Tw`~g5nKKbgy&2w`F=O$=x+D**^FHn|?K;@Md)EGV6j6gpuY- z&5ue%g(IT`uzVPE#5aJ~8F_;tr;N!NpmW3pseo*gjWF%pdD1b3N{}frG#Op$l;lQX z#9+V)2oa3}AEB*|;ms1m36amuYaZ-Vc%HGgKL?pcxak15O{VW7Ao{Q~PTRGuu#vR z@9io{O!#o=+cyrF3uPV!;XX9e-MfRK8Khu^20#(DI7r|?hvONFKIrK2?ClC%AunRd zu|?WbftC0&FfWicRryr1#n`;X8pEMFjY*G@%-ipeyQfS?yYMESi%^Y4_cZ>q>z*nZ zx|J8#pSM8ZkEyJ|2GbSz%j~P~TlL5s7Db!bEee3q&Buedt*)&Yyw>QjK>fHlXfK|z zST4j^9n*~WErXGxoZ#T`E|N6fW-esB1!0QcSOzn7HuZnMF*Z&{R!;3$;B!lokQD#F`rc1R2R~YBlSMe`VnZzCVAqFF-n~D3VVO3dNPlbH zvi7ibY5&)X>?f3}tT(QrUl=yLKh*9R3cR`x4%dxgu_rQ^0~~)zV$RgYRAB)Q9G9c|9Vg8LZ)>!k1YPPC`9azL97ooBzLQN>l zEJ)QP1NF;<4VHvZ$Sr_I4Af6Mrw|@+tSv{QX#(f|jH2}Lu|W;Dvs2d6TQ%AgBRQpD zQPqianeUo8#}x7C>RB_l#6VW%at{2>bX9T67s@qZj${q%q5$D5JHPq;!7kY$;=1V4#7} zYi>j16HqMrNS>laW)th-5SEgNbVm2ZQq4;_VMJgUlf1C^moR*zFlI(;ISN5YsZMq~ zyU|`}_XEhT_H8k6?)3X>l4l*43e!3Y81y>#?zyz}ow#lm7urFG2_RV%j*|<{!-2v& zX?%M&0sS?}K^l@83VAO?wV80jiN71&yJyzgjAs47cRlwWbt!YvyzJiFyMO=AewE<< za~EdyqeEuJggq4GRaOGie2Bb!ItqRY?lKB5D1(v2TISc$D4+EEF^&?p9W5LoJ2(%s+P+e7|+u_Wf8yQM`|Vd*GbmO-yf30) z!Qv^(AZ7*D?vOMxm}cYd-h+GH6oc}OmO}(I3Ib{vU9+aJf5SWnmPpfu{<{?13JwAg zepU6GRmMv3w63z}ZkpM|?hk6TZKFm4@DAhL)Doo*4 z)i8=wV!V=Ky@T-i(cfP_>q#Gb(rAiL95#{SaR~LLYq73us8z5sGdh_vv)*UZ;JsF` zQyG-9(iELKpUXT>DVm>W37o-Hth?{XZd<})W;Y7j_(JCI+VWZ6Un}kq%M|IgUb8R7 z&Ej`Z72pTna^*G6m*|m<9=F8?m$7#Hs_I6~-x*aq*s}dc(C**u1hy@n%E+p?hoMp} z-+3D7e&~3{0|IqAr>D{cSV+iF8cn_c?h82O3z3^E$vgH@c_giUQAddgEZpjVS$dJc zag}p0j$;gME?)2{B=B9`0@%$`co!8rwCDtfEWn}fNhCwkm8*rwdXOh{iSSi~W);{C z-Po;i=yqrtPqad55p6yX#jPdXLd}+BFAODSoVp`p-8*SVdbVRPt_f<>cx%2f)O5P7cUaF~$(4e#bfRt0fahb|C&N!hWR{Uon8)w;Lu z;6D_^kSJlW49NHxCWV^R-OkW_$ zrYloi5aWZ0Qih-I)ZeC7+?~qxTQ>b3f}?9zrNP@j|9lGM5WTr|n32EYt2Vxq8VlH9 zfQ=>Yy1^=VnkM56b^eANtrO~W=I21-h&P3k{8(xVl~UA}w~Xsnmd-X5$M5bN72iDA zSdPDU=b>d7CMJI~Q-fMG)qwjZe$LYAs@K4W#zBz}Nr%&rN}5J%L(EfQ|4bGAIFV!c zWpy+Pn}rS?+j70uib;~N{}!Hj{B(IKAMxK~eCJj(9KWc_W8e$$2YQ6P#UO`>_4b<+ z5Uw6q-zgump8iJ9~;5`h0X0ns@5Wc#QkhhxNCvDWtw>wGOU`+8mn!b zM1GWXlw{o)Yo^X&o@+`v@zHldQbB@y*2S4oZ z->pqrE;vdtkXsb2r2|dBnZ~PkuJ5WfZ2FIV&&8ez@x90Q1z!_higke z_P@Hu;&=#6wXR>o8i&4{>`=p%{`vE}6g+jrHmDir?6>uW?5$gKmSQso|7TfK)9Og zRK3#B@Z5-UDZ{^LBh@?i?>%_1&xwGuFR8c`l9Sevb*2<{H%MO}-wWR4=@~MfbbUoe z2PA~WWr-Y#xPijKn4`xKVMkEFGCShYu>Ga9pw(mjpZBld9e#ZF_b1PuJ$?4{X^@Q^=0)^gw>K#6XUoE=@ak(kNOEo1voxezJM1M$IQ!vr1>*P2%|%ioNqJPrn3DYQKhR#Ad*;zXM7nimR zJ+Pm0BJzdHTt*yU>iUHjm+Zh{_`GVx#XNcB%*Cn?r|AL{Nlz$*3Qm!)<9Y3kui4zn zY^a@tXIU>O^5tm^2UfZ2z|T%HT6RY<@PVCC40L*h$zQs_W*6o1^t6kOzJWIH;-J;= ze#_1i6m2m zNgFFePjUMCbWRsrG#xvpf*hq|(jan!837nE zd-!s$d{QW*BIbBc&c!5R8FWPiMmkPJBaGNr4YPU;$7I3~x)SsS@i9^Ge1?m>s&~?!jLC4#8 z9Cz7r6zG2!M&9P;WdvB#D>^;4i{)$<=POIa^_ty&aULZ9Ojv6us1)Ux#e6j~Wj3s} zQ%q(1lB!W2BD5-Xe1zg`^trdk)@Is?R!~5l2G3~TGHlCAnXb{z+bQ=_n{NV&E}?SU zXh=rgv{bz(BJlPHJF%iaZjTwOy<{G7w8w2E!0>CW585m>L4~T@a>DfCY>PY5r@^Zv*Uxi`}g)eZ6v}U zc{9?zSJBVuA@W3PSqd>Cj+QHUJ)|w@h=*zaM9H-g@POuqZM=VSe9AiKxwXD7*8gUak%7?*?NN6BZ#KIO` zqWC^Z#mxwBn;b)*XA33Qr`mf`g3fLYC5bL05XS#eCds4_;6@MR>EzDME@QTXOqjc)LmX(MR-$lKXaj11BE6GQ^%ThfSAR>B^9`v-HKvwq(GHH@#Gy8w4vm;{ zHA*)OmaZD4Rls0lWZT@V(di8NuGO8dBl1l3|;V_Lc z9X88&%4;rdj#)2;*g7C=NJs0M=F0}9!N9RlCm7X=ohv9~9U>r_rk29pOEMnwQ?#K5 zu3-rx{w#QZ%%BkUY|4BC3KMF?I z!WRyo?R3r-N{8e-Nr~vIVFqhdur-N|>P|PKqTVJ}7GVAQpsr7H0^uPJrh{Q8~*wgMjO_S-Ud3}GB z{&bLXs z87t`?S$d!m_v)c6<^@dx+;WNm2RI;=ua`MhOz^ zHB4*-hm1^ zFg;#eURYQ-ve~5{!3-dR5ipW3fqIEQ+I$Zo{6g8oh&)rTW7182{K}`SQ7W-#bIwjp z=_GMmv-zhAzv2JSu&^@u{8&ftoR4I1G4`X9m@K?Dg`^KWztZcJ*(mD;lhpzl@KPv^ z)m`8K*&RB|fRWGhcqK>8eUXVuFo=tENZO)6(__uQD%;|@sA+CT+QT|6NJu3jS*N;n zF|z7%t^|yak5sGfn5OX@<{a^r37T(v%3=B($jHTM!yk)weQOti=`d?U7FH zC_dWhwA3vA3Ws?-Qv+-VtTD!TDN-*hzBx6BinLYM7O@eesEb?7Fz;8^9g$$v;PX5y zt*E%hnn=)^*-~V4oXFhVqO_Yu{sY-3GMEgrroEdrh4_-J42_$+=Uoz^yT^K-)4ekK z5KAheazgb!ILSzb(Q6mk-k*5gbVC}4CnY-^P*@qH-* z9Ap&1`aDN@gRBHop>MYHi;JWM7`+*N|4Wf%9EcPd2#nCk0JZwPEtj6LhmbI$dYg=& zT`a=JAAbx&AP23-4NVW=7rt-U@MMc4%|q+m(D%MprZPcJ`PhO=a{~+*HwVgr3@6<; z1x?^VwyOMq0{X$0m+2@Oqh&TCdg>c-Kt+=C5N+2fHoUW{q9S|BJQ1WFm(>V<2H>VKP^lrbTB5T1Cgo<49=^>#g7-iv5mlwSmm&k@Wjk+{=to*ZMbJ_uGn zUH&tC+=Fcgz`LBqi%U*8dMU4ME}5)frl%Nq`;te5f6(P}0m4}74CGbDAt+SeXy`n^ zlQNsLdG^t>;I=cMA_mbL3luac7*TvVxWvn^%TaoENqP%_)8%CEa*R$Qf z1})Db@VWuv8dsN2h6sKRUug|1b)^APMUNqQU#Qt3s`iTGFPe!VeI~|MJ?|jCtC43i z@2XXIeNw-xuw^H7tuyvpzfjt}l(mBWpVzIOAN8uagX+=EEo(YI(2NWs(*C#oXJ5-& z!8)GM3KTMtmvFOGfn0U6GYaC4+5?bQC=Q$uITco#tpeLaM$Ps+5(B?Ul(|AdH_7EA z(ej$cxFQRhSIQ^!ok;wJBeN^W%h+$n%CYo{it`+$p@Y+8(C{UiD zu9GbCBvx6M&@OB*6PO#P9JVWI*V^Kj)w_6%hb@q}Bp#7#DW&Hva6hB%lpr_cV@kG{*IYVl43NHTn35fs*sr{!CA$3QHmzC+PP|Gh z!JIfQ1rBZlsB0d}-hkCr7%?AaaAhY}jT7<3PB%u0hOw%9YK$~nXL;2y@3^yLzxMYe zhjaAQ(})~-%^=oH#?x92+s6)Jm_7$N4oWwR4(#fPz(DSTxh{n6 z;iuq{v}CiJxg8v86J)Ym`-I!^6N=rR@a*}7A{g4$4@lkL<>>5qfiPtKth-@ZLCP7% z6HX>emqrS+yK->uNM5A#FM1ZlP<|@%;U~*VngTV_rJD}=&(RfRs#5dnD!99QCtwpf z%(q5&AVx~qc+eGLrZHVr9v2gLOve--MvsckbNFo3K&E!3-8h*(^SulW-yIY|7Kqg+ zJ7aHBR;f2dt^oM|77Hs4V429FhLu?k64Mu|QpV%=Q2jBZ7RgPfT@jW+K7n`PcN`8C z8O}Z>zVl%C&k%TbtQ%4KilqGiPeQ+5;5T~{1fBkXq_8nzM`BJSPtq}4Ll9b$3mbfH z*)GS0I7bw_Y!;XbFKT7?xn&uWh6m|S(}Q$p#{miT?;Lj2jBDTN;h3oICc6R^^UODY zvU>VN%+V+R3Vaf=wF}Ace77)s={9|1=~!+STJ$x;@$3@ZTQ7Mc-mMXQ^KlV;lKOZF z{^DVuowIShs9an1Ijh4q*&?1cq%zHJ&)rMr`MhR~rvH_u+^zyD9-whcMVmyBWRcNW zfvT#}VE(UVENV=TZo=_efH=4g5LE@By5SF-ljyXG!TW{3tE6A(k1Z!}UUlP6{#%8>n?s!s1TQY_ytoctQuv&DMeBpRStU5298`J1x>9uhUTd zUs1d2>^&A*?aGIT!Ius6;yG{HsPF*4ac ztvvY9iHzE?`1cZjKgK0MWf}ulT6R*e@TH4}}5O}})p!=}< z=mw29Mhv(0C4>%Rg54*d& z-!sYyfU2O-`XVB*(lOnPTsJY83))gDz(JeIO$ge0wN9OI;YQ%NhSR%-o3^U_zezrk zQt>^(C#h6U3z2Gaq~at}9AnptLl8J17iNRXFbzLb@=7kv_k(PC%LXKcO-9L&>$UCi zhwqb%81KG~cjjkI94{`ACHa ziT2r5H`MCn2^+$ou7T7~J_KY?+GyQ;uGi5ra(M<)FFJB)L6_)gVXdT{&4|tx4!#7` z*_n(0oC{jH+K6w)qto?J8srQC|im*~vfe6_$N+>Ah6-LU@7YuJD zfgIAu@HD+}oMJx8qeggni$@*&Nq|5E>k}6Yi|KL<=i%X-qfYQ5%f3hlFe5)br8LeJ0`xBOtZrI}KdAusD zV0>m@hZvHieV&d0=Zl`>?KojNnY=qX~jW+szmVa5To5d&b+3{|z>ZmZdnMVFXGzUNzY zOl>?}p>TkCsqsJ#6`*<#?mv``SeRn`$KDncOZR_pgaUitdTpUFmd10HKEOA~<|3nnzBK!yf(Wvl1d|oprB$EAB|O0bA6k_>6$a$2cd+rv zMY;~6htnxHd?TnvTjs4h#uorGhJkaS=qStEf_9E1q~HkrzrPM@YLs>}{fef2zIBl0 za*AT|QB}4e0j2ghkMmKn zwzHNtBGCYG&}BrteVF(_`88fShG*iNxPsXKcTlg9hszp!H_oELC#EDDh}g9q;2q^dL$e>l~*(+bed|RG2^~; zSLU&2o_-)$>1(O*-3#;A?=MYBD}e--e>2wFZX+TEzxhCeF! zJcpR5IHShJ5P*w17-k4`W~u;FsnF3t2`nglSQgQ&XB3BJlyNRK@*qUps!pflnIWpo zsMTll5s~3nL{|Dj5v#a>CdasWr&D903+1`<5*lenPDQ{QvljdZ74<|CPnFkB1*(#* z?`BrGm7vbc`eU5tPW~8FkBlVbN zU*CF*Z7^OvT{UL+WH-pBrlpu^mc4{EHGRvuJsb0^{kdpxGy%>E^b<<7Dsm~&khEk) zyO1ir$M3ou{`2yWqD9?>e-xKLwz{wYKkogwkG{uSTi4v@9F90FAbN|-XcyuTw8y(X zTvKQ}RX+}z!RLZpqGiYmPHGj1#A1d7ZUJ%2?+(6o)eXP(qwD}J)RO*QH1Egxm|aYz z9b59#{2_1ZUwsEW||3OPR3WL;i*iY7oi zvNA(B^~(rRJGs&mf%Ed)mG)}l^&!WVKHZ(@%ACsf0BB#?!4t40heA&jfPMwl6OIn8 zW*F_YS_f>BQ~9*7tTznnAJr_km_~B}$j5WQ#`!QVL${$;tEYcoU2$)_dXh^Ma-EL? zyFaF*zV&o@xwA8mtXCQ|8G~GR$FV0KabS!W7l8a%))q^knY?^p&3Met^E_?M&fR zzu%v4Zzqq-UKp0`to4^-r@((Q-PTk=|JI&UciFVPQxY_rMh2&;?83422*zuGt zPqGg!xrM@Xd%L}N3zkJCooqaAv>rFM8$JB7Gv`wWo?Em-PW#XJRo&`USK>VMo&9s8&dDp5-~rzws&)etb%N#zTn2 z2=u9K?38jc9s&=v9SCd^&ReZ0x#B6D2^y6ae9!A4e~lBNou(2Wpgl=4HDR;k+LtYZ zJgyvc0;-byR4U32R2}Idq67e5Qp7~eqP<6>yy!RZUbsie!@J}3^Z>(k-M<^X-JSmW z`ss9X_&n3iAj5fGV_}!S1r8;|BI~2|8^J#789h3q)>#IU!wbVt- z5{l(+yg|ooG7!SjCKLg+4R%`*+83Aq4{=|j-L{b|`YRGZ^u*))~4`z&nU+QKC&XLc9b!diIz38wbTN1sVFUfb;0_F@D6&Rv9{eY}#z5sTTIL#N_9@QX^?EN4P^{o`) zLQOs)H=x%kil-82(2G-iR2(b9(<);vwW(JqS^$>X&=u3L3Uv-{i24Z~g#aR0??fmt z1abks9muqaMnp&iPo~CGD4U-}*ST8@s6979-fswzv9}4JE%nyc=^z%VJutP)^}ZO@ zu+w%P0EN~1?QJY><3H5G_!yXJ*f?1=j|rIq(rG#d)l{g zd4BF2RvmrK*v`-YTZ214w?;?R)w!j766#j&uunXzX_rpzkDHt8Tgl(r$%rKj;4YB* zj~f|jfsmC_d7^5WXtu7E^!mJj>wi*TB{?#UMZAEyW~n}di~Vf0VCu6vS{(P!3nW0d zw&(+@5dkhSw*;9o!kKw?L^HI++gn40v9%@@VV8oo(KiL)7;qB2GevVtsH+9=3MKIh z3pLWMt%aO{BC+UuCKv8pARY1)ILsRHYI8B6A3DDw;8Pk#LA)U(lyHV`Z*kMF*Nh5> zL*0!$kO4gaHiHr5K1gOvj2fSLQ4tXwS&$^bVj5lpK8&vs&XYQ>0mI~VLWqJ@S>AC9 zY@g`cDK|F+k5O}9cpb|Yyg{*2L8`T8X)9%Ccylw<&{n~+EYeafOSQikRcf=cv^=Vg zM;WY-M31;(HkZ@BzsUnnds*Ddk!lP(;3W}4&m#zU5C z4wo0fri(^Q&DZ3Gri$Fvl&N^hn|&0KX;Vu?Vzh(5Cz`$X;WDgm;W8WN@P=k#<6h|# z`l62H&k`9erYfB)Mh}R8aWS|ApPM-*J~?7*A<}jdqPWHs63Er*Tb=cI>#PX>pA1h;pFPi28stI?Go1B7tu@d$I2B>_?y?b^0w586<)m zJ@2daeL;YeFVg3*`tkF=wG>tsahs24Gbg>mI_KvxHFj9!$c?t!oa9gd$4gl$|Ar)` z+G4jRp_q`*r&RGz;d6_#dg9z_S7|=BWq47-TiRc_87Mp_Kz+<20^oRxiC5%2*sr?V|@w z)K!3B06$jrL)GtJ0qMPh+Wbi!8(#g8u@8|aM%*LDN059BD^dWKEK`MYM#X+PDioC= zmpF%mZMFEu7MyM(Hn(SY2&2c5aKEP3tN-zFJaYuN&LCdNLA+`V;-iJ#MD;3z{OIO} ze*tc6N%js33MsMiBCB7ZF$Zl*vJnP5^-d6P1Uq6Uh=ORu*JW0xI}*fZ#YMU!_}U(9 z5-GsQIh#Qtdw)Kx1C@^wRAA2~K7t0vE&HXWXqhiUr8h^(=nEZmhpZk z@}-u-sDA>5!UH6n0k^KJaJ7@xx^euyk{G#Kp4Rw!cz0K-r0(y|s#iU$)1KAonLx?$ zlhxgws*;Ft;*&e;UG1g{?d|G2P5P)^-KRfOmV3NM-K%Zg=eF*%0y?W>p!RNWoAueQ zY1fyOyJetQ0LsH^rSJ;QIteu(rG$ zfxLY@Bd~Jx2=I2ga{zROVgKt&%kKHQ^Ym^qbmw%J-q|~qqVCt0ze*oB`+eN#?@Tc6 zd{-uI=?HMtbWq_GO3aeu3FMEJB0Fg+)t`$x6x(7a-$sIyjH4t)7ZZPsvZU= zzgDpR90alQo))SdQFZl$!={~1y-#B2T%{$BMqsZ6 z4gtp$a#>G5V7w?L`6A+1T?NpdPT`;`$>jcvx^ z1Cja95MoF^Me-EXkuiNE%$SbjO#!pYZK0Qv{=jt0aaa(wuhEkrnwS#t(F3V}JFmFl z#3(MUdVsQWs#kKo(yGUKP>&KdE;9p8nWpBB1vlPUJz0eN$hjSf>*kqfPg?ttH}?bf zOkX|JbB`L2wsG(5oZ_O#9d6en3s1cYtx@+19(S*dVr!&31&?*7j3O^mb}-+^u(>eQ zMq}JGNR6fKvd~YfEDU>hkNbYBN_L?;(-xI~rCRAMulq6OJKC2_6V_5C)%^wEA1DTn zHOh`&-Bzfi)e2Tpt=w;#xICuQ`;^aks`pzJ-8{|rKIO4_@8xp8+vMZTjbU&RPbAMY zQoSdV@(Umc!Pp=aMucQ+D1oKdcN7fbhm_?z1Lm#zc^rLyzX$F(Rv13mru}K zrGvIUa!+Ht{+Pv$vwSQS*W$p(VOS!zO?n=p6^fh3i|d80a6?7rtp4#m2aIKgU0&*E159y(@|F=zatND&Zsh{7^q}e)7N(#~-?n34JnmV2vNF zb)vt+9N%nWvIBfqvaqhZW7W3mtI_PTFzwcjr(b)}%R&vC`sUxAA`$OwQMU0F6-|#= zm8RjVw)gPcZMux-<(H5dkiW|E(pQv<&B}|g-i2DxE`7gvwMQuUHFuVuJwdsKdtTLB zlPD-Ys-~1EJeYNgtf31p!=oXo*3GdGGs#&RLsNH#(gRxrSFqOjW!5I?{wS z^Xy&14!NT5`zoK6H$Je861C_&_v-sTX2=1svI`==_RjO>4j&D+>)me#gYO;=hTp-a z3Wl9YS@BxEKG>x)avFM{pM^(y35AxG_wwUdr|+2bo%|Si$2CIYkJd`*^^t;hz)DeU zrqxC9Qim-FM$V^4=H>1NIU~2(a5x zT$sj7$YtiSL`c0nQp^~xLa{BJO_ideH`}x>+w!Qr+158fI0VjX7p4e1N^Fq-iqdFc zSB};_AEC93JjncNjuN_E?k|dZYLz`8cxQTz}#RCe-ameSO4s4$qLK{O&~`rzt;?(Z?jkr!so1lN{n1q&zs5?|N8M zR};EU9;>p2dCmL948mFuGql^E>}yEhS>BsSj@zO}v=mdYtbA>4k&2s}A+BsHw&lDs zd|i(ZL9PMB2ik@nGSN0gwuB-Gjl|E4<hnc_WR`C2 zKNdoZrA<|w0dfffX;3#HenlJ7m1J^3`W^)<{{d=78#?nGUeR;-bSDjqaquEYf|o(G z6K3fGAH`u)1E3MI{%Qmz#Q2YT9Q*}kuHe5wNv@{A>b@Lo3<6SisO$8sBaBv`tl47$ z9Q0!{qWq0D_>oDLy8d~c3ZRoVbrVgMk+^``m(`05)@1sAA+T#-YKh>eK0RcXazq8_O0Y?-P7EZ#(9-2Ye2@jx5R;Tj}SmT4D4tGD~r@x5$ zzjni;LGSzHo#^JDyM2sx5$YlJF(~=t3+x{e!*CGA(>kqSj@a-|WqC2n1K_EEgM9el zJDR{_bd~r@j$T?R$ICk1+>~Y*sNkK&Gal?@x+u|LBcAa0MLzjdVvCz4F60vb5jC9Z zbaN(qtuRWifGTHPWj@V{y1ayhIV`Sa-cHhsI=-w^q&Cf*(6|8)jIo^hAPT5{&bt@X z%@!`8U0$oFZ{NbnT8Jw%IjC?s9MVR@ftPb^l!i$x>i9D>^RoQwb-qBaLI^>!{T0kk zR(x^t?BMO=Coi6#Ja~o*{J>RSz<-}n*+LDPc-`dIXDHIR=6*gZ0biT9a@apj7-QoMEKf?@8Ve|pU zq+d>^#gv;vX;%TQP94x@Hait`VGx&!}u;0{f-^+W(wX(`=q^ zWM?1KU>NNF@Gr%GT5$SKuMw$Tr~TXY6qWKURQ{=vXFK>KA+eNWQq=Q1&&XRPwAPFX~u& zbV^Qv@WKO-yi-*UY4m@o&!1@IFY6dqT@+dJw2m1}leaLN&lkxbfQ>F^$@3bBfyZ_F z0xm{<-k+6U3b-I;XJ_~oA2iCmECG4xGN}F-#D|SC@8_n(avsEQ8u@I%XUed3SP;Le z)1%PyMx15!EyYoPJwj!SfkzbhuSu9{JCzDnSq6NNZ{aA zhPM@QrJ>Yi39yMqS#@8I?j1lp>M+3Y4-a0wd;aF+-S4lTpS(PL|MoeiTg9lFuN*6p zhp%b_;Zn~O<2q5Og#Ce{&qvP$9)LeRD{UuT)2>i8l&D^Sz!aDyQAF|L2L5 zY2C9r(%)+e+I`ZyNq%K6EQ6Hg(@MvIA!U*cap_|K}boCns%#=ip% zr+3OS`~IyaeSXO&5r+hr&i3G;#0)6aI%RydSs<0gaGEyYRG|}*eyDFbUSevNM456T zUK;L;NXeVfIJ{q!UqTeD<-M@Fxj~t~sX5lajs~cxoTY>PVr#3|Pxl@otCm|{D->GI zkPeo{-cOdNr!!VL{)$PM2gvJN<{5Fv7m)ylFF%e8^45TFgJ?KC=0D*gN(2nOxLuI; ze;S;f&L%T4`4q$pd3=%cgmP#vw4BYfO-p_Bd%g2hy(5lMu7MxF&_}@^rXfr$eW&Or zJUksI?3XpC&l+RNWt`LZ@7j64(ZfX9pdKbN)2(5SEDsMYvjuy&zHB{W+$w(&|G;sa z|E%Nx0O2BH0Xrz-LZmAZ9tB!{0hhex@=T^2+8@f>nf#Pq$>{4C_+!~%({CD-tnH6O zC(H4mW*X&BXtfe)yF~!cQUI_XHq*wX*a@D)`A!1I)0uU^7s7hlVCUktvFTYm>i3h? z0o!RvB`&+v0ASVYwwyev5Oa~3m)t5y7uOk1VE*f7R zb32#wWu0@h8+0E6M<*KPX)#9kAf!Jp50dGMHQ#eHlc{iTwGJl7dJ;2^z);Q>1Too$ zIZ-eHKur%zVZS4AaB`GSj0jOM40ApE7MclVYBX|Krl@wS*kR5sFFI@c)Unc$fWQQM z@b(~1);42$R_!=3*-?GMJGe8UjZU;BhIFrn$Jls!(n)=#N`i0C409L4+LOV)vQU8= zApf%QCck)oH4g*y&-PzcL%M(9W&3U#&&-U5@<6;EuMrS3LdEsY}q)d z4A?qm127FFN7f>oJAI|PFYEcYzZ8>2S(WE?|M3iX^UvrvT7b^OKfQw+;KNm2k`&?~*`w zyCs5E(>B$$aav{j_quA}TR@@wP%(%HNEP!M;)(RXybz&vF#haz{a| zQtNV#s=}0LwftK6oxwr#_QY?=t{1T943)-|m{QB$|5@8UIi3sU+b6Iq#Lw{k=|4`< zCu@qbx-Ra*3rV@4JnStM1N6XBp!astq4Ncli}QV1S)YLU+(E+xU&zyQ*AvI6hTG=o zg+OaK_%{tOJQ*58xN~~}mr%IAC8`b-U#?!MY>oL-zG4B{OJU=3 zZ1q~;`UufzBS+#l6>34^CwDgX)XZx$4BeTKop_bkAJF4J5_|mlbB+cJKn%h%=p8yO z&sNdMJkXmS-in5%1?gd+jsFZ^6i_s+bs(;<649ps1G}}|Ilg$VAZtop?>0v=>2eD~d($FJW0c=+aJQizy74p0u5l=j!j^HDe+r+3B~W4C5f<0= z?UwM#<(o6zFJq0Fuu)H&}NDghf;0f%mN#v-s!BG|y)w z0~!mDXrwH-0N3E(iCq)A-yB9ViIm2uF(q9BAYn0aJr3O!sME%T<6mgCfk9r7cByYT zjb7v&P@h|k3UI$16Ob_huSQBN8@{AB#<1zt(CuTqzqjc94_W+jAudFb&Ex}YBf*pf z8u>lkLV52!NehduEudamO!sgwz?S6m!$~DBmq^6{zJt+iZEf0V3T{3U&-7lTIZH}m zgbP$B@vKU%<{M;nolT~cOFKsVu1Uk~40fP+l>COUgOC#wz^3#sc_UE(oLcALz&g=< z4utm{#8q1JF{ouLB<-x6!=NBqv?1Cre7EK7NYw+a-Fj^D3&_;7OzX+QU;Mx=ZXN|f ze|bx!@5@$FecC+XKc&K)Qcn|X6Vf=SU8A?pYQ65Pc2sxImhhY{eVBD79JWL#6o8RA zE$E}eVx=+k34}fpsRHaNC}BykaTww<5^!nGUrV1ckUegtke_4cSdN>=^aQKS$qyg0 z(3V&nQsSS4GHkGXjM#&q`_Ng+L(#18%C7L-R6sg&!@%o?5!zxK+_Fsgv(@M`cPS)I z@r;Fo<7R?%_>6^rMR&l+y1VUtwA-V`<3rEnKNu;|rsi^$vzG}`mA}R6*Y8SB1+*=R zjPib)039{Vm{lvif|$%`H}7BdgiJ+i;aHdX9m>G&VUd+C@(vP+7WrAEmwbZuwmURY zl1V-8%Ceq&ezezyV2JkmSw5??-*@*Cgl7DyE@b*b-LY{`W$peftYX7PvAw~zE@>6p zYZUv|Q|vdqKCu6SL2ehH019*QPjaYv zh_{nP$q}Yh-W#1q*S($fN;3)a{3g%1?c^gd0WT4KXh!7&rG3zQoBSx^^XwB)A5h^> zsQ5`BhD&}Dv8bM30UihJCmrDZLj0A&^*9s00(8m~;56djMEXe?EMG5{O;?S0`?KXt zje*&e-?Ew3O%~{bmtrX+QkCkq%LPp~g~jaeJyeyl3fZ97sECvfceOG(5W@Y3aeq%+ znIXo66-ZwTV|vEiEC4dRIJTX~Qp4oU2Yz^z-t~NXjhV)II?Nwz zyGuV3`#BqC&*L?bn9A+5@#@+4FDv zz(`lQ$@OGWCBMZJHX4_rCo+GNzb{4chy9sd*`MSruS$-NF+&>Z$SlBRXZgZyRC{Aj zHX8}=rZDwsIXg?f0X%V*J0&p`dcOFh*?@i^e(>ytxD<8r=)t2$-wqy8%WsQpo($E6!%Wf0!tj6yndk0v5E?pBQ_N_S)2tADsg z!7alhUgNQI0F(*4wot6&Yua(3U=ru3#nOlrzYdCyeozV(uB5XT`wU1FCznC)164MxWH+zz zD0}Wg?_!$PDkJ*}ANGd31(|UY;&JLJJNU39Dxhi@EUFD%pa*B#K@2_sK_xl;JG6XgOlvZ80Al59ClMUa-sMH7Zdb9k+7|+cN9+*r{g`9v$_*AH+Q} zD?a+3?Te4e(*a;g#~i+i)eI^$$34D=T8P1@y5nb3E|P-zP3iAXYE7WuKawD?B6plf z=OTwkv@UVWOj79kXtRMJwAxYAYSlvC?$*12(?H7%1a)M5j?i|In}itG^mqC~Tbx5%YP2ZCnF6l1tK zv{x*;o-6X^GMhuwc^pWobPvYY!(wfCe91+D6ACRHYPN6WP7pY&Mjts0R$ceZL5n`} zAuj;UW(!fTB33k(dzF28jqs!CUo)#9YC(k)n&Eu5vcVQ@My0MWim^hv%C2uCwH!A$ zo2xqV!8O+$*(8&){$C3)O>70%ifG(o3R}^c85QXVEL0i_upDPeNu5oNfx75l!J4h2 zc$rSO+m~gAXlj-&`o@<9;4XYcpQOY7H+%6(I@zB1l)}?+xxMU7x2HQ{J?;(RHs3yh z|IM~%(Qdf64T;NSifOY*#s1PxJ%>?GsP)hH(KiRQ@F>wX@VP%epJm7{&DZgFuSP?8 zCsLoU!cMaS&f+r7!-4h4d~QdB*$(I7Wwh6G9+CQ*g{Oz`vbcK?w}J6@`D8X~J_AKXZX%iDmPO6`g1xpxum zu3~SDoCbS8>_3Ewh-mxsNbILW=}7d1js!_MP+H?~hopkoz=tgCSeRp8Ii%7#Z0ha| z;5@V3G$9BQVw~>!!twA1z(VsP!yt32f6b>ASw2Ox(}>{gMf?-c9g3!In~{m+LHFLp zUwxNSQ{J1@W{>?&Ya2KIIP~*iiaR|&H<-)Z3I~AP&+?asVe>blC6tP3>uNx8cQDp_ z^rrZYc7GJz>T3ormrP2AI^4wQez=$$rNYf?%~-JBa%kNOxLLFOGh82Ro)a|h>V03! z(b#2K82;3b-)s0>%s+h2`yUzp55AVWhOhU;dorZ_uQ)Fk6QO+PU`#LT$k+sW;Sn|D zHoZsCuP*@Q7p;gSF+wyXoMtU8Yjr)08{_t#<%3WWj?w=b3#2FAxZuk+|Di8%RKUVF zIDP7-Y1YB4F4H&RQATcYNz)wKa9#Ws(J>RaOGCphqC56%mR6>PMFe;K0buT{of&$h z?XTePDjH$R{*rz6-rT^)4@>E986a`eze>@YKGqoQ!@uJRI`p4HQr^ExCg^A%Kgj7c zw6u~ft+1t)Y-zY^C)!I?;`0P2l8?`N(0vJTD1?9e*^ddSoS%cfeb*88{ceF-^OU4=mPN{a|mN#iY zbUtM>o9gWV%@lm;4uh=O*^LVK6qX&|Pc>77`kuvDtueGykuo&=R(FP`uqzLR9pjTJ zzI{*fmyGhq;oY(_D^v&cKd~CtJAR{6!IQv$0yEd~AT?MPqM_a)htRtu22~bO31Fcb5pgvo#`j3mWu0gp;bc z&{Ug4#vQBe^?Zjgz|Pwl3T|%LVr3l6^Tnm8D&oiTLgZ%w#kIj4xqcf?CnN(|!?rb-MII)_<}KF84q(w&s>!z-0ZHpl=3!PU143OYRtp~CD;N(^F* zVqsA)&rnHUrIf`5B_ULczH-wDT(2&YO(wwDO;#2$WUm0}NUCLU!tS|J)m*Nhk}d!S zYfDf|lZX=3TNXE<8(0hsB$P8Zm;h`F$8~1SP5OPSgfVK-Rxoxw_=vN%#P(%2-_S)jM743613|K}$WbS5<8-x=0al%2 zmVAl8qq10CJ3;HbeZ~GF2WLjfXH9Ko4brMDGuSs7!34gNY#4(?A8u05vl?B7?hO|& z8&X5PvWWEXp=D9d00k@hqLHjypRFXZgBVV5@PJGmU1r8&arp2Mlxf>SU%(dZySH25o zmZM(z4mfQ-C|hri#G^Z$ex{t*=#&MdL>3n}OMTDcQpIS3ob&DyIO`MSeBswBJ_A}y z%k(GliHv-S*FSz~z)Rb*)iWH;jAAZZ2FJy2INKc}BegAmAZs}`am0$9Nx!g||uqaldHpcWA!&B7Pbz;XTCHJ8@DJMkc- z&R2(D>A%;36Ze5)aZ(5EOWDJ0(QCeaVyr_FHgsmpP07vkw9L(ZR}2T5yNNex#Sis& ze%s}|zUzcpe&Q`}|D7J^?`}pO(`VdRhu`+DW_0)g+VT$}g+FL3DXm*Q+MR}?dE;Hb zvC*#bRA-w;F}mHHUyrKmU8Q?M92M4qAP=2rgVNoDZ?)1?7PA$}tf3G%Ku=^7MSSLc zdLu)m2L5X_au4WVvqBsIM~Ay98RVnyp`)hjN?0UJ|HTD%l-Og{dTE zXGVP;Xc*^|JBsb7(j1e6BhBaOmVnuNXLEaOa!PK9!l!lyyK$8{xt&wa&O|OVPV5Zn zC7W~FBeqInGHVK9Vf8>l9>%mB5mqJH{QDw^CNbcOy*_Rx%#8{eL4+EJIv`)D( z22m0K<3mO%x?AnkVn)9LPhK_6&dM)cxf~8`)s@Yr5?#4& z^MjAgplS{EQB%2xETxrR4UE!gu@tSg)k{+DNUT_1h2g^CNcSkZ-^S&cKZD~_Qu3D$1jzdb2mYD@Yv3ziK2G|1OI~6Xa zW;wA<_-ft3W!aLEUQ2!gZM1cF+7^C|*LS1SVQZLls1A{do6P|?WcBXbeCz&xo7Wqc zc!v`hZDhsS2JYJiIVbD~3Zb){-;ICBmLFsc`immg*lZaj+RaFM089L z8d*uwuw9$HZy1Ak`n8;IXeR?3%A)}PK)@nOB)_Tw?3Np!^3@z|`8K5MCj5)8&h4j= zXNNC2f`UbXs1>$M)wZ^bBPjJm?zIG4HI1X1_HlUoj+LI56zLU_(YcG8s$XUClFu9N zgzC*_%6JdC{>!ild9GSVc->G&Abr7GWfr69wKf17nG#cY@5*`FmN#)8%7W4XHTSZK zN?byraXLqy&~~UR<3yT|en{`w0I!m|V;|(|pTkJcVegp~XIO6B6WRr4T;O9wnHpyo zDS7O$JY!%2N>!zE7qq^w78B{1Enc8I>1xE5YD$D=4p0>xqyCTaQiE*+kelzQ;T=Xz z7yYtb;KSZadKAbbz+$M{bPA-$Cv>n!m%)szyDOm7H{oi>L6p$mFCwgBK!{Y9pJCPe zVHxQLsw`W!u$jSF!As>E>o}b5q{jsBVC$fmOtoP{B;UL#vbO4e4lX>&SJ0 zd7ej6+sJs;P}HzO4c0ec2J@lI-rS($I`3YoBZk+S8XUWhq&reEZ&h-noOM{D!{Ah4Ia^}QDPw4{M))x5{kvjj^jvtn!zD0<0c8urh?v$Oz zTWPNdhR%gyGJ6fP+AL8o>r5=+s?|UD)8QZ*HF^JZFt)S0iCl_D8rC$&1;>$FL%RD<< z-N&4j=>y4a#Mg|DSQ#%$wEj8qGqGhb>t3K93ifqV)xdGP%B23iZ)d{;Z0fkp{Nl(X zv7dpwlMZX!mVMmGy`aNczx4TTxof+r8z*++A7x4;Y!;em~-M`gpiqfyHIR6PYdW#+r3IjaP7cLsH85jL)~p?;ZUb?ot9#V zhKASrS!zol*DnZ8${EQC4n?YZDu-==pcdsy@4glnH8X6mSUQ7=TwP5{L$GSO0rChS z8%sLaM<4793;D%MBQ#N^gn!+s;5~zBzda6Qhgh2;b zOJ>16(_S4uE#z=!YCIVt-zL2dZMMBHDMrnh;d7bh43Ra`f;1KSnjrp%Zf{T8W0)Gv zaCEne882?q6bAc;adA|B4<{5Qp{KTl(=`XDCnMRIc4b63jA5M7nN^_6qoG3HC?e6S zyv_z0BQ@FFyRz|AqtpN3H=S;G5gK+H=2`~bX=f|3)Ho{2_j8o%CdF+Ow~fSnkT2I@ z@8LjRe613G--Oob3mc1bd7ml8-qjnn4Ck8*>03s)%l#mr%-f|$k6R~_y5q+csHOkt zScCr&=^t%}ed^&H{XWkZs6H8VxU!3`r5ih?9H?q`a2M*BsUB{fNCaJq9oGE8G=r~~gczErNc?Z$>=jCKs9TqRM zx#xDJ0iyr){aQxf{>}dQU0tL&02^8WHB-AGowR?W>-NcPd6tLQ2GqO^aGzi(Y_H+k zN)Cis`cbTw(xgWV3+xOKq3TJQYS0Ok?z<_bfK*ekil#ozu?K0NgUUGF3bB6dJkZr+_+7|06ukQp?#an^!qLPR1TY9Ah}cKPa>imO$;6 zw{WS<@+VnECg>Hg-RwP5ef=nx!*khdk2?iA>?!v1@h}h(iM@wmx5LALm9m2Gp zWAAZ-x+HP}K0^zON1E%ho~%h5;Tem%rJqh|scfRC0ol55&sxX2)pB!bGbWDt{en7z zIc)GzH_zkL0h=qt9+Stlx05UhUwc8CpnG{XTbZBd_4H*C zymigD2$df9)Z@yzF{i9Jnv_)BrZ~*K>aK)vvAx56N};x7Ys;9psKyg1AlJ>Koor zx7z+dA(fFp-%i+fKvpXg9e zeyn66oTx9lQ-v5QdaSi$Fj~wDw5cMj_B>mlcM7+ZPPU3loncR#Du)V-MyzChU}$5% z``x5QKSo`qTU*P}d%vO=S=T+IDS;vpiM87nrWTuU|2x{Dcvze0nm&>`E-+Alh~=`N z-x-&8HS}8(WkW`og?C%}*fd{Q^Za8W|JHpR0DAmH#nW5I@wjThkeE1Yba^8`!Y1Xm zvlCkdTG`QE#D%<7{5qY6#jt%r%oLh)0Xd3wh7F5r2~)mYm=*@!Xh8IdjBx7#ISh7N zIHw&LbK|o8fW!O7(fdkPV^4THNmBdxi2c5)-R5Od%MT%MhJWxi%Ypje9 zFf~yh^1LO@vbYMg5z^rug?%68Hq%am#GGGO`5EU;b|y+G%J#l6{cB$!fNZdC87fbe z!3G7HPCM^#3Wo^@aRX0P8vF}*-+#fsp&0*bgRb-ZEDhw3;9q1I6YTx~D6uQ%JmF6( z?z|}A9Q^$5<%=|TBsh$_5cJy8Gg#-Y)@Rvij$)(2qO9NsmXxbRnWI|o61vUnYKvAY zh$5+sN3%RFuL2C=paX{AxpL^%mxKO1mFrbRi6$^wJ7*pq5C~*z6nT#kaM6A686S&C zp+qvoQge>kkjqggEDNeg&~6djW#@`ifb0Ui@XfBFB!p3~)C0WNzPm4hNU}7=b#6k5 z?5p0iHa1MWnA2$@Ur&YRgdWU#w5Y|{JVUmZUMUa*>h&`GgOQ1Fs+9M7!_i03@7wsE1hJJD&V6e$y_zX~vZwO{Hms+t9LPDKelM>cA)I5*C; z8Y}K-tibY?^OU}38!2bhB@U6w3`V9IYWoOxtGqI>yY|N6vZUfc+1QA3RLYGg@3#?B zDNuP6A{XKfXCoLBw3T>s~&6V#k!5hDtn0FH5IZM@Mc+&>)*m=r?5KxRvwg-M z6n2;wnAu$|%QcD3mu{QX({r~uS2C!M7XpJV72IgK-St*eJeg0PW~4oTr_EaxPOlTt z^$FBZw(TjgOsBYKJHz$uoU|g$MAw^c8#W@P;`6)S>HUXe17=GiAD4XiDkVd(!;M!KJyFBWuf++K z6eozdYKT_g)S}z2Q|b-l5&J|hObns~^p!v&<2hQYGz1YQp_HKPB(^UmC1cS%o`RAt z?I~En*upt#Yl4xMYuWe%N9$zh^G|A9t?kwJrnR%7H#hUY--v?IMkCe`<>TOG4vdfV z^B7WSANATtG0Of;57a6^S?hh@1}j-lapG1IdqtEetnuD$mjf7-M$LC!I{eVa_YPdK z5!I9g<7d3>??A%;O!G~X8`*! z&5MJxSw7Y(g-Kw`X}FXU(Db#1Lg>j}kEfk&`TEY8XX6>Q1x|flUL(k)g4SA*u58^` zYp)9mUqP>krG4ybTduylM=oErvzWRoj@1!Bz;P6J=QmAy35KwaqHuX^a&vPt+ScMU z&VpJaZSTm{UQ)7AnUtl?QZ>pS$P846iJdk&bx~lQ-k@^rtK}uDaESe3{$Pxh&}EQ_ zUHE{XpDu&;44n-{b@5%RTQw9P8&A@y2mQTAgGUd(|9-n3J%pe8CL;c2A2vylQCK@?H!mQiB^J;2T4r!NQxj;68?P`2}k9#at5 z^~EPxWUL10*(VdpWDtjzDs~O6X~o3ekRB*@wfh0F9p>o}7@T}O93&6%@5AH){&|q> z;h#OYzmZrk?uR$!YyBMVL~)h;Yd_oI>v~$(^D5chl}Pa;@&cE^hI|iryz%e18#8gb z$QG*&;M;(nuXEIS7oT&qW3PfAUU0?z-Ry^d-K~|S#FO&MC%56(w?1U8MeZADgw(fc zs2iqf&F)ckRw&-89S~X3Rsb?SRBd7Xg&|MKfsMM(ti*6lg{FTn^Q_-`E=R>P-kiG} zaPb~$y+)@=dKR_@(BU>BY;VI+eXM;PHqz69Z{HvT#qG`*Tpgmj$Kh?YYk0k0M{jG0J>1kdP#mx>lx!nV&`?{c<+Ze#n7jhig(s#i8F33CL zgEbm$s0JsmOD#~!SsJfVKAKsRl0Ewazz06O0PRvMhK|Q= zNAp~%X5!5=6ZoE8hxjz>x3)H&X_5yEDQ~&C84{!ZWhyYx27j;|geuEfiF1#XzHB_4&xEOn;tu^cZ@Vgmz=gszL)ZxTkY58 zYxb8EHPnpp8C!oSj~dSQ4@MZl^SZHSP>-K}oto{H>|Um(cUNn1qfwY+{G*&BP-#mc zNR(kB`D@jP0q5cw04Augo3^&2e-%SrU&bmX=OFemQumewAOK9;>zY}m*qKC?zHWk$ z+s{l&Z7EnfBi|O9LSIrMrB1cVaL_>l@Hr}HWGkA zS}Z6w3kFsUJ( zM^rZ5tZX|tXcc-MqGRM{w#73|M=@@{w{~z9Kvp3on+r}Yd>b1X?4X~SmP&#{m4>L8YYGq|lJK{=lu&5eV?&qTt6~Lgk ztu3iUQp1ONo`FWv4$o=nQGJB*&A%q=rDTUyTZAc#)EALzZHrv5d)sVIZ%1 z3%Ea)@M{IXR3E3)!Q-ry5W zkmhrlMF`A_#hkaEu43vwEyh)zT;|-#GQC9Gvs~&(|NT&bg;5o!;Cmp~I5AN}yY|=@=G%fol~dp@3hoR)Atn_-FqZQvpj`!_rRS z*9v~Epdxvoh-d6^LM_#!t$ZBfmR;>++u@80N4wK_kz!oTO9(oK@Yd^BCOJ-U0`VnNQbmI>e5>K%iKPg1LM`>YF}`W&T)Q|4iiZDL2#f> z1eu$352Yh3S!jiYzJWq3S!l(D9^os934@&*Zb_XELBoZ$gS7+_r&qyB<_M&?0oxf& zVmi{^G!R;c`*4&(^lI3vA}D|!4SS1ddm8O7BV3`JT0}A{8SIz1COgm)9M_$6x{cmf zFc1rOL{;NrEIUf{5?Kp$ksG1I=I0QPV03d6l&9zvAlTHADj*&HZ+T~uDW;{*R!iuG zvno-Foh^zmc$TC4IlLz~fW6&-_D;^>+Ke~mGmJ}5i7)yXp8kC;W_?lp2)RTRoG#5>Co zM-bwaI$aAq5BuMY7Ep@N@GL!nOF${0AqEajgArUR*k+Yts}cnRjNzq{aR*zo@l^dn zrg4G@X$nK0@k5&##)O_T8Rt&$T}9UefWCh{^)tiAvb50gY6()lp zVB4-x!~8{_Ubka=I0CsRsJvBNpxiX8JA#2Y6)+&;Dn=A_s{#tLm2@SDAF9uB|zzS-2?VDR9( zhl5A`2jA>LZg2SToA1AU_}!rY-GlGH+k+k&1%{8l`}Uh}AAZ~4doX)-T>-Mwg6 zze+*XMYJ0ZcYp?|cK576O}(7knw1x!cG;7~Lm)}e!@IRf+hQ9ran~kksXI&yCbuhx zqTblwG^bYhr$$Nn)jY)OY}d>VCbiew_lTr};tvORf|Dgk$qp&b~(9%jlxP^Ve^GN*+A;{$Zft3Na(p*UneS zaYzz=$@Xdq0Z=D`qw0ig@91`FT;YiRA zXb{?aD%<-pzP_tE5W7A22Nt~XR_juKxIKHsCjQlQU}YCWpsgjCzj(FR8Jb4283@Ha zMmQM18ctk~&fTa*c;?&rPO*)^E(+u_IhuAf`mz5Uc%o_gK89bgXt*osU%C2v^zgg% zH~I1XVDSC$LHcj`iL0Bw#FB6EQq9w+td#xMD@sPsOo?q-<<;I{GmYVT08x5M-dS6WaufW!(lb=agJHNh@l9_RI z8DmvJhE~o)sSb2tdo+U6;CySpRSZ{67oIXgZ8Q?73zfTWwI&qvoZnFF$6C^2(%MM; z$8t?#Im>b$uZ@k0?f#7H;80lBMDsw=(Cuz4o3f!T(3X^ z9zFeG`>nBb(agBfL0`PyNc_$rT0y~OL|fO(3NnIzl?%^CcVzTi$_HWX*=y%a>H#(a z?%I-XDx;uRfdN`e%6yqc%5eNLY%RU*1V$Y}52o1MtjT0F67JI7#(6fG`uqoIkIwB{aJZ^=R9qkb6l~mS4>0A?c$3GSeZ2cV&;5q=) zF0r=vW@=l!KHNnQ*FF4WDbJ~JD53FHQJ9Tx48n=h-Wp+{J%Dzq0;)qv=5>u?YcG?#@qO4DuB4)!(KgXL3d!l+HJo;a}O}*YDe865Go5G&!;OKbNv5zE$BTZV;8I`WLy1L`- zMdu{4WT0FlO33on#G4RRi=XG|9|oa#54hczVJ#wJ#S-2t;s{=oj)A1{pi##G6qC4Z zA5dMi_iYq)V}Py^wNDwlF>p5pi8pTfj$vEfuOE4vVpJ}RU{Btn`uTk}j|%eMoi50c zEHKpFUh`E=yKG?UKFM55=`~fcXb@R}@7u77oXjhqYVFJ-OIo;KR4d5J`?~S5^*fA` z+zIz$M9u)4pK`ya(D`!yxR^}KMM5s_V;TR^PP>oqP_~LYm~?0^TPB@YCJe-cJpbsL zZz=ra{pxb4NU8eZ?bzdP980`k%v79N8K8)UL9S(5Os3!p#8p{=hHf5vJ39#^nV%&!`p?^j6E( zEfUy#;QX`^g72u_3EohMUZ@ZpOG?Jdq+~_1KFQNhdHWbkSWRSX*B*ZN=fy=3<1gL3 zli%CB;v&4Sb~dM&1`v9ZqrHdmH^bxDY(yl%OOdO(4u#9FJ+8v6P9|D&<% zxL3>qH-3=$V2ghlyjUM zD?$-dB~ueHpps!Cmv9rC*W@Xy0mT>^rzbz6-H_Y9(kZ=A%ciERNu+Dw2iL$~IwfxQ zv5GOwj%;zI`&j9eRv)GYe&{|{Iwk5~F7Zy7t$;=VJ~o$;T9)y(bdsNJ4sY9MSZP&K z%(A5?Un>Hu5?}QGbv0(PoS9*i=HD#`Z}rXJ<@`yFh1A z=a@%jQyp~ z7oy4!i=Xky8(oOgCzslLIEeW@oQKWN;k-Naa2%N5f&W!}80)iy9}=vrpAw5EN6^

hw4|%F(I3KkjVo~H>9w6iFJ@Y(jdT9Pjt~=f)No=oIdMF&x?@X) z(;>c8CMaXub)q&a1gQOKf`zJ=G&OWX@F=?xU8iBYXalP%(=|)wvgkh3l&|;JL}e0l z?jegjnsM0G%}-8K5^H_p&m#XqL9Xr8TPbP7^VLZ{Fj$Z{s9Casg1F?!Q=5Rw-LGa$ zvmn0KXFU-y*GrrsM3zMHj-ZL!35-=(N$(BBNDkyKRR%;D)b(0uD%ZN zE>baQ0sHgaWaZiARCkstO3O)SVPkuC`xOCA{E7Pq(v$i;RaCblv_?Lt&#H~=Eyt=Qh8g45)<;V`fK%3|!{?K(VbI8fK*yibxbf;XOoAzE>M@wDhv|TWg zs?kW@H@B^?K{;>z7~cd@=ahRk1^LIny(_VfonpSVe;DKzigsxdE0wq^oZYv&nphtVPyn&?=;kl}}mFfse;|A>R^T^XPeo<7 z#mHaNlp}yv^7BJK2Zn(_KM}(@HCqz0iCme zzW)u!QYV~c)s(F!Nx2w5C3Q&O=VCTPehL3RrS5dH0*?M3eZE;D!-tLxN_@_3@P=JV z%UVOxgPImF?|gxhSiFVa$S>)wrpaS9EAh2PB6gQEz$lsKOBDu8V9KtGLu9J(O<~s} z5$BinK7gC8NXu+@oa>*DoBp;`V-|JcwoWbiLKiY9A$v8=s>3hEYZ>b`3>cJ5a93_f zi4@f+@AF!14X-&mySg*`d%R@d-7MB_DxBX%<>TXr!XfRwR}p@jVZ10RoZ|zg)qdz% zcQ?c~ulVj>GKh8>Gcs60wvY0eH+g#K!47<22Qh{cSXO^qhM_=-kqc zAzuEqgJ=CJ7W)lP`mXEHo|T@WJ3#8V*<2F>%|f)#sw9rc0D{UX;|cy!eEy;RsHYn8 z=$z=uDSdf>xt2AShEsCka(~V<_MLG}1axVJ*wfL@+4=K#bXlbI8Qh~m%-~VIgRZc1 z<(Yqe#hs*Vh-b~hJUbMI)5mlao);Z1M>~ides4A2FdDC;e%$#~EG7zhqEq(Exl0du zAVN8Mw^0&JkLgr2ajimk;_SwqUsGs<{B}GoR}Hil(Y~|zJN{)?RK=@2eRHQGsf?A~ zQo#^##|Sq1%HwN^V+8t%Scglb&UgC=Mr}#JzBa0 z4Ve00f97S?wJK9b&dF$=3+waPwkv!U+6T7v$lyH_bz}#vy`xq}ae$-9LRenx<3%j? zk>{-?b2`yT%FMCnXU^PsFIrUiY*=U@PSf?PPs#f@d>Nb4 zCHe^1HDygMeo=0;TaKhD#0)4YRB%9Z?pa#x>VnpUw?*XOxO8ecRcgK9Hm+#Z&3KSZ z`&T_{IhJwVn;l2}D;E@@b#n1>tNmY1(!yGpLbu>bDfN(!oZX2B#?dm5KELn1<6OrK zt2hBq?Fr1{)_Yk=GQ6QD|#U+&LFOLU09pjF|rrqiQkZ+MK}*pHUvLT5DDXSKcw zjG~fPj~02OM6@&r!`SJ<%^#N>Q=KCzdSkkw7`}DEyj)iG1_st6bh%NN=<0Zb`Ou9e zoa~DY-E0_1(>(3cg(9;qb#OSGa|CID_MU&D~H24V1A1UcGD%CmCQ+qqj z=JW<8sSD|GNXMLHT1z5<_GvolIFEL1R(p0x87qSM=X~KH17~2K`CjA>-m9Xq^Xc$B z2v1B5TD^1_?;YVuB9AU`kntE>ex6G5^OTP%L^UoHd2RBo5Eh7{gv$A+hy}Fk^4m4^ z0g>+`>u{I=+_KIKo}{}Tu~j2(?xU!F1^i6U%(eZYWF6U;*NS_ny^PF#IhhupBBXmq zXg2aQDo3p`koJ(iB89o)tPGJRJe9oLwt_H5Q zwS~{HRc{YyO1mK3A~Eg}X?-bIPVK!g@zJdrD~euAsw~PW?y?w!nWX6Z4`(FqWXVH) z+$4Z#d73-chL}xiOMfN%j*f{m^WMc_TZWS@IA~&pkpM+Ny1yYW6da*hC80xzp*@=ALJChJ5N>?Yhf;sK01zU-dKo&E%J3xbr-~fe zR9@TIZR4}NPu{Z9&+L)pW1c?i7ASr#6{;7-Tx*&>{r^R_k&DL$={8H3Ht9BNk#1GG zNHf?GAg8k?%h+~RgxY|ZV)dK#Kd%2wyo%HUY(&~1JeumJk z?+)sh!e_OUKG-hR#X3!q=&Qy{^eud}*sbDhw>n-=h)tvQqym!(&m6-6x40{6Bwsm_ z+~-kYG?J|?(YSgzrJw(~%x1v(l7CIK?Z+oEyg0jwEO#uXkUNeR!DPAaWm@dW`8@s` zL>S`JaWkbwib-nht1q)A9%bpi@feM+J%PzLK z1h%-8h`WM9fVHP-C>+FHI*7a4htri-gg(fVED#vTKLcj?q3*9X(}I5>y?X@=8wo=I ze~<&qoRrlI`D-U9FPkvEr6$mqH#e;VZrp zlD|8nOi7<3b^koiVC*@OfF)BV?3$!(IwA=H+)5&=F7lEBbD>-PLVd09w`vW4Ps(y} zCJKO{Dr$_dVVus95S_SiNLBaY{;TnoaZ~*?u)#6n$q8=yGv2zDZgMdW7iu8sFT|oP zRLp4^*(KEvdx}F<5?J(chk9zyv&r;FZUemlI|eOn{y4-(U*ovNKqz6Z7^wkyD@ z^3=uyR90cXlh1Mty(n9ko<;4ZbyA~Um2MgxCVQ&Uk9MO!$qmG~&Fr<%UYv!6Tbk=6 zrI`RM*BT1!@^tw@*NFxk^sIJjpqNcGl7d&idV;`iD^u6^+zq2zF2iy125Iq>3w8*7Yp zC_Z{`h+q=t2*nYlq57)4<`vA8rn6u3hJ3I6$~YFux3O`MjJmMnqlxqx3zrZ5%xd)$ zvf(FC&E6uGXXQUF$I@!1>*lFKw~zm{CkwTcUu8m}kHse1oug$r%T0(~w`ToQ-iWd! zkt1$_4n zR^^}%cdwO==6G!$vR7U59ia>op#kmD15(#SZqpjXi zvo0KpI*L7d&qn>a!v<3Zq%t;`T&Zb;$*H%ly`*b28nUqony;iSd(nHkSaS_+nr=v? zm5rIsJ)gYqV{eFyudHD3cYBSL(VX5#Wjv?VvZ#?%`p(7@2|9lvCqN@W6~aOgSh7dr z9Bp&vuBKaF2Sz00!Nz&kC{@<-XX48}B;S#l0Fwi5 zgV4Jwaw5H_9~Q(c$^52!?v;RlJDy_ zWVg+`E=4iAaxbNv-w0be_O>{kOA1FHc&#S0R2G1_yeb#<^g~|NVM96c&YEw_Wj%eK zQB8ge!9*Yh!f1q+c`?N>ielGgSKi^WE0-?2)*4f}E91Mdx=r{Ty26epLIo6CV3kn0s5aj{ilaAL=O&g zXcuiDW@R~N#}xVeaWw}#^9CI$&}-&e#QN*Ov*(9@2eqP>X&DeP{y&Rf?~f|;GXR#X z8)4RVq&Na`c@w0%Kf9icdJ7hSe%t`wKVSrQF{HQLmWK+lWVvN)?v~@3W}HshAJdfPi6UMPKN*I+#=i+#D zy2!Inx9pCXf(>bPt4PujO8JUKjuZsgNdDUzUGK@20cvt#xh9!CCtE9-%7fa_0p`S4v8uj&Vj9}dkT!ka103ti|2|GFn?T{?`Qu@-qlWL_1l?Z?bHe{1YBgc8Qs_~?( z>+&+~VZ7L~naM7i$(V$_k2LZ>AYZq;7ww4t)yR+ePPzR;a(>=2Gwh~h9+3S*bUB7# z$K}A&6h)dBZ4&A-yP`2A4+eu6SWy0W2*0zdpV{XFX&q?)c7uk0yLaUrC+(DyS-etj zT8$Xbc=5wy;-C(SUjZ+ZbRF%Bo-CoF?u$aRl1~c!0i0nq$>#Yl`HItQ5jzm<#bMDU zRm}_Ixl19tHjS4TmWC5$H*BU=uzG9@8x3N1A1`BjIb@{1OZjtsRf_v<7q_wLVXjC? z*%bQb!-&18L>$D2sB_|{%o-Eo5^Lr}%ltPd<*ECXvqE2d&1tQ<>Yd5ya%Ohwr84x( zFeFGl#oor9If+40PBwv)EJJ#veKm5e;SHr4QaJWa2w%U`oMo(r2N@=xu zReEa$7%}~oKwZ{1qFpD7pQAT7zL~CSAc>a*NfHWcF@NfvY7cUHdKH4$uF)zOcv@@8 zsx>Z?#x^!sa0a!T$=P9Y@08MML5lu#k)Nl*Kjg70tlK=;`p4ez;V8hl7BE*nFUpzk zQ_}-Mr__4WcXJnP_(&Bgd>jcWmBc5}{+Fq!^SAR1Xr!PhaTkM;47(sNWx7d5(y|i0 zBR7PQ>gGW}(LR@(W#ol~q7^9;-5K)5=netDrEoL|)V(bS!q=F(tF7*3M%6eGy=t<+ z_v5o*gy9_ai*cwM=R22un^!2J*c#`}<&jM=; zNXqKwhQd;>EoxC(RD8*Pt@wcUcMRunBs~?u6+dWGur3YV_ii*Kky;(2o zU+oW6Hhz&2?oJM6R#0;VS(B7fpymow*-Cc;Wmi;_vhgd5!`aQvgzPJ2cvKXGW`%O* z&5qBHX7S`$IudVUE|2_;up!LrqhJ%+HRSKcLFiI04zbbj&^BI|8AcogD3YODFZ0Dk zF14C5PI-|Z35Rq#RflI1oS=t)Z6H2S) z!q)Xu+t(zv%(mUH+m3CO*vX2i7fF8r&1pG7nzf%&YK3Oi;W}3ZJ9QK_-1vR4rf)56 zG3|}lZ{OWm(J{s?#9KXdrWI*!pZRKc$u@<4PLPA-En&%k>m#_iNmka+S#dVY7ZtD* z`I%}F-NjBU0#kzs`a1_wvZ{2X3Sf6$V}c5;-Po$wBvR-IO1$kJL8^%I+jv=cR=gU74Th=LTaO~T{FJ;Rj?8jc0jZ{!9w9wagAl3~+cB^n2 zH&T}u7qd0Ts=XrXWVufzM zd-d?D@a(tIU!stZi0E98~k7P-n6@IiwQJX&_fa~5>z{+|5)A+}biSBDF#s7j z)O7>sr7Haue0Ucp zW`lkQGW9mc*k+W_4b%$P14hMDuW&M&6>Lq@PlMQa_FPl+G{xdl;53f|KkJg-FJsdC z5kTyGgZ$Q6Mt{)TT5Rtjr;=`E$aZW3`$5jY`x`7YH>It!^Fa@4Y*CFfTb6m`cv)&a zgF3?5NR7tB!s^3H+tk;JSYbj4}0}U%A{tj&=8F8B3&XUL=AIeKwpx;;e^WS z-m&fa8zpUz006+rS9_t^E7y6F0dOWXDB*zn!+=;w{ini5Op8jfSSp4)17yg2QJ z0C%S)_DU0M3;9vIhFh61evSAgGLzyrGpb$$@DR!J{rPZprI3a7SW_u^Bj&Vn%xU#o znA4D-6zaJ>6px|21#cLeRM(V3?oi;plRuR29*1b^$jSsfqI`{WiFk*}a8+gk7pcZn zj$ErZFfOpUR_#XjeEzSsQUTR%XWLsnT&wKyF6v+s9^cm0)PCruWJ4-QD;{TP5AMSa zxK-d3r@DX*`F*R1wKN<2Pt zhQ^u1wMN`ek>sNE!H%p_Jqv)nFOGV7unhrg-CQvfz53Aj&=6y!%{*?zN^4TiR#lpp zU`^WYJgz&1^qsR(`>VUrXvH{H=e2%I?RNS;%YWMgwO; z#Y*h)&m504)flK6De{*p(Z&J$RJG*z# zEf>E$gUx!%@hV1-IiTDkZV=uS)0}p2@7v$2Of}4-{B)L=2XNu-Uo`3s zG5~0dbZ19i5;pvtP51Y9cAP6OyYes$KzU*t$ViHQiN!KJzRD1ddM}Hz{j#inT4Wd| zS}fIZ;4C!r%-GRZug8(5-CVHvh}Ziz zwza)3<645`N5K4x51lbu=-=A*w)f#yT@+<#QchKFV&?rD+?YE(m;Z%stwsH!%E%V5 z(`=u=-z))AuLG)l@V$wPFq(-2`Km3&3l59}O+d?Wmtj0DY3N-{FU88s>cw8dGbWxN z##YWpSC+ZtTEXL}>IH44k+uv@v;62lF%w)f?!R-r%{!xTTbzc#SXe5=ft|rniMb_2GYg ziJq8;QKX6yJI<-$r1-|F;nnmD3Xk9P%5<~n!!2Jw$D1PWm94zXGOuzIM_?U;fRb4_?^h^xmS&8E0!6HeB%$4u-`s5#@y?d)b|0wKk>Sjr?yMl;k!}Zc4F2#7&nt+K>lfC{>~75KbIwP)@B5 z%9wcS>xcLG5deriuQpgQYI}h=j}-NAM!{|a*>MfPXE(ble{}O9H-(<1k#t+3XC1)N zBl5lPsiv3?GfjCZ(p_V|+k?Drj;yZ(oL?KQ4*;dtDhVWHA4U`b8C-T}VB29h-1hq` z+iL~yn1viwHkVALGR#!5oHjNiEY!w6Ep1YBn1aJaR@SiBGeC%yR*Ufyt!7__qZM7& z=$0-yUf#0rk=dh?&!gH*Jdoa&@C(%lzHn&a8aJA>@VIC@USb))i$OU+=7Z4Mmag?U z73I8#nh@DK(H|k&<_K0g$K4wh2HOs!6)C)UtFA@RcM8Fsh9x!8ElnN>>f}v^r7@T- zY|SO^E&gxo+rG_+Ma7=TxeN<#?)9&tgY$=s z%kFhDt#Bu|_fSo(-W2#|G0K5<$;29Xvr0GX{xE~3-dqfI)*&3g6A7aFm;90KlpcZ z&jyQTa%S&-F|6TB0bf+`0G@tD0fk}m`Q|RoKI@o086WG}XGg;`3@s|tKGV~t4|dvT zdfL#>gVLY4J&`zd_)e2I;akWdEGk4pE0UrdpP{_;WO{j6DSa!+D?BV{ad-qbrUl1~ z>Cy!U&5C;0sCzLG;-IV;rE^}AY&Kt|P&QILfgVd@Q1BNgB!X3X5WIRAJn!qeTIz&B zEW8&Fnuo!g{f1eQV1@nTWXyA9Mm^=yh^#_~JC)olKw5X)I33ma;z4JN=!Jx-x&$3q zqyoX$rDh4X-7ZtBtl&wpYqfMeX6Xf z;b4YgEa%h9$Cp4Qsf3fx#7wqttDNd>dXi4>9l)vSSrS%sn>`Huw|n#0py! z@@i7qBQ5D<=$4l4Je?G)!*T`(d-uJ*2wkSeoz&KRzjK7ag$Ebg82dlv zbdh;6?JBgu*fYCeD{N;+#xZ=CIIE;pfY7u;O*bd%NfW?R& z4zr-yFx9qf_=L7H5{WidTYEK#&3LB3%ye9M<9Tz>4z+0oh*wDWX z+=M)&64?_(q}7T;Q{qzi9NYqfO=Y8&CoXGOfW$EiLy;EI01kbxdO9a*mTqN7!V4Z& zbMm(8ajXFO#u=P?R*qIt>Xi#jU*o^J3|?gyty1vnvL8ue{HSR#QFK1R=oUz7B^e68 zPN-tS;m#9`CV^MWM&C-vmQe}W)FbVdhW{8&nFH~*1!+5*#DuBHDX>yg9H)1!azo6- zjqdFBF|x<*11sGyE_Zgj`vIK=xZW|F928%cZ8&}~lC>F*6|wt43S107m;&(A(7Y3& zc|W9M+Mx+dEATd{|kZE}VNYB%muom|BAq#NY7g^+r3I!UjB3xA^q{Cj z4!C67ZKzQ)6v=}zVMvi^=#Y!ejs1}uZ>&93OO=4SrMNaJt&v(?Fbd$V zf69+P6%Fd`PqK0Tw|1B__Ky#7SQ?N)GTk>-&1rMvmxZHUoa(gah-$m;X{N5!w|O>U z%}(0bT?>d=F|Pk!bd9C8)t0v zki8jzgENFOcJdZbbM0IiyhLMZM;J3%5^P%>?lt|D{_YnkwU?{*I`J^C_pp}-ioiZu z%(9?L=@k{H(28Z4<5Ah^r@v7xhjzkNADFg90f0LJb{}y=&QaH zEl~T16$&#{iepPQ?1p3m;w)!!-Ch$jNjG?&;l3BmF+bv)cWA|HaQ#o6pq#79FE>6;+i$XvYWysgG=G<{*CknE}@~-e~32RrYXG$}No;A?gtg;O%C(NYfIy@gF))Z`gD zfy-{(yv>30&f0l7Rs?+2@t=Fe$mSgcj#)K%_wEz8B6c1WPN)g@td$RG<$`^ST83hv z#)*+*+*G!q_i=MGwOws(^<7C99B0S9goE9V_BU|L%3+G_<48XkvIN!h zbtCdfj3%b(1EbI(@TCj4AIbO7aty##C1&3;{+ue$#Q@`VFQi+x>azA=F=HZi&32g+ zan=DD2*-ZnS?HVZb&1f=S09NJB}$asE`CuJ-=E9=hT#7Bzbd$YPVxB3P!}zU8rc8i zWdrznQ32(ZV%W4A)+3{^l33gZh87$Hn@5DSwY&sCQ#(n}zjBJQWL2pctNC-X7+la5j z+4Oyj$D;2HAEkf1aFBN^kj;@KajU7EhkN_G#;e~aMh&lC4=(Nle`r|rdT@DPw5I1~ zV1RKuQ-TvdT9)ZqiB(3?CJ}oq1$z(#P2;Xaa|u#B0L~c5s|5<=_jj&$!bz8&cZy^& z*AHL5{Cd^ts?)Z?jXUqO(`ALVihFXw;$6VuJ1bSbowzN8!*7{ zHPz+)1n~5tx>S?D-f5%dlcD`FD&n02XAJJ0ifIoGEZOqVxYj$OqOh0NIYK>0@FMrD zOfY-{Bc}BHx}8;TYVzcCym6Bbp9F6ibQB8wP{bJtj~SXph&EbTeGIbN51vLlLnWZ=a4TmuZOMNsRd`{oNrLl}Vdm*b$kZ&FU@Rg?@efVM zj+qTti>gsYUq2vi=`vwD5WUWDv!f-mcq)hsp1`kcO&L+NQ;S3#dSuVjA_gos_6PPh zxltBEUcN{crsXMxZtyGZZtmSz^{h`JZOdrYsbT~2_5s5%B;#^4brk6elr_C+SgmHD zJ<=?)L4Em~1<=rl=osJVS8cp8uj*zF9LbMv!$&C2Z{0@I6(o_x&vgG@t?(-egG#e6 zNtYOBoRyz5v{`sYdL^ss*+{jM8@xn=pY)qOby<)wr;#w&$>ey-Kd6aGbzbtXRP~@h$Tt z0UHPnNBvgqief;>K)wwadIL5R}a z2Tf^A9~ljFk~^{$;vO-K!Z+oJ*&vLOjZqgV7o!O|Uf$1vgtj5T@e%X5MH4j^@kEX3 z6Kl*5yUJRP-d?(=U}!-6z+a z5{?(K)+S7k`C^A}UJS74sL+@SUz>bB^x`=txETe{#yr>5V8w6897UG!mSMYb;+j@@ zV-di!B)dTzA({T+Oo#cyoPLbTVA7*9EgzOVpL{Y;)j@fN%WR84` zy;Y~5VxTDc0UrWlr?ZoG*6S{4xvnK!HjES1(u+7j!^G6_gPpWKi-u(TeVQC?ZX-qe z{)hxG`DkaDKQOL+!yGNlQ0O*#MRs?+68-1WqJEXVLNj^3yoVLrf??Vu+t&x%*{Grn zmPzzmWN-vzYEdGqsh#0F_OE^Wj3V#8e0k|zRK~Y7jWpYe*X3+84gB}qbk1`QR=?BV z+#N=4nD(nLUx-?sjsx-b|!ZeDBeYl=?bKzaX89lCU%z-we^;GExDWI zYJwXN@5al%0CA+oPTI=l$k%4;E#I0%I|a)v()zB!yPGxpj9AFBu|;$?$N4F`T{UMt zeE}~>5GT_sWO{h@=k^AcnPH@=E4K@5cj+Xv;hi!phvkS-cpspI;})eoj2o!n4&x~~ zAf&ioH5xx5BB5^%P20)X-gmuu)J?U}yx5y+dKqx}cGaW_S+KNB$qx;$s(H3(YG9>} z9jNsKgHCYOGo};IyyavJnK5d_&*f+b@aF=(lm%;+52|4apKE&izC23L-j@$IrT_wm z)yDn?$EVsj>WSpCk7jOX5-FQ{k+sLHyYGO+{*?F5Qt`r+6|NIxDXu&_9_<`yxYhvu)K+0#>u1Bi??I`knp0<}CuJ?=jXM<5`_K?CfOOPI{i z^5F3U7HaybH#l(^bB6rrR`}$!&B8kuY1rb-e?W6;mh8hgeU`mbZ*zu~at=XD_O!DV zvUIh~8<90C&~47i4onH%1&2QMhezY?^4~*@yb>DnYoH+yp@Fs=K)63FtwLK5(b6ma z3X)B$4y}3n^(oc*d{#Nb{RQgBUK{pVwbm|l#5!wRrlqsi#*9$t>Fbx=R)Kz*#Q+%w zZXzBoti{NAzECZe4y^+WSJ!tuT<&qJ!pEVwfl3A}ZwFt?e-**m;&4O8iOxhcLfP$R zg&@!~bLl&-wQTX=qtZ@_?PR!8F!hij=L&5;eZ{=At-uFuKl-kDh&;m>-?7|)+=0rG zCgc~Ft!PzcHp^>FEJq<>dmGcwv*|{<0cG~<@mW60>aAIUrdicVvo%IEC;-b*NC&WJnt?jFo%oHgS!)yQqyWT=q8Vvuuuz3Uie8dE=%p*M>AQK}gUH zbYnN!-5_ZQbWW|~kBu-0rxfsYK}2x4yVe(ob;zCCQ)*=q_A@o7O-CrCVzgZypx(n~BZOJ@o}|2q%GJ zTa9D`@RoYJ$mdf)OTF!0az9P(_qR_|Dx({vT$nKMG0?81pal(egpgV&9{Hr`~A+&hJ;rL&KX&RF}fJQJ-CV%!9b;23$)^b{}2|v zN@wNhS@UpG?*CVM@^8>rqJESex3opYJA6Z$${SxXGdz}`PdEDQT_*R#@4w`oA=wabpC7Gss9>Q0L55V?@tTaWf#(+hW`&} z*&;gp@TQWP*bFE9H~_LPo1(DG8a~Mvp!`C6cak0=n!D(?zOf8(gJhB>PYvty!jh;_ ze_R0yf8Qa~JaSmLQvnsA9$!~z)>*wCesB$4=T zD{7by*g;@b4;*fB!z+JXA5w>ct;Dy)ToJhtGGRF)W73##v%QX3M(?2}VB&=r%V};( zw#1|R@v+E=SBmySBIU0=E6gwYx1f}CUiMDGcRAX~41IGW5qOR%_I8rpbSK$h5d@~kd1w)2)%8S`zpRrDcB#3B$TA3PHGRdUv^e5aGwuIq zzI=JcB8d|xl6cnKy?avHyjAnkPa6%G?k%9!eBp@*-Cmg+Vj+bL#ufu#Q&*{8G2?)V zjoDS(JX_yZ=9Ro}*0>!d5VoIwnCz=Cec41`1?7GSN7&Nib8w7HN{fI#b0&Hm{&sGt zT9!Lk&5=Wl7iiBqBSy!~2}~Q8d^l)pB%}7LT^j{|zQ|AV#S^k@yL*?UQ(wLiR2aY6 z&*kW&vp?_j68V@bdd!v52K$N@GYL^h*B6qzp0nCef!Ux`)Z!UV3vz~^gX@EYV-V; zJZ&Y0Kd#v68Pmbjc3+mG>YD9V0_TV3jG8GOq{f-00whz%ig}Ex9v}b|{zz zkg}e;ukbj=h93^>4^{Qa;{%^Xr2p2+(pglJ(%>n)GHvli-D>XfS2l-@O}djo;8(}9 zMOih%f5(JR;>4piS$PU*Cxzk^j)$absBDI#m`)#veG4%Dn{79+k5vFuzdR&|<15urN zO|`w2HI>cYu{if4A_*tQn`2}!TY`X9Iy7?mKFbQH9>c|A&J$X*aupX{e}0>V9l8J* zuY0O~Yp43DZ$4vvAz%<}9@BTzk6Xirp98B{Qq`43eHPIT-~w}SBijh&tG&sx_0zv1 z{2e0vJ^mj8qaWwtvFq)Q>`{YrH&REA2!jYApHquL`zWqCVQZ0|CIoWmiclm{Pm&dM474HCUTjQ7D zF1Dwx>1%FE)e?Hp-KZ)5?X{6i{fMO6ga2thZ88=ji82X{^8b z-Ht8vGP`&;&w<>))H``r=V*+SEik{$U@tw#fWJ?w`Q@LNGfL#SS@JIT z4ZNIR3olMYYi)E|!Hb7M0Xn%T=%cSp_C=gHZFvMmS`0eG7Lz@NH!PmVZ{BNqqn#u1 zB|1l@fjf}v0E3a>3kRQX7CBa<1a79DGY8hIs4WR@&?1KWa}7d4i$MZkPFv{wEH5eU zKrdRNe`W7y5|l@7o6|*hoVd*B%kkM3jjg>Fd5M2|%J+iuCe|2_)_9K3a(wJO`m>vi zWQ8kG1X>UbobBD2jkpO!1w%1N{AJAS!!2WtZv0J-(^s8D>>~YuvS*t|+DJ`Y= z+00Ytx>E6_ZnQ+6skdGO6lV<^xyca{gie(=7UgXCnhip-+5xHSfb=a?bQ&Ip&H5MJ z6jluhA{Fv4SD)Tg^{54p*>Mf;m0OVc08PM$VK8cT^-!S{Vd%#FLx=k_`BQ6h3kk@4 zc6w~|!fmi!nqRkNWjfq_5RQk9uJ7LccIQE}r3UqW=V;gu3)6kx^9L{Qx;&19^B9dk z-uK*m4R9-K&i6a%&XEplS!5hZpC$bqzD$Ds^<7jxEWy^is{`@()u=9DB6JLvH9>7h zG_$Q&Z(UnDWmiNwe`1m^KUTY)4(Ix!@v-W z?Hbb?Wjf?KZoAT&p|}rZ_=nNdyRXLpZ8l)R z2aHz!VQ~4d_W^TCOz~JS)b&23MT7=PU-mTaL9Grn`XT*wvJ@U>955@3w5(9J!6X$h zK@t>(_}ME`IR=||bv@@LJk>^e9%H$HA3v_L#RPjZzkxv^c5?rZhAn#Iu|>ke*ZaRt z^OI)({WpI&N*5?Mf}ejnN=f?i{&zb^>2eNl{&+-@TMppe?jQefsHlEoKHyc1$S` zAB=VgeVXUd#?FQWD}bASysRy6_8gzmqN4P$FIph5J|+^K{mu}$?#3Z<8tWo&PWjNXZ|9T7^OHh2wi z#aC3`Z40WQf-`WG1K+xUls^=pufOD%lzv_=0)q$0ud*2Jq~z!VOJMv6iwF6z*xc-w z@A>`v;^=7ferxxB0|?x!Md%||jXrR_Rwab3SRH)NRbb8hD$9AS!g6kk&|lembC)*hp7_1`TTiHm+I z=o493l3DnDm=lflovU0Ek1)}DBjBh`gE5m@Y(^b-Sk-M#C6BW3tzQJpUG zx>i;ZQi=TJtX!1L4GvJetuFp=D2FWH*9HEJ$SUajL0KaM#XL-;Sf8n@#2>wZ85q71 zvzAV@yV+Ax+i&)F4U1!HQ37D1*`U?EKcHvkmoIm4_SGEC0qsv^uUOR>`nDct^Bfmj zq8^muv5SR)ef(H(qSR{$3Ujw^q;Fyb1!K0K&hmUJqWJV2AD-rDmoO&H$Nul+<(rE) z`2ve^Hr?MFdgH~lV%TS0k~F$?sBs6TG@5rbupoRL9PiQ2^}6q`>V(dNdK)3{pBFj^ zrIwDg)@-PTylH){khrGn&#@ubD{hs72wQgMyynd)ApDhob-v}ef~}w$sj4EHaU}T{ zT4b?^>AmLp0>iG^WKYPfqzsd({&-!|K&K;#tt+0QcO_<@*%?}?q?et7R(QMjyZarR z;=?R@0{@QPy{FY_Z*RM|yGc*^#k}Y8g_nK!Z<`)pyxIfiD1Yek=vCW!|32p5Akz_I zEI3u$W^d<#8q~vje+y8`Rx$LzH{4J5s3BMKO5BN|x7^6GWDyB3-2|`1L*+Wl7Y!HXY za5(Wsfk89?dj6i8Uq7Q2Zj+s|N&H5JP-S00KQF3tG^49?bRVB{h=0*)1h(&LpgtmK z(XT~)n9V6USx>9r)nb^v_|YjB>H@BEbh-S@G3#_ZIWn(h?6RAG(@{g2Hx+@I3oU10 zknlNAd6kv=?Z>%cP$a2*2pHGwpKld$>s~_`yL%U-n+?Wi7^Z)6Xh6~ciT^%;6>?C& z>Aufa?R#vQmvdU=*mlQvlU3>*K){vnRAh;yO-YY@*zZ4xToM`^+5DwZ+g^9PhBrM# z-D|;01y1U#Ki??R2DkIlUi=uPF?anC18MeDy|yTbO;%lf=nLK=^+p_Px|-Tk1oUJ4nA5puEG zMoP8XPYr!_N88d^XmkqGqLj70u8-UVLDqxpd&7KMU@!`e&`R$+B_z_8LcZ~9>g@z0 z1*4ny1P1ob2>^$09utT)DDT;HP;qC}@wBiCAlpzUxzq()5jYB!B>xte0xCaP^X*_y zT$Hn4><&;wZZ@L|x2T`qDZFH(KDx57gN;3)#$Iw>DZCl02fIe?gWtd7@0HSENchDqbLk3ov9abS)G`4cQmSmTqU~$+7;k%NQN5%GgS4pM*2YE8e(gA z@1iS6jVet3VMP|+P;?H{A_zwwo;e-B+Y3al-e38K#0CGPMtXP`?gocR`A68>@qw@@x1D6o$DQ!hrQtJ??#93 zk)A8jK&)sK1H{aJT%3MP2GVkR&K0D3>qcdwu$T{=TYDHnyC~`ZhiEO(Sjz zuVsVnQQAlknRt23rmUmO5}%&>mXV_ie!Iv{N9XkOFCuRny`jfcNSRVchA098N^BT_CV+^A} zND`p_6a0QzTomPKfmVz^HpO)G4x6D+HUEHLGIyY|;DPC^(HZ9e)2oMK0)MWy1GITfE?($gD$LL%TX z{9;4=1DqU3;(Uz*y?r-&4u8MTt3SVc{c7}6PX1N=@OSf2LpOisZqRk=o&Cwt68@1>)AqSDr^-Ka zj=ToN#UF|*Ji`V~^qYtS8s)doNf_4*4lwD`Yj$E9{TEg*^qVlImulj_a(Ri({0%OJ z%2fI*HuG7(S<%d2bu;h&_PwdnP_Vzxr#EP#DOD3si_fM?UJ}5}VHwJjAZEU5QOnXU z>S0x(24PfTwMHH~D^{-J0i3$gCt61Q)v@}Y%<98nsYZ?cOyr@XQe8@=m)YVI0M7x% zTHxQELpyMQf=P!M>@u2_eLTa*?-zxHgj?X_seSAi&BBZZwrq4Fdo?=6AI4pCG{qtDaWqQ7Sc0z1<5cesmQvQg2qCVo;)zVlJ4+&dQ%1h`ogS;m;H|KU)El ze=bzkrC-XCD63x#n?Z@>@d?~g&8RJEG37?Tl#(XYzQNqj>)ZF&ll#dF=3E8*#?xgD zcW$yf_}yT4bC%)5;F~{W$A8N9QY;Qg7STbSJkGOaQ=BZPiOK7e@Gd7$xDB|8Z3MOq zvw|mpu1$Aok|lqBmrRS}MYiBCDjr7y>roG|yR)X5*ZbSsr$uwNJjM`g+tR{zbl_O0 zH|{5UJG*;Z@XsI8*Tx$X6JE80wY9QZU%PGAJp;KF_Mja+)W1@GIOQ`3b<>Q1Y-!!*v5>g6RY_=sruB2&v(tzW9>k%Vg{zs5wJuz`Au} z*z*a1HVmQUO~g|XX?+y$bQE-FMNaGMYbJ*o?)};MNCYVic&(npSzMf4zAlB&+)tXtGRL;+v+Dc_4h~6xl0&81k4PyW zR!sA}mdLxVW`PKdJAYYCU??XUFp$)tI6Jr_&g`+70+iU^PTu8B!+Qs-(NtVL!T6LY z0i`V^`C2wj;4I*3$;9iVS~jS=$M;x_lJ}4|Q$qfK+Xhd|9 zC=q~OvKrS5s7{`3aXziile4T&$|}iEPLLn4^YMEpU+Zx<1 zC{kF$zM6(>UQQZJQkI0_`J+M z<#67Uc~ujL;UMaHJ}yo!;l?v0iR>QiB7lbs0+!*__VOY>HN?zoiQ;LtZopMnoD0IL}#9zzkzd7n&{gu|USu|_0^UF8##TG;HJ ze4ubufEo7T3MYIEc%vHUwHqyhNCrd38oEK(CH~c zJq{9^HpWLZ8$Rl0TAt7pqpLn@`}NR}FRvgPWtJBwVwD(}B$2Hi3t3oB}q|Dz(?8oChnp)8Nlg^d_i&sB`y%cz!Vzd zb$62V{2cJ@3y@n|yQUOe-NwLz@cu!o1on4@s~~z-O;zB%uV3_NbnSvDGa_ln8_HNL zLHk^zWmS^g;`&y-lGioMQe-PjfrfWfOL;!26;(Y--X8^DDQT$v1~6tW8ou`?czpsk zI?oYbm-iaPJc7*=YyiOo&h4js4#2-ac&<(eoDQK7OJdBOJYFtv3e(F3NsJO3%zzd| ze2Jlno?QTS0*BwbWBUo`#hPHhcy(^$sO%J^$#>WuSAcntSDag+e=hT7E>m|EF>oGF zl~z}TTv(kz>YnwTySJaTsyNSGDvLvk6{BGPscjDMLRVv`RzVmX3i?ICBdr-+DvN5q zDCp|7n>>SSxth?mhD5Bnn@4d1067kQLZtYR4x&lNL+8&l^iW2L)UpFDGxoBw?+9vP zyZ}Wx=3`=F%O?Uj>NQ`gcmXyvnVw0In*dgVi-M>iBe2!AM`~07VV>-VZ(ecwS8R7E z=*V128X0l){sc*P!ZY+N!y6-;^+HMH1j%SK1bfZ(-c!}1zQrKh+fOSzCWh9B!<-Ny zngAGQ2Cq>q)bg-UQRA`p@#h#`Jm#S-M`qvm=q;3ii~Lua>ZrUu;w_e8B%-Mbb)^4W_=Ms<@bPgFt`Zm4W@HTqMj#&DzY(bke8k+7!`?Sp8*^q(;2u6RND^5Brqf^|&Oy}n-&Awi z7cx{tr3VlJV>0_NUY82NEx2{5QsbRx3IJVSEj}T~1jiL<7Fev$jB^E_$P-N$&L2-0 zz9sOVU|gKEy;l)05A{(Re8BLBP)rt=?~tBu*B0UG$#)~&wA5P*MiOm+VC|{}V3E7Q zsOf8eB=#7h-!^w_TM2Nc$32)qI-MKg#76<3=)U-1TqR^hzOuH$WGfn4=l}V~hR_~g z-~V#Vr<#o-zgHIBF|mJpgr|B~g?PBwZ%2FTC51?R2aMS`??tg;n#l5*8#Ru^V&oMg zQh%)2Tr)*ZMh*=>nkiiUE2kYjmManTO;Kd)b+~l`8JwM7iRGA6HUb=lxPtvpNeB?d zu&Y+%e;CQ~f}StXkfMVq1X2jY6Q0cai4w4 zaWxYQBX-iaZjAhet@zEBs=?Wp%y& z3hK-&XCVm_pVu#}iO^g^hF~TE%?yYFME|tcLk$ zYD~>F&9gQ61LZ4+EkM@LzLB6(R2q8_2`+w{1+eIFB^d%C+e1_D8NZPp2OdR9jQ|f8 zG}0GjO3+k53H|NuZrWSj+8PQjdP6gf2g%g@-rO`z(Rj_a0D6|P|Bb>R(w6Mll86@I za4&#{ge?WS1ZqtdPLP+PrJx z>+*;H&U}!0&nw0}GA|NKD&TBe*&oH6PY9JQP*7Is7Fehar+8pnc!v^s7BScR_U%@3 zi1H~bV}+LMDgb)&s82pFXLFX4ox= zAB5IyqGMFM0?9`s5u$LGCL!LX5kxVR`HF;jQ7%nKR~86gRgGew(`1|>bA6mU{?Dz^ zomq>(g#Q4UyBlHF*Jtid$DQNm*v-w&49TUIrDGOto_E%F9d%R+n9f;@;k>~#ZaxdQ z=FDw>g!KiKILRFgjko}la3y;Q3Cf|AVY?TOx+96cN8=fJVGl-IAivp1p%2ymEb34N z=^>TcdXKwIi7%c2Mb-d1Mf|>}whnQyp+`oEU-8j&`oxi9=)!Mm(Y=Uc7i)x(Y2*FQ z5p^+39@e8a7O*-~;VRc|M|ZE?n)F_~0rkDI z)#U=UgwsnnEl=bsJFH%2^B${Nls#|KB}p(#rWyG)<@+Yejki|H?aS<(1{5ZF_cZcwcp1 zSMl2_+S$r$C0ZjY+?`!3O1h5SV}uuSd|Fb}!SwNHIZ#A0yBRO@TUoal=QHe-4$&DZ zNU4?-e1?kd<5T?Klk>GF=f)B^b0+Yh=$qEOUwJC77tGC^P;M3qq6aVow{+xO;N@QjG+$5ZSch^ zbm46R?}1#NA)C;J5pHo_W4*Pd(z8^|(yUzi#(kLK1Dg=RPbb|dZ5ET=uFWEXTOlf) z;QfD6(fGW$NYDcCEO(Zg*uNnkoH5Dzzn^07qHf*_{em2hNQErh+BRogU!zzLZNi3k z1xP?-iP5MOZCuEN4`p4*QK3YUO(`-qM0LlL)YT|cLUIvBdt|M(thN5TZGh9e%$t6i z9HU97*d{uoXQ=V1gb!qob90ryH4^H!62gyO9v}1+F#r(%`eSJc;K(IdR#yM{WBfjh zmgq(FOUBkvl%-A$8PS)hjqJ9+3JRH0Xx+!h)Ik8RyutEpgMAAPkXtvYt2NwLaYd2a zOk4qE^uhzg;sRI^V}6QWKDArf)4arxsrdn$?U`*) zzYi1>tkPw2oK3V|$BkYOzL>b-10jTdCCUV~KrJ9(@fy=9L)kRh-MQu#nJUYa7wlY( z?+{WnMI>Ji_tuWT8-KgX&Vz?A8%pS zs@@BC!G_(dMKOD z(2I~1K!{9g>&$_A+I8^|L&`f2FsbvRaAs)Y-DtkBPo(v4lx4GDM?UVj@&F7cVl_A| zn*;33EG>Ep;G%`=itowB>rT|f-na5H!LIK~40qu9+z2#jCteCz)RMBDZ|4C?U!0Fm|XIrpV|Za=)yt_4j6Mqi4{9Imgo#%e9(OokAf7sQ%iPP=R` zx3^yyjAV%TswDe=j#36x!)%sM$cmhg%X({3RxAlwn?6W%5(*b4gu{aP4_ zjnP-Mj|H!X&Ng&tw@|}5v@czcRUlK>^)>qAk)(#BvBM|YZ9a4t$W(+#PHtb+&(ZBD z_j57X5K7KwZUImamrT{%g+NM@ehk{YuJ?46^$uoUtl2?4W{wyj^- zzJCRl9Ikf4GO!(Y>+&Rs217{}!FyVuhmKJW?Q~%@7bHuU_t;8%<1Jnz#=(FC+uMh) zpT16>AN>90v;71$w>6yfgb1OEy-i##axAGa>-ib3E_zVsXnY22@buE{Y|u^X5Thj| z$Mdu@(nsTFN$dvpfO12_dpo~rwD6dA)5|w<_j5i=QwL|)p=drnh^6^g6j56e==u$e zP)nVAXEZI5B|AXUvo>Cdh`gMQlD)n>crl4O2jq-~p>FMR#y<}h`Fxrotz@%KN)KDu z0}TA$y;U&A>-C=iGww-2nkRhaTSM0E2~4F#fqdYReNLYEY{?bMeOZkmDh6a&2xCSiwIA0nOnmHe0jOD-IpaYd3(Naf3Kk6LzB?N=>~ zb)1?h2z-Pdrswa#EENZUajFG=OWND@HLd#AQxaY>#o9bHPh9!c+_7!WvcN#$lS~ij zt6ib-<6N^$@c#Yvwd8(cl_#FXAHr8C_g6O#TKuBz8QGPwk#)VCV@L!pHK3;dH!OHI zGwrgUvGGb4uVKFjui7u^>e}lWtKq)XTNIyx4#S6S*b(mPIdt^B z-%T6j(&QH{I-P6WVhm5h)fmOKBP1!EG0SN#;FD=pEdtWkL=Wvdamf(o3|lXi;mHGl zJ3&Y9e>sw4$x#LEREWip;G3d|P+SI1)haBV7*c~q)Kgk7TF&)z8@`%y>Ae$A0QcGw zIjv^NvpUkGqPL6F639F(NQXSunR06=YKjr}dY+fw5GY(6HW0iT6g8GL#u@GsBVlyU zlun^uHJwPzQh4AgDNV5I*sQAUs)Co2&85A_wzG(Y1y2V?f#4QHA`-t^L>==PiqvVU z79kPHlOitdkqyGNj&HWxmZ7`Dx<2E|h1=M@2exF|0xrHa*VcFv>qJ|?@hG#Y8#^8@ z%MJN>j{HdIsvcn7NmVu+uK-xgeI3IFMG+YEhT@!@k>(HX;YrrGP*rn`|HPDF54)u3 zD`pUN-(sY;5=RcMLs(kX2h-Q1a@(L8QV$!MmxPLLgSJ-K=B-7r;_cB~rx&4(&||F( ziUttj=@|)Qic&x(zCs@SbYgwG%xydTE6=NXk)S3%w0iK^X=J^D<~pqqEEf4cmjxS! z;rc{HZq7eB}HT>;9}4u(ACwPuX2QOl)T|V3@;`p35@SP zBKOE>lLsT9gNS^8VnaD3)2c*@LTwpsyz_%VO;pWuR*w-*6Dx?JZu*r z7lcSPYj!8gYR?89S^A_8`Fn4b1Cl_#`80uBEOV`SP4tC$49Sh4AGk%N6SWS0N9u!5 zfwcOQ3Dae-mzCFDt$7=yZCh4A%rIbZpy|vQh_#9vwKC}-+x{MU5>}a`w%c+Q&JVse-{qpLb<1gtmcsCN5KfwV6LprlcY_ht#x0K*Yo4N+}4mgM>FR z(oqKo-zu^l4s5TJ&*Zi(WtbQN@@#QXw^>BQ6_v3n5X@zt#SxPkB>OVT2CY?C4oeNV z=U3Gv4_HH^-U}^eUYOw9WHGqDhX3j@qB1NM{{f8tlbvGbHcQ{)2a5O!e+QBH4W9be z>N4JN5XD5&BHEjYGA1BsI2k13+cMNSE64vF0Ao7JU38w*le2B#|0d)9NaV|d{O@v9E}KK%VsF%)1uVXyAV zjPE6z6oJ)(QV`eEMa{&GVS@<{j}+gSl{<`AX^xU*`O)6zV21^EI>#jKw1=hI`SRsf z^}~gUPwuG%&GaJk!b$54s-~yv5eG!&xQo^u^1!ceXjHmm+&ww!Rtk5|@B#YHM(YY8 zK$1@7iB>?^Fz!IBfUVh%7u%}aE@Em&0?LN9BSnO`rEy|pLK|res{`+328;VGLSm6K zO{?>~ZkTKo0BTPi4p5|1FWO+)GslKH^<>_!7w@D=CHfX70ktG(H}yHcNY0kP4EBf) zCYuTgsfaTov`qS9GsyN5c8tejbUP+pH>&dWYAzdFQOkaH#V(CaM|mr=@E4~;Jm4<> zeBgziVmaQEkT%dvh*u;a<&2ONZ}(kmy6HE$s=m1STGQpAENje0BcDHn+pX1)$7W!S z82iEXR-ZuQal5^pJi>_56xYCd<^jyRxYwj2;rPsUfrSy&qa`i{2}~K0X4nF&Ylly- zJFEdq7_${%M+HimZi&?lL-&&K#iS@smbG{v6QS0oBZ5~Z^E7YyH~r8oqMgs(gI0ZP zI$$+GrbAC16t^34)X9~vJVN!Ugj%&G9G8}R{CCM7FAfuncPxxLD+QrnFD9dQH;n085jzj4qIv3%l2yxxS zIXM3sLy}dlV=Mlyt`McB4A% z&APaS3oW9j{N^1tcDEMkQ-uZP$OsWvm_tJqeU1p4e-5>G92r@n#wD!FQDBAkDVJyn zmFmznoN$*~!eZ#C=azy(+lc!UI#*NmLGl`(%$}f{K=WD2q=)Kid8*L4I zOl0fJFLw|ERTEomNA*bZm02a&%;ntoTO)dqBJ1Os(B=@o_iPt#I#J!W#1?mq4f>t%th9kRyfl`Owxs;&Xkm<0{nP2d(xu)b(t@DVzzRI(O zXQLw7Wu2ao>i4ahfgUM%8e0OWSg3*FI!O_z_^>THZcRWGDrWqY?x$MJ;0vBGm))s3 zTX*A-X|<5VSImsUY6j!>!(dabAbMKc?TtSlzR#% zOZi=VHM-OJ6Ui{4bO8AU>(q^#V=ehSB4eQ=`wM*d#ay#!*Oh4h6>ZyvgZEoowF9Z@ z+vw~3wbu*p%ElJntZQf;relGaQLD44x|fv|8wGPeh38?FMEY7952e>cRt0iwSPzEGvNvB)ZY)V@uB=2uCxnNLYnt9u{km9WTzp z#25kE2BVtR5i6V436R?|L=q&Ln~>TW2C#was8S z%TNjo!hyk9mxxK*rqg6&QY@Ow4eL*34h-9GzN*SC^Tm|3N6O@hT1r-!b4u7`yjVgb z=0S&HXFFm^oBN4aDaX8Z$4YfPUZIF3Gn1C;+um7&4?H8H6#AY|uc64Em7K|Dj1o<} zdJ3E|VmSDKvu>ig)_)C=0NY1}0U@gRBbRi%$?cWv%#Te1~xHu&}7V0li zxYCmHbSn4$aRZ4@%!$GpWK-ff9Huye5kq2=00Ajfz@eVlnd|Lph3PPsTQV%G>W}2+ zpqsSDNYTCPL_U3%q*0TI{%N@D?OYmU^C_oE-7>P?92@6E{503s{=Xnax_0K;+}O?& zn>r|ax*=I{E+6V@B;$%L`)7wRIgty<2GA-uMSBpgH3FO}tmp||Mwd1F;T&H-3L z!{o9mc+HUz0Imo2d?a!l-3Tx|u>{5w2i#uG_W>%8Fdip*=+=48;VknE;h(JsB_(T7 z68i)_^+{S5--}hkUc(`Frw)x|EkMxVj|b%mIkN_8wikoP987#LtB#9l9&2NKmXAMi zD=*3Mrx*3Yj>h)6aqYo8oAh@3%>KO*p#X19Eu25?7HkP7u*Coa6TpmRO4vSpt7)^@2xGdLN^f`G+{*PXwtO$I5+ zmu&~sbI&HKtO=%m%8$3-&4G?9VE73jb;_QY3LW~#ZwEWy?(XjW@ehCa(;t&<0x^?> zIxh$3#iwG9e8QkwoNnXOHnjJ_wDP~610xA+blqo~MF|*f*4ro~nS8E97)ccFnave@ zS&_T|E|zIAD<~OmjxqQ7e4rPcjTQ!b0jHlj*Lh-bbxm&FmruU$8w>W&#)H=I`w5{r zSi>F)iBY8}M^Y^}M~kJ*@DnDQ?Z~L(S@y};!_#R+I`$KnLeJz4Ajawqv7m;gIDGh| z0Q{d_O8i;U8hegF0t0?PDK4;(peVokAFrZhW9xKi6mYDLwaCrcS-a(hN74NFD+*w3 z;%`MqN>C^i5LAoi3{|)zY0-M#aFGus7I+3c6?&FHcjg>8>o>o_cd(b(;Db@J6>qV| z5lzNBk)MR>=u%Eh`R}i2J5%aI)b9jZ9EvJkm>9HXP{@=a)s1uiZOME`OeI6t+MMcTM*AWE_hlRVgPOmAo1FM?Mt+-@`q|i8g zND41oCW=1p5;)7R5im^bK&-I&`Y2dfFoI5Qh8gEuQBe&U?yMW$QX%>m$ZhOrJd z#x5L&-GiFxS0l>U2qHLp0gxCKw)YTD$N$~L|C2ZIQMXb$q&{zvqg7S)OvJoQ+6L*g z5e{-^H^MV3Bb%VBLOg1T+W5d2Yjac9=wE`Zyl}qPL5R&Zu*!e<_LfCNv1wtIiU^=x zO<^A<6VglADEk+bi zog(xkk3Rr~)VpE-W+_*XAyA5{v|Cm~fH>5~A}lYHSw&cbtQB5AeZ8Lm4T4gAgJzAT z+oUqqA+*M4#VPtIb3_)@Iy`jx=bHyi=6n_|kg)b24Z+K%ROx%pq_Lz2UVgMIPv{H- z9Ajxz%GldQTuG~WHZGbXuWxn=ALrw0W=LFnBs~xn?E%GbdYN4w=MNL<%WMmf&z)^@ zScItNu+-t9@AS%*UYu~G%D^MI>`wk*SA``2LEJwPkCW9RYfKFe+myL3%s_kXeeeOnL+Ijd>*;#P5#OC%&OO2AJNSvzAUa-{VWwG08p&Aun^yGS zcq^`+c-Z&I3LpY%olV~ESAyX1_AsXs(HP&* zgf`FfR`v|hZzAod;0&4TDk6x+ zuH215SO>sjPXJH6%cm!dZOs*F@53ms5xXfo6e6?w(cR}vJ6Yt7sKdwi$>Uqk(54tvXYt{-++R+*)dcUrx|hl9#9c1 z^v6~1gkd7He`lOuZ7CQ?&N!~wD$%3d56=-p0I(jj84nU2BwRR=V_c|YcyOD%t?`II1CH&W%E@CK14x!u=WyH&Z_KX#M0kAC0|YIqeS0WCnxCYl&9~ zXaHmW!1fm7R;8b4FIaXyM31K|`1sT?trYz;TFaW|X9qBN5}WivAU6Wds%0 z*^84(aQb+}JKQ}gWhj2nk4-Th&_Q}$_9oSMi5(A)tI6d+4Xp1pVJ`-=mWs&puoJx= z&EE_2(pD|mvcq-sTtn>TTmFt(w!rR<$@~S~NHhBhYc*BO9{GY$RIt+~1%hd5wAt(~ zOOsNw z7{v87m(n~qT@1~<^B%j|$h5Fl)%yynO3dh@? zy3S?8bjZh}NEG4Fuwu<$F1D@++i4kE=qi!qU3d!+9K-%%AfXu|T7TyO>!V_9{W{Zw z!1B`+4AMgxUkX4QXeWtx74%C4pJM~O0i;Q_Fh)Fd6SY852bAy}5ehLeeXWqMiWU|+ zhWbFIGZO0f7L0;y%vnCM)=^m*wi36ak9FUM*|3e#19BJAi{Fkgiv&wT#yjsw+^!Rt zi}F1G#Y@1I$5<;BUp01wzDsrxJk_MWQ!ceMc2?{Ku6hnbwo+Bc`tdS-`>m)al=A~M z(rX=Ef2R~F81AcTEC{s}pI^AcNPYjU$j^I*q9Dy!@=IWa9yIx2f|&hI`M#lM4qF)agJk_gaH{FK~WJemm^z>#mDN8 zrR}ffzP&#F7+{(e7GYsBul8c7e2D>umd*xl*e3Rh%;eo!2Ecd?p7&efDmI1-d+N7h z$^(S#0!>iAs+!`YV0HtUKq@GN=IYJ8o}jXEm~!Lb^n@fu)VU+1@ag(sr;-t@bG&PD zB7<*e=}-{eZs`B0qKby3el#ZT-LYa62=;}2n~VGlf$~LQGSrZCRv+5c0+YmO0c9TkJBP1 z3I{_T+oQS$I=057^Hr@JsE};?oK2TGi3ey2 z+1BEsVQOuXz%Ysh@)naE9ou2yYHN=nR|0iGl0cSoC)wu;BeMY2Dei;KB9kcSMkW+o zF(wyIR;ma*5=Mc9l57)>T`b{mjnOU^qR}HtGOJ}Ak7|m^ZkAK7HCE@DN#zr`a4T4O ziODX~dAixrJLNb#h6$f!#Wb}!@%SS-C`p@+ah{MSPPgCXXI$U#64uyp=o3B4A;V8M z-g4CN{4^qk2%2=EtDqz6OA>Sx`j~7*ds3ySr>&qXrVtjnrHEIpOqhOLSuvrg;RgJG zGt+P0EoYwLet8toU9Itd%H7Hz8~a`%dk*IFgq&*G-Cr5+WQ#l=?F|os z_~1_SlZJtgO$o{*pUs=gq^00Bs9p_x1QUu!RD&_SMNmu@865yP_$8k?7TnXRqXU_S zWRi<2q=4C`VN0H9#&59RW+r^bTeA^r5k2!Ehu0i3^l4F5Qxt!)$D1R)H3+PnNs;$E z{Ay6Ao{0)XaBIGZFRW1#azDmK0rp^PT+Qao#$1pFS<(Juu9947CHSt;IhO}kfx`Gd zB&Mt!fj)gOUyydR)&qVkB0Mhh{rS8pY6;(+UU6vwx zJh$WZM3yp&ZFSsJgADXb3*CHZC;~-tGR;m0tLWGu*gwWD)43e&zQP3~iQh1w$z(!m zMU{2W`kMLTIWfz$goyvf3@aOdLf;>6HB{nM!%fM8*fxCihH##7Z#u)mSZv;@wrzVy zrb6YUCPObKEj3LEpXQ==KPz32wtK;h~d?%1O7YC8yb zio7!sG5;BRsvC&{(%}f=*$q$fd2@Cs-ck7hAgPlRjL4A$Hr}bgHmct##1SSHA(7ZQ zg7)P${7*8W52S-fSndoE6c(xEkYqZr$RZbu%u2;7=ipDQ*n&PWGb#pWm{fV~QkfVF zW@N&UlA4~QJGfYA+}=`sD{iU2!l3eY3iDMEMnM&{LA;p0TMGqrPvGofOi-fo+N2d5 zBxI#*8WmoP_Q7O#4vpNShU{X4KK31-SDiG^t|fM?e!1zPxd!L|qK+b2UAE6rWQVTe z=pnG zmI24PGf%^CMh@j0?cF%8JBwY2q+pnNb=1Webq6S8{s5jD&CV@G^q`1t)}ne!&+f)r zAC|K&%Ey{~dKZoBW37zeKyn4y5st4Rol4(yaK$ZPPn|!`&eIpQp4ZSEoIZ?Yc;TC` zdk_=X;ob}oEExEzPVozob@ukm>Xq~kwF>dlN!G9Ms~?)eKRgDTD+^8|wtJgfvV83E zf9q>eHS(>9pqLsP6~_zSEVEBK*qg%4w)amr=>3!Q{%LjZpN?+ebMZ^yaN!GYyrHks zn?yD^;65Vds7Eh*dAP|=^OIkUfmkszq=OR_MW+&MQ|?T1jbixQc6mW5dg8k6?0#$n{K7BJI6c z?e5iqC8I82D-0q#Od=Ihz8=%MkZ|7N#}y>;n+syyv6i>7YOyQYmJj`(x~}>e!HD&-fpIv-=GyJ@u+!*N0r)A z2!}N@qABKJ1E#~r1knGE9|;8oMOQ;c+ILhLAxF`lssrHugUHcezF}nWOo}(H;zid6&v0qxfV7$Dz+BPbLGY$QTxU&=dX>}m(}D59|$vI zR@+aB8nSs#Fn*m+mK(Jx5_aO(!l_)1bccc}mzQyK!MH72jPl$$YI%Fa><%SL(fxG_ zO_p=iJ{K!WLii-jxr7-rs$81}8~HQw@wHdj09so|g*9n)VR9LnExcwU`rb~T1M|8! zyM0`bIfg7mh@s#l&;XN`7(MEIQCN>5w)GKiFt|Lc4Te;Av5q{8dM~NEwxu8E(VH0Ie?|3ASn!lPqHHpfb%V5+CXvOjm=x!#H8y7qk7eML+A!;SEug8CO*PyWU1;yR zCsnnW^r*z(!iI>u>?(5E*SSl)geB&~qB@sk5$`XL)Gxr&zg}6@H>?6CK&sB)UmUp~ zWPNQjvNqXlPEH2o7(tIXA#HN6mg+qfz{Y5(R0z9~l;%{A@fq9qUB6h=g_lWQTH!A$ z_q(e&?8KRL(%4|+JVU1tz~JbW;hO*d%frj#N9FuaPxmnN{QpJ-|+c9hceQe#okxkY+yfDyn~#z?|#nh{fqwhPKF980A3 z?V}NAQo&E1i~Y$g_9tgGy=H7b05g{CdLy&ssl5Mm)K{#aly-dCCw4Oi8B5j2gB};+8Ej>I*Sv)y{4p(pj*Ig&kE<{K&<`lpSGa87=m&(HjzFDmxexl zfWJ5Cx7`ljdpw4yobLhtrq({H%?*IWDLQjbuV#GbzXER7)+(|w79cS| zu!hU3mIl|Vw;E3qo4pLvoLG#XOUY|8F%ddVI#xvYeFc; zzP?&1Xi)ahE@6|&XUJfw!TdsTf%wh$bH6})504JfHtj|IoWfN0sAfNTC{64q7q(Ac zZ|`8i>h8H-CwQ{vdjo`<`QX9;?BtSPU()MK)hkrEkN<398TfU{q!rP_$&+e+xj+jc zl3wlY?C!BY_Y%lopyH=6786h#jp3(LcG3Cq?TZwt+wE$xuFGS}!TbaRqKvWHqAA8x z;QT9$H9M{r^J+mVAv6nGl-ZPGIPb4xFmsM&K84l6B0xx;F0xroAu^+8C(U^#S$DF!uEqt; z%Q%Rdgcdk=AaC>ajdxOGqfeboa+th$<(f|>P&)BUi-KmC3TuL6FrO)^xwz&chlRUG zVyPv@bjNX`QR<|?#JH4j0pMqO3_E$2uH$i86u@@C%Nk#f^AcbMlvi zS5MRRXMcb5_Sw64$?Lbt!OJ%<4xT+tlY>`JUi|p<;MMoZW2pD)^?ntgTf>iJvf<=M+;uMP+62e05=^6YQ$ki7fh(Tf+<)uSI_^lxc=PhP+I z`R&2?KO81MyngZY8N7V_3`X|o@r!5N)vKS^pS*Z<@G?!FK6?4+`)5?^HMH`Uipl7H z`r#S9g8m-C|35iAc>N03EPY7GUFy#Py}c3{!^(R5U^m~2Co7xA?k8V|YpUs_ zn2dJ+_`7d@M|^k~zvjh&Dq_ZRVg1&&?;~cmUI)K2#dMX7=S`A{sXjXr&GHN#A(Zj% zaRw)`D09CB32c5m^~#WCxs_g{2|30MYR;=Iag*mp62QjjObhTXMvZ)>lSQf*`uY`R zqP-%)EM^P6;NUD1VRX%KsoM5B1(jwd*t@l0nkfub>25#&jM9VY``sfl(A>h`JM^2a z!#@9=zvDX?-j*pVN?5tgdQj{>H6OOphZ_$1Fdt15+?(K}M*CzFD-nXP=*R7j0V6i`;~XR6_fc}JQ8Z1ZH??RUF3ngm8aLoP z%$hDYl(@?vzz^((Vou7JRc&^ah(6R^K9&XY1nu%JHB-?swX%z+#u%QG0KYNxbZWey z-tag_!l{zoBm&Mvu}uYqNvFoIlMl}uSJsM#E!*Y*wMW1yL)RSW1Z9mb4x$+#%PZzh zG@7SxR&wPxhHK#Tbi5#wp?#zknKz!0R{{I4Sf7TlPrn*6{o^t1yPuMxnH=pbbbrsb zzzR9nePlaOn`5fmvtv)AfuH*}B%C>U!B;hCH)GXWy%_3N% z-g`4@Kx05S+F{az-G4T(T61X_{?(&!9lK)#xOvqm3`^DSaj1g}CE;q96~~!cx!S20 zwZ^{2`g7Dindkuy$i2h{YEe~sgEVq_T4=d;$0+j-QOC)dnsf0R4i2%Qv18*O7FbBi zCd~dFiiGgf29Y}f1y|C~21T=XgDRt*ZJDfbm|PkPP&>C2l+rKSR{|CZz87D23s5rS z*iE1kB%y49W`$x>p(VZxG9l@?8XUc5*O4oQ8bq_Kk>(%BQn}{c%DLvvwsbTvI}|n# z?|Agi=uPi|H+tGpt`r-6NAnM43%${|nl}K`YM%aC_ZJDnWBMy@K)|fb&;t{*9m7_1 zGF=bH)UIdWUfDED<1@NP3<8W}K59AT%lF7#9jO&LbyVZanrf?ReND-Z&y3yKaQ%vd zAqM6VTFcjo1Olssm%e{vENv7GejZR>^Hf6G`4=cXFB(CyCOG2kGWl2?C%_h6 zCi`3cRol3}_F?bM!9I%&-y8te-^0YT<6<$M=Fh9Dd6(l2!8VY4-==UoF7heKmQc?Q z#g;P>uaVe_>e&X!%HRw!IbaN+GFTi+S43~q1e(l@$KvQF!3HShZ6Dg#q7cB>75OsrJ_qC>At5U(%pBzuda z$rm97P2hY@61_}ys-h4D@rNWf0mlrA`0i+@J%auG>(zO%+0QD8F2$6A{^by7)^9i~gUTC4-(HrNW3 z!>r@7MteaRp9r0)UzvPnYbXmr7>J8m50jr?5rut43U&amzS}r}!o2;1D#s+9RdBD^x z2D=<>s1h6BJu()3be8cG4g?8(j_Hb8N)gcpvGP$+TM}1l7W~0Bb@N^9kY0ZPTMO}{ zgKRyi_7U))T&LZRZi*-SVh>>6kvB>y>Lc)YbRRQ1V_5Q%ebL~elKiQI=yic|uf1fG zaU~z`X@2^`BpvsAHcBeEi&Esk7TKg&N}d_7BsP=bh4QY+9U_8i(8SopFo5+|ghYXw z0;oX?s)s;#9uP)7`!Y?w`IdA2zLY3%8b6$pqci7+)d5X70UwbLwacnLwoc(K_j>vw zDq8I9$+Q}O;taUc0`70VI0kmENq~0jtqRLqz&hIn5o)d`I|p$I7e7ha`T?rl+#=lP zMHp9gj~eMaAVFl)E?F0)l_pDMa0Pq<1pdJJae!OTFH%-Jt8~YBH+sQ)yr2;V zoLfXV2KN0_%)NL(++u2j@`#bB$uDpMD~$u;gU|GX2^xZ-ccfXy*_cn5#l@5SB!eaM zP9)HbXxUg$S|AJ$w4h{=IBZ6c61tYsP)kHib2we%$^U_)#H=ZACS3Ol=C)NMeDZe& zJ3Bky4t)TJN*;V|8~o?l7U)x2R*~B%&ePqB0;H4`5nqkehSRt`2|6=;p}BFRsm?-^ zP7W&eHLT>U%}Uyo8==d|x{Go!U*v|u@qPdNxapB{p8H>{gl|kw?fv5bPws27IPf~s zAHw^Z7Zl+gt+}ToF_m45*>5p4GEj|rkY-& zDE74pwk`2N&{FGEG&=S5XABVW;UdG;9pJ32Nc35sS~%rOdd&kKv)W$XMz{Q zU7#kRF%``k@u0}ORZeX~@aZ@|L!o@p3m+~+AWa|>&V`F4{^=)~Gk4pnou%wZLPHJ*0pe*J$?s zeWu6R|EPUZ*XX)6TzMn-!@~9Op9r}Jf3*H3zwuc8P>BOe7d}MQuhOmsgm4zKDV}tq zTmeAlgW6IA#II$uUUg@^CrFzOsLg&mh1obf^r9Ix8u5d-bX(KkzeijaBKVtOTVz7( zRIO8&7(#~Ou&+AGC$wNa#Ol}=PpP(f_o}4bVv68_7nhJK{_!)7=#+Gg5fx+65_p`mMhau-Enln8@3C?tB;dnOb8(= zol*}AJfFgXF7H7s;wxR0#FapA>p$BbM|B$+gK%UyPzRuh@+`oFQ2|hvgzf2V0w)SLU`F`pLfwha=a@ z>pS?4FWDQ*%{(=y3pDU+ezo3P=kdv=s5&>;zPdX9BPG1892LaA%h(eutwSi#OGH^$(4P2bYN_ZzB7BqINc!SRdX(EQO z0HxI50lMlsQWc*2ig~q7^&g!AD%UGEnM=QyN!ktWv}_)}qg7!)P@|S}(wVB$B%-_53lk=^{M0dC^W_eFO%x zA%2-dXa6|g+!q%)3~4w}f`;`azRbT(eZwK@V$ahy__vB@z$m|N?MwOHz!9W)JB=uj z9|fq|A=MX4luKW?^A-c}(-6(TkV!D2ugq zexI#7_^s!jqWuorCO%QMcSTyOP2u+`)RqXOueHh!J$qzW;hI`FT78g#sOF`1up4pE zUNs}t)NQr$Uu16P3(w0EJ&ssx1Iwz3nHMy`wVytV9}I_!8pOUNakn!dF8a7*WyEDS zKc(PDQ^_bpgn5-!eD}7+_N>|kO0YDur5jkTsb4TZ{v56B_bR<|FTyJw!9p$!`q9`% zc?9^uSqNNj*V@K`n9+6=tqO_ygs<=SbR@kzDF&0q3<>Z*XUj$}d;`YMk=lTPCRoVW zifiWK*i4gfxW=+zCZafCmlr&K=y?i*$MycP#6~BCXkYHq1P8|;8%ERQlx0l67Kk2A z)i>_mx_z6@@djbIb(LDIV-44b=W#fTV0C!D&Xk;e-kC}3yHUpIn`sXOhOz=g>&L7_ zw=N~pikEr+vU3yAKqpKg&M#T?3d@a>AP2G~#u z+W^R55CA4M@dL)3Hv3%Iq?=Sj;zJ*OkwqMhk6}xWtzEr!dNi8X z0YkkBT!lr>y9M3htR_;Z}c#(1s!{6xdUpf zv)cZ=;4|FXVv$L7V>uP(w7G=b2)@aR8J*+vZ@mf}&~6?w$iywRNc)=&Texi$ZCx+j z!4f~0G)4tomC3!uvn|2&6)p5Wq}wHM#q;W^8dY(1%(7bWcO_vZrkEaiWkZvAOHM~Q zlQ2Pyj680I=rDd5^|YyxO~lN6uH^H#7pN`1Q@o_*c{)yZN!+m?gj`@Tknox%iPgCCk)hGh}M+ajfxx zr1vMu5DrzQbbku3qgqvcg5W*q=AF)34KCip(fGOj!B4xpw%qD_#NsG_agz%p({^Q3 z!|5vf<-)uy+0ezqBZ+GyNvrV6l-V`lcHIiaB?%&v9NI{`(6*jL9M&{dzd4z#Zbb^K zZm@I(+_Uwz*pYVmQtQFhW!&SDuZ>_~+*A^BBcjkfCyOWR4 z)?s-B7Ih?lKXmL1TKlABskix3zFtcMgy_-6b})lJRpOv8J=G4uBhsO`l+F-k+;h`y z&wwAzqHn(xwK8@^y+Ql$aY}#4 zCDb~^3u1}&C>N>*bK77P^PU>|I1E-eTI9+?(6e+4>hPjHs_^3dS#(|5fhqwDnT@ka z%80hZ14%t$nL8rF?FY})<*q;|=QEj&#Nu@mQ|%OtbE)uVlaC5qpne|GcHCRoFDy92fd6k7mr~&yB^989VG2xvsXtL8OJG8jYes zq(Kbem-bvkRzqq$1EUCpE2dPFB+YqCL@`P2Q1?XdXSo%X*wY;blZe(L9Zb$WcX{wd zgRs@p@N`=nP~pfg8SJ50DuU^($8=n?^(bEF3hS=1jV*p|YU9t#%D#+-uU#m2reg?~ z(n@qI0pGu{q2963Ea`EPN}WokY}pp}TfJxrEdE^XYZb4v?xWBk5S62Ql(^{ZQ4@o+ zSpRprB+FsKWfz6hyjP0Nb1gK#za`G*s$yVBygm@N)1O(G!ADs$`-UT!(;+};H4*GJl2hk>Cuh94+o!q$H&i zRWLpdFO~~pO+(9@e<}yiF*jjjrM~bV?i2JjY*e0AP7MO3x@QH1iKfLkQe|lfR(6m~lXO%}`2>NZRlo#*r_HRD{#vlE z4--Na+Ojx9pdPI|;&oV%u2Ic6hEs(XNirVh*RDBrfQrd}fg`h-Cf6LmOi!c|_{@zz zkEcmLoCf>Mb$aSy!mL9$8Mi)s*Qy5g@UgstlOw))SMG5NFAn|p=LIW-bIr66ug`f> zsA0G&L7lH!EQ7W{$E=@nPtZeM3TJI$OQX-i^+pf{*2v@AF6b z$}Z6V5(`1fB=*Wqh2h(JJ9v5X_F8c3_UpAq{)2chfj5{SczNS5RA#GIhV5Kzp_ez- zg7usABH1LQ9VyFft_3&R%hcV*f z1~Gj>{4>IRdCA%vO>qS%D;_VLmcK2H7OpxHw{5Mxw3OqaDKNvMs|5x6Q@T%`wni&( z(VZYZ==J5~BKI0CEZnV1)9xJd{l4EB2pn$h1Dn|iR$97Rwv2k?R=$b2)mqQgB;&CA z9luK-)u2daJmtwM8{`G@Q_5|xlq**gbNTk0jp*Bz1%RLeXnZ6P&G6WWaBdq=Xur!% z1dvIbuKgZARkH`^Wz3KFa5Mz>cY^QiC&++Kur1Jzf4pu%EFlvVEr_Jia@(ns+RbtG zd}^hBo+Wklim+l~7mJ%}PUgC{Lck%@2x$xZL4h8@d*aQ%Kksg-arp8sX5-3R${K0K zsD{@Q?0jfTXu+Z8>#!k8w88CIMfJF7j`#hPvlJ%qEfpwdY=rGnqy_ZlS*tdiTZ4hst}>t(flV_Mt# z51C7&u_f(XHkZ`Q>4;NtM1os950Y|TzFq!%wN2@Tzl3L=NTW!nL?CRShu$w4 z@%U~`ye`nAsYTc`!U?fuizx-2S(sM#GbFS(Ejv7~Lf!WK=*WS{Ur>e3z zEa9WEaacc{;OBv1{bYFFgGnxn=4QdR-9@~(22x;)SgwtC6^*SzC7jNpKa29VU7|AF zBvWkni+ptVbzAEdTBB^fU*tLM&hiSs*BZ68D1y*`Af8g}KG{h@sgu(<%J31LLR8Fw zwQO)I8)pR}g$_BSkh-sqHJlY~Lk|delpdYW6X=P+(jhLN63kT8?6s-_OCNwX4}{n}0b?=SX0Z%&l{a@|k^+ znNcwX{{XG8jroN*UpDU7J!hZ~uq6tznP@9d@w`7~UntZ-EuI$!e_2GYUJx7_qqDwz zg-5(qDSR`^`%%pNXWCk|mS(YYY6d1cVSff?IJ+zCA2k)SCb85>>3Y&A#d2sZ$Y`|R zs8Ig&^t3mQ3y!FzS0UT@mdErD{Cg3V{mWOUzx~(W{{6TA{@eff?cZLnzRLdGeR=)6?R$Uw-+%l+|N6iF_TOHA zwc34^y?^;HuTEcWyng@X>c-e>1Z{FdFaP#GweqXe*S5?@z-A?}Ci!gYu=zBE0kF_0 zqtqi(Jb;-Xyd#J=1b>b5th-7$dP=vUofPqdal=gDh{IM>2T$oo?`ZFzkKR0ew!2rN zrK_~IN%YLi&JNWB-Er`o{~R9uyua6Z-HXJuQnbOM_Ts(>fr24i{jjdCTRKWwqS-oo z>JGFv2Pu&-V1Jht^l8q^%9cdvhYhsrmiR?DEx?B6MApdRSq-k+7^m;wFD;2#xG#k3qLj zMZW4out5L(G3eh5E!Hny({L8q`mLnVu?+K<_izKcsy9Oj7V9_!<+^jcu;` zF)z~j)Y#;Cp+5#8p%ZRZN!5s>&u*6N7CR>(gn9|J4w#fC(+ty?+dUP>3;Rqmcj%vT z=h5mY%D)Fmkab_aytBC$tZyL%*2|mpd2{piYgcx^mq$~z#_m|{@4M`RlY4~NV?y`F zPMJ-khN7ns);LY(W`tl#I@wfF$n)--N*=HKY40w(%sJaZ4^d z>B_gysGCFX=1DmJW+VL8V=Kbp@F?lxnT#E>T@9YS{t(A3);ojzTMleMbY?iu@Nkl; z@nx--C}A1}p}qrI1}7vulsijQfn$dgr*zL}n@S!_krGzLzpbd|6#@eDxks-H_C-@3 z-j{N(x^%j}`l@=;Ra>*_u}W;bs_&J08T*?8=%x`m4Ac3p!;**^YmG^KMHuu?5J=XV z=y7z|l>JC7;gPk8TID8->oK5XlmGSb+0!mn_3k%#&+6!~4Qd}&6XkMY3;Tob0{pa( zv$q3&>$bUCm;2dgLhU*TYi71@6@i|GNcUY$Ien(N&pAxMHr+qJ)z#8*(mqW#`D>=r zTdR#|ZoLjw9-DOa{m7bzOKVD4%kx>6r0VPZ`|VQ2Zc|k2bo`^Rv(~B%qk+kIdg^&B zGAg5lV?aU>2GKoQDpz#)-j7tU{fXgn0dWkJPQ^Z_9n7@s`Kiy;x+Ye6lC7*fr8y_lkaQOk?S zoOWMw2OLIIzBqj4jXVE8(-BpqEXzV^J{|QrQ0~Vf+z&&y4P?6<)m~itKormp`qd`O z!S!qP8{xom`vH1)Z3%E*N}gSjE@+_&u8g~vV(zQr?T^FSABdTk;pI=j%2&e47wxLd zOY!kSY+P-yf{8y44}V51{8@1D#R4p{+R%+GLBW4lJqNo5Rv#lhM7v7xJgILWVPpRq zZ78fNTdTC;)Qn*!N(w73%BIoK{5bC}#G}iHvkjjR>-^gCcNy7kavFC(aN$2KTOb&8 znARNfQ{p{OswQ-My!e_jb42039t&G3}*h%;#qs{h?eYQRsFrRpDNU`G`LS zUr1&h#M*&cAY@m=N(#M|b!nZKGxM5`!^%rosM(f!jDoYCB@bb%widLOuw){Nyj~F) zb@96Z8&5et566*s#}4S!5i=1wQ9j7Dbu4UdtTJ;U5$#$m$0A-FyJhJ&Jb|XzcY%mk zv8At&*F*KR-JRbAuW7B04L8FKOaAyKOph~o1nJ9|AmGH?VOTf7n7hA7OA{1T%! zO1-sdW-gWbEc#)(ZKKIcYCjD*+(0cE3a=s@|SYb7&NBXNesx}Y~S8LI^& z@4beqz}^h_t;Pn7WbD*x^?@`&C%Ce zW_b73U306yxplk0dH2p=?%W;@!`s8~M%drHxwUzB%k%~~juv0U1clDun3$k3PoXYEevKdMgeMT9J3=%{<47y@vZLx@d z;}!6h!7hNT);uL{2kgj6WKMNaMl@a;JiJ;})jVd33~_MI9Y z_I@owzDU#*1UL(I6;%J8moRO#1!ODQhmwp4aB?Y~PUy@>PyowlgP1A&xeg6`r&TLT zKsYmxiI%2v%asIH8NQfoY5;v1crT+)ju9mT(A|Ec!_4PDEzrG9(DhQmU3142;eFb6 zO|G76_x7rp zhj3C1sK0e(&eq;pLJf~^+@;H>IPTrGmFEPfSGI$d=dX&*P4hK&FG^R|uC4qSOU8qk zs0YJIJ4KF^odkfE6A0`}$~=;k13)!Nnrf{>#-MPEf%GGoFJ;mh(rE`{Dfg5Bpal^q z`7|j`Ojwj@ROZ<+a_C=l4mUE>+7MqbGz`LMm~jqaF81_Z5Uw*Q@I9dqU zCP4~+{aP5Eyh*Xg$T&<2fP5J<&&WqRDDi!mre1c5hmg5bG6Zkjw*z4!3>6Ygbh%D%Rj()*mX2d62GV7k5#>OOx@ILe4q5#${dL@)Cu7PCIbS+Y5lAS;t5Ig>&t zwQKMsfCE4cb+>n;8T>HA>p1&@3L{>y$8n?NgJL`r3|%eCKJ8K9p`m5sQ9cwRh7a z?PuRfB>S`1a1zE0MayMb6hTCe+UQz zt@mq@D4>nXd-XWBFl&#%1Fp0y&#R8F%zF_8_D(TI=!J}6x{GG3pDKowbFGI-sM&~E^J0$!=g!fy@q}|g&_XKjp0yhp47>H&zExbZ@J%u+!K%)jiq-8Z)8ffo1qrD&b5T(i7HN`90J%|TuBv6DXL2>$Mlg`NspnG!8{2tj}~3nX>acI_xlpe_fD6YRoYe9p6h9P~`_ z=^+tsGSHn0s@!M4QV*u{NhrP2M*u{S4GL*XN<1QN=vdIU8MGC64llG!$0Rsa)gnK# zQ>}V0;V<j}j{XbImydEv|my)xrF$cs(?^0&2zR^QFAXGTD`oPCjt zH9tEhfveSX&B$Pn1vHB1WFedg;aM5nf#E4I0$ZnI8lMe_Vaw!#b*Qf)VQnfiBlI{B zFJgQi&?@4_6m-@(5j2q`qN`-q=MPvz=N!5V)Es{V2}=H ztn)?Ydo$`|N_4v;cDF-V6h_+LVU*7a%)m;WU0)B=PzWZZhBQ2;AP~QiAQA|If^M_` z(!;qKAi^k^bpjI5Bg)3_@NXW)U0R7Co6Fd!baAE!g6PGRpv}O8=t0J50;9pczuMRv zMrvA~g|oR_A<9!?3AEUT_535-XwD4EVX6Z~68kE(;uC;xhf1_j9rfNBQ%Sa}j#KpX z2hreI$iu@D2!T4`!gTlxh5`(Mp5yBgZyiGrh8{c+j$)FO1mz9Yn*({xC6vlz%km5Vc6tbT!up79k15bRt5YqW2R^kn|J5E&2uE zQse|&gu2aj#rIUaC+M8M6&XBq;vojfK$L+V!ZhR_9t>>P`h`QOBq{d`ce`{RBcX1l zbIU4m<>3&Rnv?iTI;G{12(Kbl70RPOmHS2s{1k+9E5%h%*jl`kfUM0bUfGt2KJWUxUdCi zE+S;QS%d+z#fy>3pmw;XlwRc>0rW)kfS>Kn?^yr{Z@iUOxlUWF4-uu6Tdjx=TbqAw zXi-!AUvIrqx2>B4k$8$bS6Vje^WEmf>b6`6G~)8?rQ!ks0 zC4^c(NgXJQG4}+7)3mS<0LTb8Mx+`C8e=*31RT*d-z&)C-Ertw}o+yXuX9D8OD=miWG6MynNMw+40$B_b zJ`eEei%QM~bjk-LGyuv2TET1{%Fy@ti?98OX4V$Ft!TOABGy6JX2wVKRiyqsZry;E zW!DqtzTI|MS;l?@u4yRCp9w4%zvvLTgZw3m8m|8YxC>tvKx(;8qYWb&m95iS*emyN z8qM8;OwZ-Q67QeJ&9&mP<%+bFt}fSJ7J@z5Su&3l%@$8BhDg8!45E07bhqO1La5Cqim z-ti;)Z7zuN!3fWPRBRd3CCF5mDc`1~h^BD7%`HBSAb~uqkwTBc*(?+y2OoUUuo-g1 zIEuJ1Q-~hLT|*IQS*-6v;ksmZykiP!`Kt}+bQ)(>vL;5)^=_r)ZZ)$)U+xp~X@Z_7 zCFo&{)c{%3)@rksYDW+O5XK!w86gXv?GZEZO3;OHQ#_HG|Clle!5{1_A~lI#EY_R% ztT;)Tix)gP3}Xx6)p$j1VMNFmD=(1p=5VMRX2%i%%<-#@(2AAIYAjR+-#+r{%OT`= zdUob}F;0OSOUVFcj{Rc*fCbjk?^8J)u83Fgk`#{|L)WSZ#lcPG;k>qxL@odLe4jZc zmTnSC&5W64>eHDxeuVv=LcI&BtVfh?g}n+j@Vj+{0O`s!Pqx+8@jKxX(S;L(FzW@G zuoA@7;S37Ma$x}^L!kl#_}Yo4z2F6I!dv0L!e8i`%QDTi6~xMLeJh@TEEQnwyQ|KW zPEZ;PmOZ|Fru+){)dn$4pEg%HcG9`I+C$T?z`-SZa=AjC! z7Hor)1asjA6m+q-iilUs8^^EnXLBDI5XhSc1c5oWQasuRtZwujnfQQ@;RDfEM1Lfs&C!t6+`|1KOBo&InmiBk}6Vdin8q;-5Ss6338(GI0EVw6hry6Ik5{H#rR!1@0-OO9lRMyASMmxO{E#1`@ z#nsv=a@(jF5>#_xNanKVQ7v1*VRZ!*BHCi*)XTzd=8dwIDeGDd_y{apt4?-1+4cwki>rKxa=lj311Z%l;5L`63_cOpHlt zyfxHv>AD;}J)m+0i1b=eIyU}MMNl<@c20t!Se)-8@auYRC8_%=2Y%!vzdKcXg_4o1T_U1&+i8oTeN1e82m^W z+8^Zms_FwsS{u@soN;pQq%AdM zKoqFljH#8u9BBp7x=ti_CeyNcD#frh9cS7cRZ$X6-#gFQE#*34s*vn%YSyWfSb$eX z`=~=dAY2SIM?{uP!7-~S)NFHJFR%P+S@J4fB3cd z)G~2VNxrcuE~!L~;b%$4MAbL{C82{Oq8D^R?CXR1yuicFjE42c!>q@{U9TV}a54^*653?(|fc?i>mHi)6+vx*G4S!@rFkIMFF;BqH^ z3R8jCEGeZvESP^mSCDxd{t#%91bA{Sal`QvaZLvPDCvOxzp0!mtQ4h@ zy27bd_#K%4d!-COa)b0TqO9MPmSRtYjnwP2FZb{I`1x>CW` zAR_s77fzN9yaeN)lO*zlyyZ#b{s+gprN(t$P zyF zLEu!a7(+{d4&h`7aYTiz(p~~dMuCAYOtXjqf5Z!4q{;fia>(U|KnXQ+DV0qLZZc{g zq{UkkrAf1xW}wgr{Y=a({4WI8P-hyYVWaF+cXtN!x_TxOBmV+}m2S4d zsmPw2%;e2{Nk)N`C_>Z72cak&{b|eUoQjGCKCrWi`PDRs8LNTzK+o8*naZ|8?$y{- zVjC#)IGQ)|C=FS8F;1i7MsA*PI=4(j#$?u};|&${Huz!*C+%9Z9tdK_hwVBs+jsDy%^ z7(t#TL|1bY3rXiPTAsEt%$wH(sdB7AmbQ#hMXTq8&>hjrMWUG9h|Wy#v#4Fpi*QMq zB5WzN27}oN4*4F zMeR`b6R|}$HS?$)AN6Gl%Ui9bN*O34RoBoZ=(N2}CVx$$sPB-Dm^l}-D&ch$XCO-Y zRDy#)WycSqM5EN=Ecg=vvRp|yVlPFeyPK-Y>?s}ZG(tWV?9(~V5@+Ld66NRC%IU;c z`yQp?2>~oLbO8BpCY1g;TLu3K3Yg-Ib&wo*QOJ4vRK@~vSw+kc&Y}M0RjcqmH7mes zfuI{FBKOZ$+e`+#Ml#vNagab5pRGDNb~^z75r~`XfSsPRy>rC=g_*ly0+(nH+O^SC zt@d_|c$YYlS|_CPhB3 z9IzPE4lPSAmZwVP{i6DA(XwZ!kdup5G26X*T6W>>0X7mfkSKpZ0dI}pU`ryV%!Lt4 zW)Zg>uzN`^5z!SA^+9-Y9{2@=L=_BjvvvV|+WVx*`Zg_GvNDER0ceMcS+%oSaxM@@ zGwVb23Pi)0tt2b;<3e7!{A^$|%CO%%{`F9E$g_cBaO;3_3(5@9c+-JVltdSXQ#p0vNV{kmNKO`&J9gl`-0nV06qQ zmrsk%n2}`wqFHfXY8+j&Ol~ntcCf({npI4JxlR)SIg{T@l@WEr-p9@| z%$Yrvrk{)KJ4G@C|0~X@)av@J8Hh-QGAlEHb8}B`TvZx7?X0hwwJOnyIy7k0dNQC= z1*NGeRevfKj83pt*C9F;;tQRqv%zoCAMTVAeP;??6YKiAK}zS_dA zWLd?X7z;Xyug%X9Ycm?sE$m$4P`V|q2?zDC5i#)NF}__#Lolabel:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before,.fas{font-family:'Font Awesome 5 Free';font-weight:900}.far{font-family:'Font Awesome 5 Free';font-weight:400}.fab{font-family:'Font Awesome 5 Brands'}.fa,.field>label:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before,.fas,.far,.fal,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid 0.08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.field>label.fa-pull-left:before,.field .field_with_errors>label.fa-pull-left:before,.field th.fa-pull-left:before,.field th a.fa-pull-left:before,.list>label.fa-pull-left:before,.list .field_with_errors>label.fa-pull-left:before,.list th.fa-pull-left:before,.list th a.fa-pull-left:before,dl>label.fa-pull-left:before,dl .field_with_errors>label.fa-pull-left:before,dl th.fa-pull-left:before,dl th a.fa-pull-left:before,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.field>label.fa-pull-right:before,.field .field_with_errors>label.fa-pull-right:before,.field th.fa-pull-right:before,.field th a.fa-pull-right:before,.list>label.fa-pull-right:before,.list .field_with_errors>label.fa-pull-right:before,.list th.fa-pull-right:before,.list th a.fa-pull-right:before,dl>label.fa-pull-right:before,dl .field_with_errors>label.fa-pull-right:before,dl th.fa-pull-right:before,dl th a.fa-pull-right:before,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(1, -1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scale(-1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-flip-both{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.flag-icon-background,.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{position:relative;display:inline-block;width:1.33333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(/assets/flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(/assets/flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg)}.flag-icon-ae{background-image:url(/assets/flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(/assets/flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg)}.flag-icon-af{background-image:url(/assets/flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg)}.flag-icon-af.flag-icon-squared{background-image:url(/assets/flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg)}.flag-icon-ag{background-image:url(/assets/flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(/assets/flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg)}.flag-icon-ai{background-image:url(/assets/flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(/assets/flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg)}.flag-icon-al{background-image:url(/assets/flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg)}.flag-icon-al.flag-icon-squared{background-image:url(/assets/flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg)}.flag-icon-am{background-image:url(/assets/flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg)}.flag-icon-am.flag-icon-squared{background-image:url(/assets/flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg)}.flag-icon-ao{background-image:url(/assets/flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(/assets/flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg)}.flag-icon-aq{background-image:url(/assets/flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(/assets/flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg)}.flag-icon-ar{background-image:url(/assets/flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(/assets/flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg)}.flag-icon-as{background-image:url(/assets/flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg)}.flag-icon-as.flag-icon-squared{background-image:url(/assets/flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg)}.flag-icon-at{background-image:url(/assets/flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg)}.flag-icon-at.flag-icon-squared{background-image:url(/assets/flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg)}.flag-icon-au{background-image:url(/assets/flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg)}.flag-icon-au.flag-icon-squared{background-image:url(/assets/flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg)}.flag-icon-aw{background-image:url(/assets/flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(/assets/flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg)}.flag-icon-ax{background-image:url(/assets/flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(/assets/flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg)}.flag-icon-az{background-image:url(/assets/flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg)}.flag-icon-az.flag-icon-squared{background-image:url(/assets/flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg)}.flag-icon-ba{background-image:url(/assets/flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(/assets/flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg)}.flag-icon-bb{background-image:url(/assets/flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(/assets/flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg)}.flag-icon-bd{background-image:url(/assets/flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(/assets/flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg)}.flag-icon-be{background-image:url(/assets/flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg)}.flag-icon-be.flag-icon-squared{background-image:url(/assets/flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg)}.flag-icon-bf{background-image:url(/assets/flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(/assets/flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg)}.flag-icon-bg{background-image:url(/assets/flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(/assets/flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg)}.flag-icon-bh{background-image:url(/assets/flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(/assets/flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg)}.flag-icon-bi{background-image:url(/assets/flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(/assets/flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg)}.flag-icon-bj{background-image:url(/assets/flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(/assets/flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg)}.flag-icon-bl{background-image:url(/assets/flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(/assets/flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg)}.flag-icon-bm{background-image:url(/assets/flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(/assets/flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg)}.flag-icon-bn{background-image:url(/assets/flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(/assets/flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg)}.flag-icon-bo{background-image:url(/assets/flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(/assets/flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg)}.flag-icon-bq{background-image:url(/assets/flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(/assets/flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg)}.flag-icon-br{background-image:url(/assets/flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg)}.flag-icon-br.flag-icon-squared{background-image:url(/assets/flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg)}.flag-icon-bs{background-image:url(/assets/flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(/assets/flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg)}.flag-icon-bt{background-image:url(/assets/flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(/assets/flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg)}.flag-icon-bv{background-image:url(/assets/flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(/assets/flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg)}.flag-icon-bw{background-image:url(/assets/flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(/assets/flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg)}.flag-icon-by{background-image:url(/assets/flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg)}.flag-icon-by.flag-icon-squared{background-image:url(/assets/flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg)}.flag-icon-bz{background-image:url(/assets/flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(/assets/flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg)}.flag-icon-ca{background-image:url(/assets/flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(/assets/flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg)}.flag-icon-cc{background-image:url(/assets/flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(/assets/flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg)}.flag-icon-cd{background-image:url(/assets/flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(/assets/flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg)}.flag-icon-cf{background-image:url(/assets/flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(/assets/flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg)}.flag-icon-cg{background-image:url(/assets/flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(/assets/flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg)}.flag-icon-ch{background-image:url(/assets/flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(/assets/flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg)}.flag-icon-ci{background-image:url(/assets/flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(/assets/flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg)}.flag-icon-ck{background-image:url(/assets/flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(/assets/flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg)}.flag-icon-cl{background-image:url(/assets/flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(/assets/flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg)}.flag-icon-cm{background-image:url(/assets/flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(/assets/flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg)}.flag-icon-cn{background-image:url(/assets/flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(/assets/flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg)}.flag-icon-co{background-image:url(/assets/flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg)}.flag-icon-co.flag-icon-squared{background-image:url(/assets/flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg)}.flag-icon-cr{background-image:url(/assets/flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(/assets/flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg)}.flag-icon-cu{background-image:url(/assets/flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(/assets/flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg)}.flag-icon-cv{background-image:url(/assets/flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(/assets/flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg)}.flag-icon-cw{background-image:url(/assets/flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(/assets/flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg)}.flag-icon-cx{background-image:url(/assets/flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(/assets/flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg)}.flag-icon-cy{background-image:url(/assets/flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(/assets/flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg)}.flag-icon-cz{background-image:url(/assets/flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(/assets/flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg)}.flag-icon-de{background-image:url(/assets/flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg)}.flag-icon-de.flag-icon-squared{background-image:url(/assets/flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg)}.flag-icon-dj{background-image:url(/assets/flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(/assets/flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg)}.flag-icon-dk{background-image:url(/assets/flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(/assets/flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg)}.flag-icon-dm{background-image:url(/assets/flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(/assets/flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg)}.flag-icon-do{background-image:url(/assets/flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg)}.flag-icon-do.flag-icon-squared{background-image:url(/assets/flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg)}.flag-icon-dz{background-image:url(/assets/flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(/assets/flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg)}.flag-icon-ec{background-image:url(/assets/flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(/assets/flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg)}.flag-icon-ee{background-image:url(/assets/flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(/assets/flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg)}.flag-icon-eg{background-image:url(/assets/flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(/assets/flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg)}.flag-icon-eh{background-image:url(/assets/flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(/assets/flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg)}.flag-icon-er{background-image:url(/assets/flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg)}.flag-icon-er.flag-icon-squared{background-image:url(/assets/flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg)}.flag-icon-es{background-image:url(/assets/flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg)}.flag-icon-es.flag-icon-squared{background-image:url(/assets/flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg)}.flag-icon-et{background-image:url(/assets/flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg)}.flag-icon-et.flag-icon-squared{background-image:url(/assets/flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg)}.flag-icon-fi{background-image:url(/assets/flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(/assets/flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg)}.flag-icon-fj{background-image:url(/assets/flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(/assets/flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg)}.flag-icon-fk{background-image:url(/assets/flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(/assets/flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg)}.flag-icon-fm{background-image:url(/assets/flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(/assets/flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg)}.flag-icon-fo{background-image:url(/assets/flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(/assets/flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg)}.flag-icon-fr{background-image:url(/assets/flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(/assets/flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg)}.flag-icon-ga{background-image:url(/assets/flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(/assets/flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg)}.flag-icon-gb{background-image:url(/assets/flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg)}.flag-icon-gd{background-image:url(/assets/flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(/assets/flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg)}.flag-icon-ge{background-image:url(/assets/flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(/assets/flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg)}.flag-icon-gf{background-image:url(/assets/flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(/assets/flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg)}.flag-icon-gg{background-image:url(/assets/flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(/assets/flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg)}.flag-icon-gh{background-image:url(/assets/flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(/assets/flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg)}.flag-icon-gi{background-image:url(/assets/flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(/assets/flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg)}.flag-icon-gl{background-image:url(/assets/flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(/assets/flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg)}.flag-icon-gm{background-image:url(/assets/flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(/assets/flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg)}.flag-icon-gn{background-image:url(/assets/flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(/assets/flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg)}.flag-icon-gp{background-image:url(/assets/flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(/assets/flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg)}.flag-icon-gq{background-image:url(/assets/flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(/assets/flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg)}.flag-icon-gr{background-image:url(/assets/flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(/assets/flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg)}.flag-icon-gs{background-image:url(/assets/flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(/assets/flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg)}.flag-icon-gt{background-image:url(/assets/flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(/assets/flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg)}.flag-icon-gu{background-image:url(/assets/flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(/assets/flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg)}.flag-icon-gw{background-image:url(/assets/flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(/assets/flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg)}.flag-icon-gy{background-image:url(/assets/flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(/assets/flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg)}.flag-icon-hk{background-image:url(/assets/flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(/assets/flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg)}.flag-icon-hm{background-image:url(/assets/flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(/assets/flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg)}.flag-icon-hn{background-image:url(/assets/flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(/assets/flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg)}.flag-icon-hr{background-image:url(/assets/flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(/assets/flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg)}.flag-icon-ht{background-image:url(/assets/flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(/assets/flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg)}.flag-icon-hu{background-image:url(/assets/flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(/assets/flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg)}.flag-icon-id{background-image:url(/assets/flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg)}.flag-icon-id.flag-icon-squared{background-image:url(/assets/flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg)}.flag-icon-ie{background-image:url(/assets/flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(/assets/flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg)}.flag-icon-il{background-image:url(/assets/flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg)}.flag-icon-il.flag-icon-squared{background-image:url(/assets/flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg)}.flag-icon-im{background-image:url(/assets/flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg)}.flag-icon-im.flag-icon-squared{background-image:url(/assets/flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg)}.flag-icon-in{background-image:url(/assets/flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg)}.flag-icon-in.flag-icon-squared{background-image:url(/assets/flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg)}.flag-icon-io{background-image:url(/assets/flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg)}.flag-icon-io.flag-icon-squared{background-image:url(/assets/flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg)}.flag-icon-iq{background-image:url(/assets/flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(/assets/flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg)}.flag-icon-ir{background-image:url(/assets/flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(/assets/flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg)}.flag-icon-is{background-image:url(/assets/flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg)}.flag-icon-is.flag-icon-squared{background-image:url(/assets/flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg)}.flag-icon-it{background-image:url(/assets/flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg)}.flag-icon-it.flag-icon-squared{background-image:url(/assets/flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg)}.flag-icon-je{background-image:url(/assets/flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg)}.flag-icon-je.flag-icon-squared{background-image:url(/assets/flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg)}.flag-icon-jm{background-image:url(/assets/flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(/assets/flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg)}.flag-icon-jo{background-image:url(/assets/flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(/assets/flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg)}.flag-icon-jp{background-image:url(/assets/flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(/assets/flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg)}.flag-icon-ke{background-image:url(/assets/flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(/assets/flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg)}.flag-icon-kg{background-image:url(/assets/flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(/assets/flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg)}.flag-icon-kh{background-image:url(/assets/flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(/assets/flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg)}.flag-icon-ki{background-image:url(/assets/flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(/assets/flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg)}.flag-icon-km{background-image:url(/assets/flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg)}.flag-icon-km.flag-icon-squared{background-image:url(/assets/flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg)}.flag-icon-kn{background-image:url(/assets/flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(/assets/flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg)}.flag-icon-kp{background-image:url(/assets/flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(/assets/flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg)}.flag-icon-kr{background-image:url(/assets/flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(/assets/flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg)}.flag-icon-kw{background-image:url(/assets/flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(/assets/flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg)}.flag-icon-ky{background-image:url(/assets/flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(/assets/flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg)}.flag-icon-kz{background-image:url(/assets/flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(/assets/flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg)}.flag-icon-la{background-image:url(/assets/flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg)}.flag-icon-la.flag-icon-squared{background-image:url(/assets/flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg)}.flag-icon-lb{background-image:url(/assets/flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(/assets/flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg)}.flag-icon-lc{background-image:url(/assets/flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(/assets/flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg)}.flag-icon-li{background-image:url(/assets/flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg)}.flag-icon-li.flag-icon-squared{background-image:url(/assets/flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg)}.flag-icon-lk{background-image:url(/assets/flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(/assets/flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg)}.flag-icon-lr{background-image:url(/assets/flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(/assets/flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg)}.flag-icon-ls{background-image:url(/assets/flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(/assets/flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg)}.flag-icon-lt{background-image:url(/assets/flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(/assets/flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg)}.flag-icon-lu{background-image:url(/assets/flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(/assets/flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg)}.flag-icon-lv{background-image:url(/assets/flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(/assets/flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg)}.flag-icon-ly{background-image:url(/assets/flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(/assets/flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg)}.flag-icon-ma{background-image:url(/assets/flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(/assets/flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg)}.flag-icon-mc{background-image:url(/assets/flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(/assets/flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg)}.flag-icon-md{background-image:url(/assets/flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg)}.flag-icon-md.flag-icon-squared{background-image:url(/assets/flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg)}.flag-icon-me{background-image:url(/assets/flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg)}.flag-icon-me.flag-icon-squared{background-image:url(/assets/flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg)}.flag-icon-mf{background-image:url(/assets/flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(/assets/flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg)}.flag-icon-mg{background-image:url(/assets/flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(/assets/flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg)}.flag-icon-mh{background-image:url(/assets/flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(/assets/flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg)}.flag-icon-mk{background-image:url(/assets/flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(/assets/flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg)}.flag-icon-ml{background-image:url(/assets/flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(/assets/flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg)}.flag-icon-mm{background-image:url(/assets/flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(/assets/flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg)}.flag-icon-mn{background-image:url(/assets/flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(/assets/flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg)}.flag-icon-mo{background-image:url(/assets/flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(/assets/flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg)}.flag-icon-mp{background-image:url(/assets/flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(/assets/flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg)}.flag-icon-mq{background-image:url(/assets/flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(/assets/flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg)}.flag-icon-mr{background-image:url(/assets/flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(/assets/flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg)}.flag-icon-ms{background-image:url(/assets/flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(/assets/flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg)}.flag-icon-mt{background-image:url(/assets/flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(/assets/flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg)}.flag-icon-mu{background-image:url(/assets/flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(/assets/flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg)}.flag-icon-mv{background-image:url(/assets/flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(/assets/flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg)}.flag-icon-mw{background-image:url(/assets/flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(/assets/flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg)}.flag-icon-mx{background-image:url(/assets/flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(/assets/flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg)}.flag-icon-my{background-image:url(/assets/flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg)}.flag-icon-my.flag-icon-squared{background-image:url(/assets/flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg)}.flag-icon-mz{background-image:url(/assets/flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(/assets/flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg)}.flag-icon-na{background-image:url(/assets/flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg)}.flag-icon-na.flag-icon-squared{background-image:url(/assets/flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg)}.flag-icon-nc{background-image:url(/assets/flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(/assets/flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg)}.flag-icon-ne{background-image:url(/assets/flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(/assets/flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg)}.flag-icon-nf{background-image:url(/assets/flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(/assets/flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg)}.flag-icon-ng{background-image:url(/assets/flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(/assets/flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg)}.flag-icon-ni{background-image:url(/assets/flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(/assets/flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg)}.flag-icon-nl{background-image:url(/assets/flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(/assets/flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg)}.flag-icon-no{background-image:url(/assets/flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg)}.flag-icon-no.flag-icon-squared{background-image:url(/assets/flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg)}.flag-icon-np{background-image:url(/assets/flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg)}.flag-icon-np.flag-icon-squared{background-image:url(/assets/flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg)}.flag-icon-nr{background-image:url(/assets/flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(/assets/flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg)}.flag-icon-nu{background-image:url(/assets/flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(/assets/flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg)}.flag-icon-nz{background-image:url(/assets/flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(/assets/flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg)}.flag-icon-om{background-image:url(/assets/flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg)}.flag-icon-om.flag-icon-squared{background-image:url(/assets/flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg)}.flag-icon-pa{background-image:url(/assets/flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(/assets/flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg)}.flag-icon-pe{background-image:url(/assets/flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(/assets/flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg)}.flag-icon-pf{background-image:url(/assets/flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(/assets/flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg)}.flag-icon-pg{background-image:url(/assets/flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(/assets/flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg)}.flag-icon-ph{background-image:url(/assets/flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(/assets/flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg)}.flag-icon-pk{background-image:url(/assets/flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(/assets/flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg)}.flag-icon-pl{background-image:url(/assets/flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(/assets/flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg)}.flag-icon-pm{background-image:url(/assets/flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(/assets/flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg)}.flag-icon-pn{background-image:url(/assets/flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(/assets/flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg)}.flag-icon-pr{background-image:url(/assets/flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(/assets/flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg)}.flag-icon-ps{background-image:url(/assets/flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(/assets/flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg)}.flag-icon-pt{background-image:url(/assets/flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(/assets/flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg)}.flag-icon-pw{background-image:url(/assets/flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(/assets/flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg)}.flag-icon-py{background-image:url(/assets/flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg)}.flag-icon-py.flag-icon-squared{background-image:url(/assets/flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg)}.flag-icon-qa{background-image:url(/assets/flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(/assets/flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg)}.flag-icon-re{background-image:url(/assets/flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg)}.flag-icon-re.flag-icon-squared{background-image:url(/assets/flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg)}.flag-icon-ro{background-image:url(/assets/flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(/assets/flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg)}.flag-icon-rs{background-image:url(/assets/flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(/assets/flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg)}.flag-icon-ru{background-image:url(/assets/flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(/assets/flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg)}.flag-icon-rw{background-image:url(/assets/flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(/assets/flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg)}.flag-icon-sa{background-image:url(/assets/flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(/assets/flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg)}.flag-icon-sb{background-image:url(/assets/flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(/assets/flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg)}.flag-icon-sc{background-image:url(/assets/flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(/assets/flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg)}.flag-icon-sd{background-image:url(/assets/flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(/assets/flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg)}.flag-icon-se{background-image:url(/assets/flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg)}.flag-icon-se.flag-icon-squared{background-image:url(/assets/flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg)}.flag-icon-sg{background-image:url(/assets/flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(/assets/flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg)}.flag-icon-sh{background-image:url(/assets/flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(/assets/flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg)}.flag-icon-si{background-image:url(/assets/flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg)}.flag-icon-si.flag-icon-squared{background-image:url(/assets/flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg)}.flag-icon-sj{background-image:url(/assets/flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(/assets/flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg)}.flag-icon-sk{background-image:url(/assets/flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(/assets/flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg)}.flag-icon-sl{background-image:url(/assets/flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(/assets/flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg)}.flag-icon-sm{background-image:url(/assets/flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(/assets/flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg)}.flag-icon-sn{background-image:url(/assets/flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(/assets/flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg)}.flag-icon-so{background-image:url(/assets/flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg)}.flag-icon-so.flag-icon-squared{background-image:url(/assets/flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg)}.flag-icon-sr{background-image:url(/assets/flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(/assets/flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg)}.flag-icon-ss{background-image:url(/assets/flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(/assets/flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg)}.flag-icon-st{background-image:url(/assets/flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg)}.flag-icon-st.flag-icon-squared{background-image:url(/assets/flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg)}.flag-icon-sv{background-image:url(/assets/flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(/assets/flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg)}.flag-icon-sx{background-image:url(/assets/flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(/assets/flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg)}.flag-icon-sy{background-image:url(/assets/flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(/assets/flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg)}.flag-icon-sz{background-image:url(/assets/flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(/assets/flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg)}.flag-icon-tc{background-image:url(/assets/flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(/assets/flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg)}.flag-icon-td{background-image:url(/assets/flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg)}.flag-icon-td.flag-icon-squared{background-image:url(/assets/flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg)}.flag-icon-tf{background-image:url(/assets/flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(/assets/flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg)}.flag-icon-tg{background-image:url(/assets/flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(/assets/flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg)}.flag-icon-th{background-image:url(/assets/flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg)}.flag-icon-th.flag-icon-squared{background-image:url(/assets/flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg)}.flag-icon-tj{background-image:url(/assets/flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(/assets/flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg)}.flag-icon-tk{background-image:url(/assets/flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(/assets/flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg)}.flag-icon-tl{background-image:url(/assets/flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(/assets/flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg)}.flag-icon-tm{background-image:url(/assets/flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(/assets/flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg)}.flag-icon-tn{background-image:url(/assets/flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(/assets/flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg)}.flag-icon-to{background-image:url(/assets/flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg)}.flag-icon-to.flag-icon-squared{background-image:url(/assets/flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg)}.flag-icon-tr{background-image:url(/assets/flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(/assets/flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg)}.flag-icon-tt{background-image:url(/assets/flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(/assets/flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg)}.flag-icon-tv{background-image:url(/assets/flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(/assets/flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg)}.flag-icon-tw{background-image:url(/assets/flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(/assets/flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg)}.flag-icon-tz{background-image:url(/assets/flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(/assets/flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg)}.flag-icon-ua{background-image:url(/assets/flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(/assets/flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg)}.flag-icon-ug{background-image:url(/assets/flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(/assets/flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg)}.flag-icon-um{background-image:url(/assets/flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg)}.flag-icon-um.flag-icon-squared{background-image:url(/assets/flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg)}.flag-icon-us{background-image:url(/assets/flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg)}.flag-icon-us.flag-icon-squared{background-image:url(/assets/flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg)}.flag-icon-uy{background-image:url(/assets/flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(/assets/flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg)}.flag-icon-uz{background-image:url(/assets/flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(/assets/flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg)}.flag-icon-va{background-image:url(/assets/flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg)}.flag-icon-va.flag-icon-squared{background-image:url(/assets/flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg)}.flag-icon-vc{background-image:url(/assets/flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(/assets/flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg)}.flag-icon-ve{background-image:url(/assets/flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(/assets/flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg)}.flag-icon-vg{background-image:url(/assets/flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(/assets/flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg)}.flag-icon-vi{background-image:url(/assets/flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(/assets/flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg)}.flag-icon-vn{background-image:url(/assets/flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(/assets/flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg)}.flag-icon-vu{background-image:url(/assets/flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(/assets/flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg)}.flag-icon-wf{background-image:url(/assets/flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(/assets/flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg)}.flag-icon-ws{background-image:url(/assets/flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(/assets/flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg)}.flag-icon-ye{background-image:url(/assets/flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(/assets/flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg)}.flag-icon-yt{background-image:url(/assets/flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(/assets/flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg)}.flag-icon-za{background-image:url(/assets/flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg)}.flag-icon-za.flag-icon-squared{background-image:url(/assets/flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg)}.flag-icon-zm{background-image:url(/assets/flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(/assets/flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg)}.flag-icon-zw{background-image:url(/assets/flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(/assets/flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg)}.flag-icon-es-ct{background-image:url(/assets/flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg)}.flag-icon-es-ct.flag-icon-squared{background-image:url(/assets/flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg)}.flag-icon-eu{background-image:url(/assets/flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(/assets/flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg)}.flag-icon-gb-eng{background-image:url(/assets/flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg)}.flag-icon-gb-nir{background-image:url(/assets/flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg)}.flag-icon-gb-sct{background-image:url(/assets/flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg)}.flag-icon-gb-wls{background-image:url(/assets/flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(/assets/flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg)}.flag-icon-un{background-image:url(/assets/flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg)}.flag-icon-un.flag-icon-squared{background-image:url(/assets/flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg)}.leaflet-pane,.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile-container,.leaflet-pane>svg,.leaflet-pane>canvas,.leaflet-zoom-box,.leaflet-image-layer,.leaflet-layer{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden}.leaflet-tile,.leaflet-marker-icon,.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg,.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer,.leaflet-container .leaflet-tile{max-width:none !important;max-height:none !important}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,0.4)}.leaflet-tile{filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-tile{will-change:opacity}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{-webkit-transition:-webkit-transform 0.25s cubic-bezier(0, 0, 0.25, 1);-moz-transition:-moz-transform 0.25s cubic-bezier(0, 0, 0.25, 1);transition:transform 0.25s cubic-bezier(0, 0, 0.25, 1)}.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-popup-pane,.leaflet-control{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-image-layer,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-marker-icon.leaflet-interactive,.leaflet-image-layer.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{background:#ddd;outline:0}.leaflet-container a{color:#0078A8}.leaflet-container a.leaflet-active{outline:2px solid orange}.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,0.5)}.leaflet-container{font:12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif}.leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,0.65);border-radius:4px}.leaflet-bar a,.leaflet-bar a:hover{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:black}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console', Monaco, monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,0.4);background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(/assets/leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(/assets/leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(/assets/leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png)}.leaflet-container .leaflet-control-attribution{background:#fff;background:rgba(255,255,255,0.7);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;background:rgba(255,255,255,0.5)}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{box-shadow:none}.leaflet-touch .leaflet-control-layers,.leaflet-touch .leaflet-bar{border:2px solid rgba(0,0,0,0.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:white;color:#333;box-shadow:0 3px 14px rgba(0,0,0,0.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:none;text-align:center;width:18px;height:14px;font:16px/14px Tahoma, Verdana, sans-serif;color:#c3c3c3;text-decoration:none;font-weight:bold;background:transparent}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-oldie .leaflet-popup-content-wrapper{zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)}.leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,0.4)}.leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.leaflet-tooltip-top:before,.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{position:absolute;pointer-events:none;border:6px solid transparent;background:transparent;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:-webkit-transform 0.3s ease-out, opacity 0.3s ease-in;-moz-transition:-moz-transform 0.3s ease-out, opacity 0.3s ease-in;-o-transition:-o-transform 0.3s ease-out, opacity 0.3s ease-in;transition:transform 0.3s ease-out, opacity 0.3s ease-in}.leaflet-cluster-spider-leg{-webkit-transition:-webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;-moz-transition:-moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;-o-transition:-o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;transition:stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in}.marker-cluster-small{background-color:rgba(181,226,140,0.6)}.marker-cluster-small div{background-color:rgba(110,204,57,0.6)}.marker-cluster-medium{background-color:rgba(241,211,87,0.6)}.marker-cluster-medium div{background-color:rgba(240,194,12,0.6)}.marker-cluster-large{background-color:rgba(253,156,115,0.6)}.marker-cluster-large div{background-color:rgba(241,128,23,0.6)}.leaflet-oldie .marker-cluster-small{background-color:#b5e28c}.leaflet-oldie .marker-cluster-small div{background-color:#6ecc39}.leaflet-oldie .marker-cluster-medium{background-color:#f1d357}.leaflet-oldie .marker-cluster-medium div{background-color:#f0c20c}.leaflet-oldie .marker-cluster-large{background-color:#fd9c73}.leaflet-oldie .marker-cluster-large div{background-color:#f18017}.marker-cluster{background-clip:padding-box;border-radius:20px}.marker-cluster div{width:30px;height:30px;margin-left:5px;margin-top:5px;text-align:center;border-radius:15px;font:12px "Helvetica Neue", Arial, Helvetica, sans-serif}.marker-cluster span{line-height:30px}.awesome-marker{background:url(/assets/markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png) no-repeat 0 0;width:35px;height:46px;position:absolute;left:0;top:0;display:block;text-align:center}.awesome-marker-shadow{background:url(/assets/markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png) no-repeat 0 0;width:36px;height:16px}@media (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3 / 2), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 1.5dppx){.awesome-marker{background-image:url(/assets/markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png);background-size:720px 46px}.awesome-marker-shadow{background-image:url(/assets/markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png);background-size:35px 16px}}.awesome-marker i{color:#333;margin-top:10px;display:inline-block;font-size:14px}.awesome-marker .icon-white{color:#fff}.awesome-marker-icon-red{background-position:0 0}.awesome-marker-icon-darkred{background-position:-180px 0}.awesome-marker-icon-lightred{background-position:-360px 0}.awesome-marker-icon-orange{background-position:-36px 0}.awesome-marker-icon-beige{background-position:-396px 0}.awesome-marker-icon-green{background-position:-72px 0}.awesome-marker-icon-darkgreen{background-position:-252px 0}.awesome-marker-icon-lightgreen{background-position:-432px 0}.awesome-marker-icon-blue{background-position:-108px 0}.awesome-marker-icon-darkblue{background-position:-216px 0}.awesome-marker-icon-lightblue{background-position:-468px 0}.awesome-marker-icon-purple{background-position:-144px 0}.awesome-marker-icon-darkpurple{background-position:-288px 0}.awesome-marker-icon-pink{background-position:-504px 0}.awesome-marker-icon-cadetblue{background-position:-324px 0}.awesome-marker-icon-white{background-position:-574px 0}.awesome-marker-icon-gray{background-position:-648px 0}.awesome-marker-icon-lightgray{background-position:-612px 0}.awesome-marker-icon-black{background-position:-682px 0}body.agendadescommuns{font-family:georgia, serif}body.agendadescommuns header.top{padding-left:120px;padding-right:120px;background-image:url(agendadescommuns.png);background-repeat:no-repeat;background-position:20px top}body.agendadescommuns header.top img.logo{display:none}body.agendadescommuns ul.countries,body.agendadescommuns form#orga_search,body.agendadescommuns a#banner{display:none}body.agendadescommuns .city{text-transform:uppercase}body.agendadescommuns.events.index table tr .day_number{color:#727070}body.agendadescommuns.events.index table tr td.current-month.past,body.agendadescommuns.events.index table tr td.current-month.past .day_number{color:#FFFAEB;background-color:#7494B5}body.agendadescommuns.events.index table tr td.current-month.today{border-color:#FFFAEB;background-color:#DBEDFF}body.agendadescommuns.events.index table tr td.current-month.future{color:#444;border-color:#EAE4D3;background-color:#F0E8D1}*{height:auto;padding:0;max-width:inherit;box-sizing:inherit;margin-left:auto;margin-right:auto}html{height:100%;max-width:100%;box-sizing:border-box;background-color:transparent}html.iframe body>header,html.iframe body>footer,html.iframe body h2,html.iframe body nav,html.iframe body .orga_search,html.iframe body #banner{display:none}body{font-size:calc(6px + 0.8vw);min-height:100%;text-align:center;font-family:sans-serif;background-color:transparent}body header *,body main *,body footer *{transition-duration:0.5s}img:-moz-broken{opacity:0}a:link,a:visited{color:#258;text-decoration:none}a:hover,a:active,a:focus{color:#2E97FF}#flash-messages .flash{color:white;border:solid 1px #007ba0;margin:1em auto;padding:0.5em 1.1em;max-width:50em;font-size:larger;text-align:justify;box-shadow:0 0 0.3em gray;border-radius:3px;background-color:#008cba}#flash-messages .flash.notice{border-color:#3a945b;background-color:#43ac6a}#flash-messages .flash.alert{border-color:#de2b0f;background-color:#f04124}h3.warning{color:white;margin:0;padding:1em;display:inline-block;text-align:center;box-shadow:0 0 0.3em gray;border-radius:1em;background-color:orange}header.top{text-align:left}header.top img.logo{float:left;max-width:12vw;margin-right:1%}header.top h1{margin:0;padding:0}header.top h2{font-size:inherit;font-style:italic;font-weight:normal;margin-top:0.2em}main,body.mce-content-body{clear:both;position:relative}main h3,body.mce-content-body h3{text-align:left}main ul,main ol,body.mce-content-body ul,body.mce-content-body ol{text-align:left;padding-left:1em;list-style-position:inside}main p,body.mce-content-body p{text-align:left}main p.label,body.mce-content-body p.label{text-align:center}main p span.label:after,body.mce-content-body p span.label:after{content:':'}main hr,body.mce-content-body hr{margin:10px 20px}aside{float:right;border:1px solid #96CFFF;margin:0 1.2em;z-index:10;padding:5px;position:relative;max-width:20em;box-shadow:4px 4px 1em gray;margin-right:-4em;border-radius:1em;background-color:#D6ECFF}aside h2{border-bottom:1px black solid;padding-bottom:0.3em}aside ul a{padding:0.5em 1em 0.5em 0;display:block}main{width:60em}body.index main{width:initial}fieldset{border:none;margin:1em auto;padding:2%;box-shadow:1px 1px 5px #9CC5EE;border-radius:0.4em}fieldset legend{color:#666;padding:0 1em;font-size:larger;background-color:white}fieldset h2{margin-top:0}footer.bottom nav{clear:both}footer.bottom nav a{padding:1.8%;display:inline-block;font-weight:bolder}footer.bottom nav a:hover{text-shadow:0 0 1em lightgray}#loading{top:45%;left:45%;color:gray;display:none;position:fixed;font-size:10vw;text-shadow:0 0 4px gray;vertical-align:baseline}.pagination span{display:none}.pagination span.next{display:block}body.digests main{padding:1em;max-width:60em;box-shadow:1px 1px 5px gray;border-radius:0.4em}body.digests main h2{margin:0;padding:0;font-size:larger;text-align:left}body.digests main .description p,body.digests main .second-part p{white-space:pre-line}body.digests main textarea{width:40em;height:20em}header.calendar-header{font-size:larger}header.calendar-header a:first-child,header.calendar-header a:last-child{padding:0 0.3em}em.locality.fa{color:gray}strong.city:after,em.city:after{content:':';margin-left:0.25em}p.full_address span:after{content:','}p.full_address span:last-child:after{content:''}.calendar-header,.month{text-transform:capitalize}body.events.index table{width:100%;table-layout:fixed}body.events.index table tr th{text-transform:capitalize}body.events.index table tr td{height:4.8em;border:1px solid #89B7E5;padding:1px;position:relative;vertical-align:top;background-color:#A1C3E7}body.events.index table tr td.past .event{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}body.events.index table tr td.past .event:hover{display:inline;z-index:10000;overflow:initial;background-color:#A1C3E7}body.events.index table tr td.today{border:1px solid #FFB578;background-color:#FFE0C7}body.events.index table tr td.today .day_number{color:#531}body.events.index table tr td.today .event a:link,body.events.index table tr td.today .event a:visited{color:#730}body.events.index table tr td.future{border-color:#96cfff;background-color:#C6E5FF}body.events.index table tr td.prev-month,body.events.index table tr td.next-month{border:none;background-color:#ededed}body.events.index table tr td.prev-month li,body.events.index table tr td.next-month li{color:#555}body.events.index table tr td.prev-month .event a:link,body.events.index table tr td.prev-month .event a:visited,body.events.index table tr td.next-month .event a:link,body.events.index table tr td.next-month .event a:visited{color:#444}body.events.index table tr td .day_number{float:left;color:#111;font-size:0.6em;font-weight:bolder;letter-spacing:2px}body.events.index table tr td:hover .day_number{color:black}body.events.index table tr td ul{clear:left;margin:0;padding:0}body.events.index table tr td ul li{color:#444;margin:0;padding:0}body.events.index table tr td ul li em.fa.fa-globe{color:red;font-size:smaller}body.events.index table tr td ul .event{padding-left:0.2em}body.events.index table tr td ul .event img{vertical-align:middle}body.events.index table tr td ul .event a:link,body.events.index table tr td ul .event a:visited{color:#111;font-size:smaller}body.events.index table tr td ul .event a:link:hover,body.events.index table tr td ul .event a:visited:hover{color:black;text-decoration:underline}.links{float:right}.fa-rss{color:darkorange}a#banner{float:left}body.events.show main,body.orgas.show main,body.tags.show main,body.pages main{width:60em;padding:1em;box-shadow:1px 1px 5px #9CC5EE;border-radius:0.4em}body.events.show main h2,body.orgas.show main h2,body.tags.show main h2,body.pages main h2{margin-top:1em}html.iframe main{box-shadow:none !important}#advises{width:60em;border:1px solid #FFB578;border-radius:0.2em;padding-left:10px;padding-right:10px;background-color:#ffe0c7}#advises>*:first-child{font-size:1.9em;font-weight:normal}#advises>*:first-child:before{content:'🛈 '}#advises a{color:#8F4900}.description img,body.mce-content-body img{margin-left:1%;margin-right:1%}article.event{box-shadow:-1em 1em 1em -1em #9CC5EE;margin-left:1em;padding-left:1em;padding-bottom:0.4em;border-bottom-left-radius:1em}body.mce-content-body{margin:0;border:none;padding:1px 1%;font-size:inherit;min-height:100%}.tox-tinymce{border:none !important}.helper p{color:gray;text-align:right;margin-top:0;margin-bottom:0}legend{margin-left:0}.field{color:#666;border:none;display:flex;flex-wrap:wrap;box-shadow:0 0 2px darkgray;align-items:center;border-radius:4px}.field>label,.field .field_with_errors>label{width:10em;margin:0;padding:0.8em;text-align:right;padding-left:0}.field .helper{color:#888;padding:0.8em;font-style:italic;margin-left:0}.field input,.field textarea,.field div.tagsinput,.field .field_with_errors:last-child,.field>div{flex-grow:1}.field input[type=number],.field input[type=checkbox],.field textarea[type=number],.field textarea[type=checkbox],.field div.tagsinput[type=number],.field div.tagsinput[type=checkbox],.field .field_with_errors:last-child[type=number],.field .field_with_errors:last-child[type=checkbox],.field>div[type=number],.field>div[type=checkbox]{flex-grow:unset;margin-left:0;margin-right:0}.field select{margin-left:0;margin-right:0}.field .field_with_errors:first-child{width:10em}.field .field_with_errors>*{width:100%;display:block}input,textarea,select,a.button,.actions>button,div.tagsinput,.ui-autocomplete-input{color:black;border:solid 0.25em transparent;outline:none;padding:0.25em;font-size:inherit;font-family:inherit;background-color:transparent}input:focus,textarea:focus,select:focus,a.button:focus,.actions>button:focus,div.tagsinput:focus,.ui-autocomplete-input:focus{border-color:#F0F8FF}input[type=radio],textarea[type=radio],select[type=radio],a.button[type=radio],.actions>button[type=radio],div.tagsinput[type=radio],.ui-autocomplete-input[type=radio]{box-shadow:none}input[type=radio]+label,textarea[type=radio]+label,select[type=radio]+label,a.button[type=radio]+label,.actions>button[type=radio]+label,div.tagsinput[type=radio]+label,.ui-autocomplete-input[type=radio]+label{border:none}input[type=submit],input.button,textarea[type=submit],textarea.button,select[type=submit],select.button,a.button[type=submit],a.button.button,.actions>button[type=submit],.actions>button.button,div.tagsinput[type=submit],div.tagsinput.button,.ui-autocomplete-input[type=submit],.ui-autocomplete-input.button{cursor:pointer;margin:3px 0.4em;font-size:larger;box-shadow:0 0 2px darkgray;font-weight:bolder;letter-spacing:2px;background-color:#9CC5EE}.field_with_errors{display:inline}.field_with_errors input,.field_with_errors textarea,.field_with_errors select,.field_with_errors a.button{background-color:pink}.radios{margin-left:0}.radios [type=radio]{display:none}.radios label{color:#258;cursor:pointer;padding:0.5em;display:inline-block}.radios label:hover{color:#222;box-shadow:0 0 0 4px lightgray}.radios [type=radio]:checked+label{color:black;box-shadow:0 0 0 6px lightgray}.radios [type=radio]:invalid+label{box-shadow:0 0 1px tomato}.actions{text-align:center}.actions input{font-size:x-large}.field.required>label:after,.field.required .field_with_errors>label:after,.list.required>label:after,.list.required .field_with_errors>label:after,dl.required>label:after,dl.required .field_with_errors>label:after{color:darkred;content:'*';font-size:smaller;margin-left:0.4em}.field>label:before,.field .field_with_errors>label:before,.field th:before,.field th a:before,.list>label:before,.list .field_with_errors>label:before,.list th:before,.list th a:before,dl>label:before,dl .field_with_errors>label:before,dl th:before,dl th a:before{margin-right:0.4em}.field.login label:before,.list.login label:before,dl.login label:before{content:"\f2f6"}.field.password label:before,.list.password label:before,dl.password label:before{content:"\f09c"}.field.title label:before,.list.title label:before,dl.title label:before{content:"\f1ea"}.field.start_time label:before,.list.start_time label:before,dl.start_time label:before{content:"\f205"}.field.end_time label:before,.list.end_time label:before,dl.end_time label:before{content:"\f204"}.field.repeat label:before,.list.repeat label:before,dl.repeat label:before{content:"\f01e"}.field.rule>label:before,.list.rule>label:before,dl.rule>label:before{content:"\f1ec"}.field.description label:before,.list.description label:before,dl.description label:before{content:"\f044"}.field.place_name label:before,.list.place_name label:before,dl.place_name label:before{content:"\f276"}.field.address label:before,.list.address label:before,dl.address label:before{content:"\f041"}.field.city label:before,.field th.city a:before,.list.city label:before,.list th.city a:before,dl.city label:before,dl th.city a:before{content:"\f1ad"}.field.department label:before,.field th.department a:before,.list.department label:before,.list th.department a:before,dl.department label:before,dl th.department a:before{content:"\f12e"}.field.region>label:before,.field th.region a:before,.list.region>label:before,.list th.region a:before,dl.region>label:before,dl th.region a:before{content:"\f3ed"}.field.locality>label:before,.list.locality>label:before,dl.locality>label:before{content:"\f065"}.field.contact label:before,.list.contact label:before,dl.contact label:before{content:"\f0e0"}.field.submitter label:before,.list.submitter label:before,dl.submitter label:before{content:"\f0e0"}.field.url label:before,.field th.url:before,.list.url label:before,.list th.url:before,dl.url label:before,dl th.url:before{content:"\f35d"}.field.diaspora label:after,.field td.diaspora em:before,.field dt.diaspora em:before,.list.diaspora label:after,.list td.diaspora em:before,.list dt.diaspora em:before,dl.diaspora label:after,dl td.diaspora em:before,dl dt.diaspora em:before{content:"*";font-size:24px;font-family:'Roboto', 'Helvetica', 'Arial', sans-serif;line-height:0}.field.tag label:before,.field th.tag a:before,.list.tag label:before,.list th.tag a:before,dl.tag label:before,dl th.tag a:before{content:"\f02b"}.field.tags label:before,.field th.tags a:before,.list.tags label:before,.list th.tags a:before,dl.tags label:before,dl th.tags a:before{content:"\f02c"}.field.active label:before,.list.active label:before,dl.active label:before{content:"\f21e"}.field.reason label:before,.list.reason label:before,dl.reason label:before{content:"\f075"}.field.kind>label:before,.field th.kind:before,.list.kind>label:before,.list th.kind:before,dl.kind>label:before,dl th.kind:before{content:"\f1b3"}.field.feed label:before,.field th.feed:before,.list.feed label:before,.list th.feed:before,dl.feed label:before,dl th.feed:before{content:"\f09e"}.field.future label:before,.list.future label:before,dl.future label:before{content:"\f04a"}.field.period_year label:before,.list.period_year label:before,dl.period_year label:before{content:"\f049"}.field.period_week label:before,.list.period_week label:before,dl.period_week label:before{content:"\f048"}.field.near_location label:before,.list.near_location label:before,dl.near_location label:before{content:"\f276"}.field.near_distance label:before,.list.near_distance label:before,dl.near_distance label:before{content:"\f337"}.field.iframe label:before,.list.iframe label:before,dl.iframe label:before{content:"\f0b2"}.finePre,span.label:after{margin-left:0.25em}.finePost{margin-right:0.25em}.quantity{text-align:right !important;white-space:nowrap}table{clear:both;border-spacing:2px}table th{font-weight:normal}table th a:link,table th a:visited{color:#003;padding:0 0.6em}table.list tbody tr:nth-child(odd){background-color:#def}table.list tbody tr:nth-child(even){background-color:#eee}table.list td{padding:0.2em;text-align:left}table.list td.kind,table.list td.updated_at{text-align:center}dl{width:40em;margin:1em auto}dl dt{clear:left;float:left;padding:0.2em 1em;min-width:50%;text-align:right}dl dd{padding:0.2em 1em;text-align:left}dl dd.quantity{padding-right:16em}dl dd h3{display:inline}dl dt+dd+dt+dd{border-top:1px solid #999}ul.counters{text-align:center}ul.counters li{display:inline}ul.counters li a:link,ul.counters li a:visited{color:white;padding:0.4em 1em;display:inline-block;box-shadow:0 0 2px black;border-radius:0.4em;background-color:#258}.edit_link:link,.delete_link:link{display:none}#map{height:22em;transition:none}#map *{max-width:initial}#map ul.feeds li a{display:inline-block}#map ul.feeds li .awesome-marker{display:inline-block !important;position:relative !important}#map .leaflet-top{margin-top:3em;text-align:left}#map section.leaflet-control-layers-list label .awesome-marker{height:auto !important;display:inline-block !important;position:relative !important}body.maps #map{height:60em}html.iframe,html.iframe body.maps,html.iframe body.maps main,html.iframe body.maps #map{width:100%;height:100%;margin:0}@media all and (min-width: 1024px){header.top,header.calendar-header+table.table-striped{width:calc(100% - 2em)}header.top{margin-top:1em}#banner{margin-left:3%}.links{margin-right:3%}}@media all and (max-width: 1024px){.links,a#banner{margin:0.6em auto}table,table.list,table.dates,table.list.dates{border-spacing:1px}table tbody th,table.list tbody th,table.dates tbody th,table.list.dates tbody th{overflow:hidden;max-width:3em}}@media all and (max-width: 900px){body main ul{margin-left:0}table.list.dates th,table.list.dates th a,table.list.dates td,table.list.dates td a{padding:0 !important;font-size:inherit}}@media all and (max-width: 34em){p{padding-left:0.4em;padding-right:0.4em}header.top nav{display:none}body.index table thead{display:none}body.index.events table tr td{clear:both;width:auto;height:auto;margin:1px;display:block;min-height:1em;border-width:1px !important}body.index.events table tr td.prev-month,body.index.events table tr td.next-month,body.index.events table tr td.current-month.past{display:none}body.index.events table tr td .event a{padding:0.4em 1em}body.index header:active+table tr td.current-month.past,body.index header:hover+table tr td.current-month.past{display:block}body.index.versions table tbody tr td,body.index.orgas table tbody tr td{width:auto;padding:0 0.2em;display:block}body.index.versions table tbody tr td:first-child,body.index.orgas table tbody tr td:first-child{float:left}body.index.versions table tbody td+td+td,body.index.orgas table tbody td+td+td{display:inline-block}body.index.versions table tbody td:first-child+td,body.index.orgas table tbody td:first-child+td{width:100%;display:block}dl dt{min-width:auto;text-align:left}dl dd,dl dd.quantity{padding-right:1em}#advises>*{display:none}#advises>:first-child:after{content:'... ↴'}#advises>:first-child,#advises:hover>*{display:block}aside{display:none}.links,a#banner{float:none;padding:0.4em 0}fieldset{padding-left:0;padding-right:0}.field>label{width:100%;display:block;text-align:left;margin-left:1%}.field.region label,.field.locality label,.field.repeat label,.field.active label{width:auto}.field input{width:100%;display:block}.field input#event_repeat,.field input#orga_active{width:auto}.field .radios{margin-left:auto}#map section input,#map section .awesome-marker{display:none !important}body.mce-content-body{padding:1px 0}.mce-btn-group .mce-btn{margin-left:0 !important}}h2.warning{color:red}.moderations table.list,.notes table.list{min-width:90%;margin-top:15px}.moderations table.list td,.notes table.list td{padding-top:0.5em;padding-bottom:0.5em}.moderations table.list td.empty,.notes table.list td.empty{background-color:white}.moderations table.list td.note,.notes table.list td.note{text-align:left}.moderations table.list td pre,.notes table.list td pre{width:70%;margin:auto;padding:5px;overflow:auto;text-align:left;background-color:#eee}.moderations table.list td em.author,.notes table.list td em.author{display:block;font-size:smaller;text-align:right;font-style:italic;margin-top:15px}.moderations table.list th.actions,.notes table.list th.actions{padding:0}.moderations table.list th.actions a,.notes table.list th.actions a{padding:0.2em;display:inline-block;font-weight:normal}.fa.fa-check,.field>label.fa-check:before,.field .field_with_errors>label.fa-check:before,.field th.fa-check:before,.field th a.fa-check:before,.list>label.fa-check:before,.list .field_with_errors>label.fa-check:before,.list th.fa-check:before,.list th a.fa-check:before,dl>label.fa-check:before,dl .field_with_errors>label.fa-check:before,dl th.fa-check:before,dl th a.fa-check:before,.fa.fa-thumbs-up,.field>label.fa-thumbs-up:before,.field .field_with_errors>label.fa-thumbs-up:before,.field th.fa-thumbs-up:before,.field th a.fa-thumbs-up:before,.list>label.fa-thumbs-up:before,.list .field_with_errors>label.fa-thumbs-up:before,.list th.fa-thumbs-up:before,.list th a.fa-thumbs-up:before,dl>label.fa-thumbs-up:before,dl .field_with_errors>label.fa-thumbs-up:before,dl th.fa-thumbs-up:before,dl th a.fa-thumbs-up:before{color:green}.fa.fa-thumbs-down,.field>label.fa-thumbs-down:before,.field .field_with_errors>label.fa-thumbs-down:before,.field th.fa-thumbs-down:before,.field th a.fa-thumbs-down:before,.list>label.fa-thumbs-down:before,.list .field_with_errors>label.fa-thumbs-down:before,.list th.fa-thumbs-down:before,.list th a.fa-thumbs-down:before,dl>label.fa-thumbs-down:before,dl .field_with_errors>label.fa-thumbs-down:before,dl th.fa-thumbs-down:before,dl th a.fa-thumbs-down:before{color:red}.notes form label:after{content:':'}img.favicon{max-height:2em;border-radius:3px;vertical-align:middle}form#orga_search{display:inline}form#orga_search label{display:none}form#orga_search em.fa{color:#258}form#orga_search input{width:14em;border:solid thin #258;padding:0;margin-left:-1.8em;margin-right:-1.6em;padding-left:1.5em;padding-right:1.2em;border-radius:0.4em}form#orga_search button.search{color:#258;border:none;padding:0;font-size:large;box-shadow:none;margin-top:-0.1em;margin-left:0;margin-right:1em;vertical-align:middle;background-color:transparent}form#orga_search button.search:hover em.fa{color:#2E97FF}form#orga_search button.search span.label{display:none}table tr.inactive{color:gray}body.pages main h3,body.pages main h4{text-align:left}.digest{float:right}ul.regions{width:100%;margin:0;padding:0;z-index:1500;display:flex;position:absolute;flex-wrap:wrap;font-size:normal;list-style:none;justify-content:space-around;background-image:linear-gradient(white, transparent)}ul.regions li.selected{border:solid 6px lightgray;display:inline-block}ul.regions li a{padding:0.3em;display:block;white-space:nowrap}ul.regions li:hover li,ul.regions li li.selected{display:block}ul.regions ul{padding:0;position:absolute;box-shadow:0 4px 4px gray}ul.regions ul li{border:solid thin #eee;display:none;background-color:white}ul.regions em.fa.fa-times{float:right;font-size:larger;margin-left:0.3em}html.no-js ul.regions li#near-me{display:none}html.iframe main>ul.regions{display:none}.field.region .radios{z-index:100;flex-grow:0;text-align:left;background-color:white}.field.region .radios .radios{display:inline;min-width:12em}.field.region .radios label{display:none;min-width:100%}.field.region:hover>.radios,.field.region label:hover+.radios,.field.region .radios:hover{z-index:1000;position:absolute;box-shadow:0 0 0.1em black}.field.region:hover>.radios>.region>label,.field.region:hover>.radios>label,.field.region label:hover+.radios>.region>label,.field.region label:hover+.radios>label,.field.region .radios:hover>.region>label,.field.region .radios:hover>label{display:inline-block}.field.region:hover>.radios .radios,.field.region label:hover+.radios .radios,.field.region .radios:hover .radios{position:absolute}.field.region:hover>.radios,.field.region>label:hover+.radios,.field.region>.radios:hover{margin-left:10em;transition-duration:unset}.field.region input:checked+label{display:inline-block}.flag-icon-ca-qc{background-image:url(/assets/regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png)}body.stats h3{text-align:center}table.list.dates th,table.list.dates td{padding:0 0.6em}table.list.dates .sparkline{padding:0}div.field,div.actions{margin-bottom:10px}#notice{color:green}#error_explanation{width:450px;border:2px solid red;padding-bottom:0;margin-bottom:20px;background-color:#f0f0f0}#error_explanation h2{text-align:left;font-weight:bold;padding:15px;font-size:12px;background-color:#c00;color:#fff}#error_explanation p,#error_explanation ul{padding:0 1em}#error_explanation p li,#error_explanation ul li{font-size:12px;list-style:square}table.list.dates{width:100%}table.list.dates thead th{height:3em;padding:0 !important;font-size:initial;transform:rotate(-45deg)}table.list.dates tbody th:first-child{font-size:large;text-align:right}table.list.dates tbody td{padding:0}table.list.dates tbody td a{padding:0 1em;display:block}table.list.dates tfoot td canvas{width:100% !important;background-color:white}p.tags a:after{color:black;content:','}p.tags a:last-child:after{content:''}.css1{font-size:0.8em}.css2{font-size:1.0em}.css3{font-size:1.4em}.css4{font-size:1.8em}div.tagsinput{height:auto !important;border:none;margin:0;padding:0;display:inline-block;min-height:auto !important;vertical-align:middle}div.tagsinput span.tag{margin:0;padding:0.75em;font-size:inherit;font-family:inherit}div.tagsinput #event_tag_list_addTag,div.tagsinput #tag_addTag{float:none;text-align:left}div.tagsinput #event_tag_list_addTag:first-child #event_tag_list_tag,div.tagsinput #event_tag_list_addTag:first-child #tag_tag,div.tagsinput #tag_addTag:first-child #event_tag_list_tag,div.tagsinput #tag_addTag:first-child #tag_tag{width:100% !important}div.tagsinput input,div.tagsinput .ui-autocomplete-input{width:8em !important;border:solid 0.25em transparent !important;padding:0.6em;font-size:inherit;margin-right:0;margin-bottom:0}div.tagsinput input:focus,div.tagsinput .ui-autocomplete-input:focus{border-color:#F0F8FF !important}ul.ui-autocomplete li{text-align:left;box-shadow:0 0 2px #a5d24a;background-color:white}ul.ui-autocomplete li .ui-state-active{margin:0;background-color:#F0F8FF}body.tags .event[class*='libre-en-fete-'] em.city:before{content:url(/assets/lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png);margin-right:0.5em}body.tags .info{float:right;margin-right:10%}body.versions td.changes{white-space:pre-wrap} diff --git a/public/assets/application-65fdd8dfb6b1ba2c6a29d524563f92ed848e4b025b086765dda5da1ab032082e.css.gz b/public/assets/application-65fdd8dfb6b1ba2c6a29d524563f92ed848e4b025b086765dda5da1ab032082e.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..e2f1b16bfef39cfe9f825151c231bb8f2d76cede GIT binary patch literal 48343 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