From 9436186ee454df34e1990bad9c314d923ec245e6 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Fri, 25 Jul 2014 00:56:15 +0000 Subject: [PATCH] TinyMCE wpView: - Fix opening the media modal on clicking Edit in Firefox. - Fix range errors when restoring the selection bookmark in IE11 after editing a view. See #28595. Built from https://develop.svn.wordpress.org/trunk@29298 git-svn-id: http://core.svn.wordpress.org/trunk@29080 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- .../js/tinymce/plugins/wpview/plugin.js | 32 ++++++------------ .../js/tinymce/plugins/wpview/plugin.min.js | 2 +- wp-includes/js/tinymce/wp-tinymce.js.gz | Bin 133321 -> 133311 bytes 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/wp-includes/js/tinymce/plugins/wpview/plugin.js b/wp-includes/js/tinymce/plugins/wpview/plugin.js index 2d5ce5c12e..f770ada825 100644 --- a/wp-includes/js/tinymce/plugins/wpview/plugin.js +++ b/wp-includes/js/tinymce/plugins/wpview/plugin.js @@ -115,7 +115,7 @@ tinymce.PluginManager.add( 'wpview', function( editor ) { dom = editor.dom; // Bail if node is already selected. - if ( viewNode === selected ) { + if ( ! viewNode || viewNode === selected ) { return; } @@ -295,34 +295,24 @@ tinymce.PluginManager.add( 'wpview', function( editor ) { if ( view ) { event.stopPropagation(); - // Hack to try and keep the block resize handles from appearing. They will show on mousedown and then be removed on mouseup. - if ( Env.ie <= 10 ) { - deselect(); + if ( event.type === 'mousedown' && ! event.metaKey && ! event.ctrlKey ) { + if ( editor.dom.hasClass( event.target, 'edit' ) ) { + wp.mce.views.edit( view ); + editor.focus(); + return false; + } else if ( editor.dom.hasClass( event.target, 'remove' ) ) { + removeView( view ); + return false; + } } select( view ); - if ( event.type === 'click' && ! event.metaKey && ! event.ctrlKey ) { - if ( editor.dom.hasClass( event.target, 'edit' ) ) { - wp.mce.views.edit( view ); - } else if ( editor.dom.hasClass( event.target, 'remove' ) ) { - removeView( view ); - } - } - // Returning false stops the ugly bars from appearing in IE11 and stops the view being selected as a range in FF. // Unfortunately, it also inhibits the dragging of views to a new location. return false; } else { - // Fix issue with deselecting a view in IE8. Without this hack, clicking content above the view wouldn't actually deselect it - // and the caret wouldn't be placed at the mouse location - if ( Env.ie && Env.ie <= 8 ) { - deselectEventType = 'mouseup'; - } else { - deselectEventType = 'mousedown'; - } - - if ( event.type === deselectEventType ) { + if ( event.type === 'mousedown' ) { deselect(); } } diff --git a/wp-includes/js/tinymce/plugins/wpview/plugin.min.js b/wp-includes/js/tinymce/plugins/wpview/plugin.min.js index 047a2f1f3d..25439cdac5 100644 --- a/wp-includes/js/tinymce/plugins/wpview/plugin.min.js +++ b/wp-includes/js/tinymce/plugins/wpview/plugin.min.js @@ -1 +1 @@ -tinymce.PluginManager.add("wpview",function(a){function b(a){return c(a,"wpview-wrap")}function c(a,b){for(;a&&a.parentNode;){if(a.className&&-1!==(" "+a.className+" ").indexOf(" "+b+" "))return a;a=a.parentNode}return!1}function d(c){return(c=b(c))?window.decodeURIComponent(a.dom.getAttrib(c,"data-wpview-text")||""):""}function e(c,d){return c=b(c),c?(a.dom.setAttrib(c,"data-wpview-text",window.encodeURIComponent(d||"")),!0):!1}function f(a){a.stopPropagation()}function g(b,c){var d=b?"before":"after",e=b?0:1;k(),a.selection.setCursorLocation(a.dom.select(".wpview-selection-"+d,c)[0],e),a.nodeChanged()}function h(b,c,d){var e=a.dom,f=e.create("p");s.ie&&s.ie<11||(f.innerHTML='
'),c?b.parentNode.insertBefore(f,b):e.insertAfter(f,b),k(),c&&d===t.ENTER?g(c,b):a.selection.setCursorLocation(f,0),a.nodeChanged()}function i(b){a.undoManager.transact(function(){h(b),a.dom.remove(b)})}function j(b){var c,e=a.dom;b!==m&&(a.getBody().focus(),k(),m=b,e.setAttrib(b,"data-mce-selected",1),c=e.create("div",{"class":"wpview-clipboard",contenteditable:"true"},d(b)),a.dom.select(".wpview-body",b)[0].appendChild(c),e.bind(c,"beforedeactivate focusin focusout",f),e.bind(m,"beforedeactivate focusin focusout",f),a.selection.select(c,!0),a.nodeChanged())}function k(){var b,c=a.dom;m&&(b=a.dom.select(".wpview-clipboard",m)[0],c.unbind(b),c.remove(b),c.unbind(m,"beforedeactivate focusin focusout click mouseup",f),c.setAttrib(m,"data-mce-selected",null)),m=null}function l(a){return a.replace(/]+data-wpview-text=\"([^"]+)"[^>]*>[\s\S]+?wpview-selection-after[^>]+>(?: |\u00a0)*<\/p><\/div>/g,"$1")}var m,n,o,p,q,r,s=tinymce.Env,t=tinymce.util.VK,u=tinymce.dom.TreeWalker,v=!1,w=!0,x=function(){return!1};return"undefined"!=typeof wp&&wp.mce?(a.on("BeforeAddUndo",function(a){a.lastLevel&&l(a.level.content)===l(a.lastLevel.content)&&a.preventDefault()}),a.on("BeforeSetContent",function(b){var c;b.content&&(m&&i(m),b.initial||wp.mce.views.unbind(a),c=a.selection.getNode(),(!b.content.match(/^\s*(https?:\/\/[^\s"]+)\s*$/i)||"P"===c.nodeName&&c.parentNode===a.getBody()&&a.dom.isEmpty(c))&&(b.content=wp.mce.views.toViews(b.content)))}),a.on("SetContent",function(){wp.mce.views.render()}),a.on("click",function(c){var d,e=c.clientX,f=c.clientY,h=a.getBody(),i=h.getBoundingClientRect(),j=h.firstChild,k=j.getBoundingClientRect(),l=h.lastChild,m=l.getBoundingClientRect();fm.bottom&&(d=b(l))?(g(!1,d),c.preventDefault()):tinymce.each(a.dom.select(".wpview-wrap"),function(a){var b=a.getBoundingClientRect();return f>=b.top&&f<=b.bottom?void(ei.right&&(g(!1,a),c.preventDefault())):void 0})}),a.on("init",function(){var c=a.selection;a.on("BeforeSetContent",function(){var d,e,f=b(c.getNode());f&&(!f.nextSibling||b(f.nextSibling)?(e=a.getDoc().createTextNode(""),a.dom.insertAfter(e,f)):(d=new u(f.nextSibling,f.nextSibling),e=d.next()),c.select(e),c.collapse(!0))}),a.dom.bind(a.getBody().parentNode,"mousedown mouseup click",function(c){var d,e=b(c.target);return w=!1,e?(c.stopPropagation(),s.ie<=10&&k(),j(e),"click"!==c.type||c.metaKey||c.ctrlKey||(a.dom.hasClass(c.target,"edit")?wp.mce.views.edit(e):a.dom.hasClass(c.target,"remove")&&i(e)),!1):(d=s.ie&&s.ie<=8?"mouseup":"mousedown",void(c.type===d&&k()))})}),a.on("PreProcess",function(b){tinymce.each(a.dom.select("div[data-wpview-text]",b.node),function(a){a.textContent=a.innerText=" "})}),a.on("PostProcess",function(a){a.content&&(a.content=a.content.replace(/
]*?data-wpview-text="([^"]*)"[^>]*>[\s\S]*?<\/div>/g,function(a,b){return b?"

"+window.decodeURIComponent(b)+"

":""}))}),a.on("keydown",function(c){var d,e,f,l,n,p,q,r=c.keyCode,s=a.dom,u=a.selection;if(m){if((c.metaKey||c.ctrlKey)&&r!==t.BACKSPACE&&86!==r||r>=112&&123>=r)return void((c.metaKey||c.ctrlKey)&&88===r&&(v=m));if(e=b(u.getNode()),e!==m)return void k();r===t.LEFT?(g(!0,e),c.preventDefault()):r===t.UP?(e.previousSibling?b(e.previousSibling)?g(!0,e.previousSibling):(k(),u.select(e.previousSibling,!0),u.collapse()):g(!0,e),c.preventDefault()):r===t.RIGHT?(g(!1,e),c.preventDefault()):r===t.DOWN?(e.nextSibling?b(e.nextSibling)?g(!1,e.nextSibling):(k(),u.setCursorLocation(e.nextSibling,0)):g(!1,e),c.preventDefault()):(r>47||t.SPACEBAR||r===t.ENTER||r===t.DELETE||r===t.BACKSPACE)&&144!==r&&145!==r&&(i(m),(r===t.ENTER||r===t.DELETE||r===t.BACKSPACE)&&c.preventDefault())}else{if(c.metaKey||c.ctrlKey||r>=112&&123>=r)return;if(d=u.getNode(),o=d,e=b(d),u.isCollapsed()||(n=u.getRng(),(e=b(n.endContainer))?(p=n.cloneRange(),u.select(e.previousSibling,!0),u.collapse(),q=u.getRng(),p.setEnd(q.endContainer,q.endOffset),u.setRng(p)):(e=b(n.startContainer))&&(p=n.cloneRange(),p.setStart(e.nextSibling,0),u.setRng(p))),!e)return void(c.keyCode===t.BACKSPACE&&(a.dom.isEmpty(d)?(e=b(d.previousSibling))&&(g(!1,e),a.dom.remove(d),c.preventDefault()):(n=u.getRng())&&0===n.startOffset&&0===n.endOffset&&(e=b(d.previousSibling))&&(g(!1,e),c.preventDefault())));if(!(f=s.hasClass(e,"wpview-selection-before"))&&!(l=s.hasClass(e,"wpview-selection-after")))return;l&&r===t.UP||f&&r===t.BACKSPACE?(e.previousSibling?b(e.previousSibling)?g(!1,e.previousSibling):s.isEmpty(e.previousSibling)&&r===t.BACKSPACE?s.remove(e.previousSibling):(u.select(e.previousSibling,!0),u.collapse()):g(!0,e),c.preventDefault()):!l||r!==t.DOWN&&r!==t.RIGHT?!f||r!==t.UP&&r!==t.LEFT?f&&r===t.DOWN?(e.nextSibling?b(e.nextSibling)?g(!0,e.nextSibling):u.setCursorLocation(e.nextSibling,0):g(!1,e),c.preventDefault()):l&&r===t.LEFT||f&&r===t.RIGHT?(j(e),c.preventDefault()):l&&r===t.BACKSPACE?(i(e),c.preventDefault()):l?h(e):f&&h(e,!0,r):(e.previousSibling&&(b(e.previousSibling)?g(r===t.UP,e.previousSibling):(u.select(e.previousSibling,!0),u.collapse())),c.preventDefault()):(e.nextSibling&&(b(e.nextSibling)?g(r===t.RIGHT,e.nextSibling):u.setCursorLocation(e.nextSibling,0)),c.preventDefault()),r===t.ENTER&&c.preventDefault()}}),a.on("keyup",function(){v&&(i(v),v=!1)}),a.on("focus",function(){var c;q=!0,a.dom.addClass(a.getBody(),"has-focus"),w&&(c=b(a.getBody().firstChild))&&g(!0,c),w=!1}),a.on("blur",function(){q=!1,a.dom.removeClass(a.getBody(),"has-focus")}),a.on("NodeChange",function(d){var e=a.dom,f=a.dom.select(".wpview-wrap"),h=d.element.className,i=b(d.element),j=o;if(o=!1,clearInterval(n),tinymce.each(f,function(a){a.className&&(a.className=a.className.replace(/ ?\bwpview-(?:selection-before|selection-after|cursor-hide)\b/g,""))}),q)if(i)if("wpview-selection-before"!==h&&"wpview-selection-after"!==h||!a.selection.isCollapsed())c(d.element,"wpview-clipboard")||p||(k(),p++,g(!0,i));else{if(p=0,k(),j===i.previousSibling)return void g(!0,i);if(j===i.nextSibling)return void g(!1,i);e.addClass(i,h),n=setInterval(function(){e.hasClass(i,"wpview-cursor-hide")?e.removeClass(i,"wpview-cursor-hide"):e.addClass(i,"wpview-cursor-hide")},500)}else k()}),a.on("BeforeExecCommand",function(){var c,d=a.selection.getNode();d&&("wpview-selection-before"===d.className||"wpview-selection-after"===d.className)&&(c=b(d))&&(h(c),r=c)}),a.on("ExecCommand",function(){var b,c;m&&(b=m,k(),j(b)),r&&(c=r.nextSibling,c&&"P"===c.nodeName&&a.dom.isEmpty(c)&&(a.dom.remove(c),g(!1,r)),r=!1)}),a.on("ResolveName",function(c){a.dom.hasClass(c.target,"wpview-wrap")?(c.name=a.dom.getAttrib(c.target,"data-wpview-type")||"wpview",c.stopPropagation()):b(c.target)&&(c.preventDefault(),c.stopPropagation())}),{getViewText:d,setViewText:e,getView:b}):{getViewText:x,setViewText:x,getView:x}}); \ No newline at end of file +tinymce.PluginManager.add("wpview",function(a){function b(a){return c(a,"wpview-wrap")}function c(a,b){for(;a&&a.parentNode;){if(a.className&&-1!==(" "+a.className+" ").indexOf(" "+b+" "))return a;a=a.parentNode}return!1}function d(c){return(c=b(c))?window.decodeURIComponent(a.dom.getAttrib(c,"data-wpview-text")||""):""}function e(c,d){return c=b(c),c?(a.dom.setAttrib(c,"data-wpview-text",window.encodeURIComponent(d||"")),!0):!1}function f(a){a.stopPropagation()}function g(b,c){var d=b?"before":"after",e=b?0:1;k(),a.selection.setCursorLocation(a.dom.select(".wpview-selection-"+d,c)[0],e),a.nodeChanged()}function h(b,c,d){var e=a.dom,f=e.create("p");s.ie&&s.ie<11||(f.innerHTML='
'),c?b.parentNode.insertBefore(f,b):e.insertAfter(f,b),k(),c&&d===t.ENTER?g(c,b):a.selection.setCursorLocation(f,0),a.nodeChanged()}function i(b){a.undoManager.transact(function(){h(b),a.dom.remove(b)})}function j(b){var c,e=a.dom;b&&b!==m&&(a.getBody().focus(),k(),m=b,e.setAttrib(b,"data-mce-selected",1),c=e.create("div",{"class":"wpview-clipboard",contenteditable:"true"},d(b)),a.dom.select(".wpview-body",b)[0].appendChild(c),e.bind(c,"beforedeactivate focusin focusout",f),e.bind(m,"beforedeactivate focusin focusout",f),a.selection.select(c,!0),a.nodeChanged())}function k(){var b,c=a.dom;m&&(b=a.dom.select(".wpview-clipboard",m)[0],c.unbind(b),c.remove(b),c.unbind(m,"beforedeactivate focusin focusout click mouseup",f),c.setAttrib(m,"data-mce-selected",null)),m=null}function l(a){return a.replace(/]+data-wpview-text=\"([^"]+)"[^>]*>[\s\S]+?wpview-selection-after[^>]+>(?: |\u00a0)*<\/p><\/div>/g,"$1")}var m,n,o,p,q,r,s=tinymce.Env,t=tinymce.util.VK,u=tinymce.dom.TreeWalker,v=!1,w=!0,x=function(){return!1};return"undefined"!=typeof wp&&wp.mce?(a.on("BeforeAddUndo",function(a){a.lastLevel&&l(a.level.content)===l(a.lastLevel.content)&&a.preventDefault()}),a.on("BeforeSetContent",function(b){var c;b.content&&(m&&i(m),b.initial||wp.mce.views.unbind(a),c=a.selection.getNode(),(!b.content.match(/^\s*(https?:\/\/[^\s"]+)\s*$/i)||"P"===c.nodeName&&c.parentNode===a.getBody()&&a.dom.isEmpty(c))&&(b.content=wp.mce.views.toViews(b.content)))}),a.on("SetContent",function(){wp.mce.views.render()}),a.on("click",function(c){var d,e=c.clientX,f=c.clientY,h=a.getBody(),i=h.getBoundingClientRect(),j=h.firstChild,k=j.getBoundingClientRect(),l=h.lastChild,m=l.getBoundingClientRect();fm.bottom&&(d=b(l))?(g(!1,d),c.preventDefault()):tinymce.each(a.dom.select(".wpview-wrap"),function(a){var b=a.getBoundingClientRect();return f>=b.top&&f<=b.bottom?void(ei.right&&(g(!1,a),c.preventDefault())):void 0})}),a.on("init",function(){var c=a.selection;a.on("BeforeSetContent",function(){var d,e,f=b(c.getNode());f&&(!f.nextSibling||b(f.nextSibling)?(e=a.getDoc().createTextNode(""),a.dom.insertAfter(e,f)):(d=new u(f.nextSibling,f.nextSibling),e=d.next()),c.select(e),c.collapse(!0))}),a.dom.bind(a.getBody().parentNode,"mousedown mouseup click",function(c){var d=b(c.target);if(w=!1,d){if(c.stopPropagation(),"mousedown"===c.type&&!c.metaKey&&!c.ctrlKey){if(a.dom.hasClass(c.target,"edit"))return wp.mce.views.edit(d),a.focus(),!1;if(a.dom.hasClass(c.target,"remove"))return i(d),!1}return j(d),!1}"mousedown"===c.type&&k()})}),a.on("PreProcess",function(b){tinymce.each(a.dom.select("div[data-wpview-text]",b.node),function(a){a.textContent=a.innerText=" "})}),a.on("PostProcess",function(a){a.content&&(a.content=a.content.replace(/
]*?data-wpview-text="([^"]*)"[^>]*>[\s\S]*?<\/div>/g,function(a,b){return b?"

"+window.decodeURIComponent(b)+"

":""}))}),a.on("keydown",function(c){var d,e,f,l,n,p,q,r=c.keyCode,s=a.dom,u=a.selection;if(m){if((c.metaKey||c.ctrlKey)&&r!==t.BACKSPACE&&86!==r||r>=112&&123>=r)return void((c.metaKey||c.ctrlKey)&&88===r&&(v=m));if(e=b(u.getNode()),e!==m)return void k();r===t.LEFT?(g(!0,e),c.preventDefault()):r===t.UP?(e.previousSibling?b(e.previousSibling)?g(!0,e.previousSibling):(k(),u.select(e.previousSibling,!0),u.collapse()):g(!0,e),c.preventDefault()):r===t.RIGHT?(g(!1,e),c.preventDefault()):r===t.DOWN?(e.nextSibling?b(e.nextSibling)?g(!1,e.nextSibling):(k(),u.setCursorLocation(e.nextSibling,0)):g(!1,e),c.preventDefault()):(r>47||t.SPACEBAR||r===t.ENTER||r===t.DELETE||r===t.BACKSPACE)&&144!==r&&145!==r&&(i(m),(r===t.ENTER||r===t.DELETE||r===t.BACKSPACE)&&c.preventDefault())}else{if(c.metaKey||c.ctrlKey||r>=112&&123>=r)return;if(d=u.getNode(),o=d,e=b(d),u.isCollapsed()||(n=u.getRng(),(e=b(n.endContainer))?(p=n.cloneRange(),u.select(e.previousSibling,!0),u.collapse(),q=u.getRng(),p.setEnd(q.endContainer,q.endOffset),u.setRng(p)):(e=b(n.startContainer))&&(p=n.cloneRange(),p.setStart(e.nextSibling,0),u.setRng(p))),!e)return void(c.keyCode===t.BACKSPACE&&(a.dom.isEmpty(d)?(e=b(d.previousSibling))&&(g(!1,e),a.dom.remove(d),c.preventDefault()):(n=u.getRng())&&0===n.startOffset&&0===n.endOffset&&(e=b(d.previousSibling))&&(g(!1,e),c.preventDefault())));if(!(f=s.hasClass(e,"wpview-selection-before"))&&!(l=s.hasClass(e,"wpview-selection-after")))return;l&&r===t.UP||f&&r===t.BACKSPACE?(e.previousSibling?b(e.previousSibling)?g(!1,e.previousSibling):s.isEmpty(e.previousSibling)&&r===t.BACKSPACE?s.remove(e.previousSibling):(u.select(e.previousSibling,!0),u.collapse()):g(!0,e),c.preventDefault()):!l||r!==t.DOWN&&r!==t.RIGHT?!f||r!==t.UP&&r!==t.LEFT?f&&r===t.DOWN?(e.nextSibling?b(e.nextSibling)?g(!0,e.nextSibling):u.setCursorLocation(e.nextSibling,0):g(!1,e),c.preventDefault()):l&&r===t.LEFT||f&&r===t.RIGHT?(j(e),c.preventDefault()):l&&r===t.BACKSPACE?(i(e),c.preventDefault()):l?h(e):f&&h(e,!0,r):(e.previousSibling&&(b(e.previousSibling)?g(r===t.UP,e.previousSibling):(u.select(e.previousSibling,!0),u.collapse())),c.preventDefault()):(e.nextSibling&&(b(e.nextSibling)?g(r===t.RIGHT,e.nextSibling):u.setCursorLocation(e.nextSibling,0)),c.preventDefault()),r===t.ENTER&&c.preventDefault()}}),a.on("keyup",function(){v&&(i(v),v=!1)}),a.on("focus",function(){var c;q=!0,a.dom.addClass(a.getBody(),"has-focus"),w&&(c=b(a.getBody().firstChild))&&g(!0,c),w=!1}),a.on("blur",function(){q=!1,a.dom.removeClass(a.getBody(),"has-focus")}),a.on("NodeChange",function(d){var e=a.dom,f=a.dom.select(".wpview-wrap"),h=d.element.className,i=b(d.element),j=o;if(o=!1,clearInterval(n),tinymce.each(f,function(a){a.className&&(a.className=a.className.replace(/ ?\bwpview-(?:selection-before|selection-after|cursor-hide)\b/g,""))}),q)if(i)if("wpview-selection-before"!==h&&"wpview-selection-after"!==h||!a.selection.isCollapsed())c(d.element,"wpview-clipboard")||p||(k(),p++,g(!0,i));else{if(p=0,k(),j===i.previousSibling)return void g(!0,i);if(j===i.nextSibling)return void g(!1,i);e.addClass(i,h),n=setInterval(function(){e.hasClass(i,"wpview-cursor-hide")?e.removeClass(i,"wpview-cursor-hide"):e.addClass(i,"wpview-cursor-hide")},500)}else k()}),a.on("BeforeExecCommand",function(){var c,d=a.selection.getNode();d&&("wpview-selection-before"===d.className||"wpview-selection-after"===d.className)&&(c=b(d))&&(h(c),r=c)}),a.on("ExecCommand",function(){var b,c;m&&(b=m,k(),j(b)),r&&(c=r.nextSibling,c&&"P"===c.nodeName&&a.dom.isEmpty(c)&&(a.dom.remove(c),g(!1,r)),r=!1)}),a.on("ResolveName",function(c){a.dom.hasClass(c.target,"wpview-wrap")?(c.name=a.dom.getAttrib(c.target,"data-wpview-type")||"wpview",c.stopPropagation()):b(c.target)&&(c.preventDefault(),c.stopPropagation())}),{getViewText:d,setViewText:e,getView:b}):{getViewText:x,setViewText:x,getView:x}}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/wp-tinymce.js.gz b/wp-includes/js/tinymce/wp-tinymce.js.gz index 8f23e15bf820eea3ba3fa4f1a042fc5c51c7e36b..d073d9180e85e427a1e41eee72741c41b6f09599 100644 GIT binary patch delta 1832 zcmV+@2iN$?kqEz$2!MnEv;wmMe?dxz{jrdW4g2Ppy0Zu-R;UEiURj4ACX4uFm$8hP zU65>76fmY~YwlFVI&ro>yTr9G4g}3ZEeR|N%i^4Lz+_MW`+!$uoX{x@ZRt>7(k1`R zNgt~6FYcSaP4n!xcqw?M?YIu(#)G{eZA*LKjG9T=~MD=KFb)p>#yTJk=7Xa)U zzl2P0iJ`K*g{@#CRsA-~U#k=x`_Dy^{2pePN#TD%z2p_@MZX5Etl-^#Sy3`_@1y7s z%jz8}_c0uHP0#NExu8Uue@DHblXM1gI~9q8eNlyYH( zp1BY(Ye(Cn!f_^QX^IzNeOP zJcs0Y+Cvj@(Vwure|5=8+AIG5)~;r!Z6FB03eF+2g+Vb*Ta?H|tx8*@3Qz>j7za_L*@LKu*~!iIhdekTQUX@ee`x4KkYDYO0rfFNlj4e3 z81w4Ik{#j$NMx83P;t(@?CL|eQ~!8-U9FFjy}GTES|A$+wR}o(bs-4A6)Z{33L%HV zw}V{Ytm9{O;jUzRX7RH~IBBQT0zBL2Xxo#al9gN&B;8GQ={say8{Fpt_DB`)RMFr0 zdluW?o7E<(eS6i=ynft-F)ZLlO2TcVjo-f-FFVWVb+V;@j!xE5#2-etszFt}g{^aolh-_gU1Fl{wElA;|qEG=f8b zg73=m5z+MaZuQT;e7#bq%|^mc7vIm}7f>hTjF++J5XXi-v%PkZOpH&qWOr+O5f&%y z_htF>e-LN<GZ+Zzw*Yxzp3WdX>TJ{po#%B6 zC0@`5<}g>M;@DZRMq(^pU~F+Up+G-Jz$11Ef5GjfQ(}mnUd<(RR}eb$&*~JMe8je| z;TdUV>xW!69pVuVsROI~C(`oBsG^S7NLg&yBbhuw{YW_q`jHtHiGkkIv`-X5wiATo zbV-q?4M!zYb{(iM2&dbqrST`y=Ve#uIGPugKXU3!#|Y5eHSzzYO$hivM*AYc?PoG1ZOA(34U5n>p|{9Frr# z$MP9?dd2f?ukl=2M`*&Zq7h2Cu4>a=f7D^WwEKZgP{L&1a4X$^cyD z!E}XaY$5ihkP$%2n(yz&xCAB&A`W87JZ+)D z_zrXbRQD+rYSmX^>?JYXP8Grg2uV8I3AiE7QnBOAWU;{V=AfF`pI`?RzyWM6)=+g= zi(V4xk|O<4?!#TPnQ2h9-whAke-dgZ7hwju4VqUs&74jJ&<%0hh6rgdXxhz99nIog z8Lc1W%%X9=z#0q2;BxIfn>*o)tS!%oP$q~^j1ycSC!}1=55vfvyhGGIkL>;)#3+*6 zv2yKJ^|6yWtkB!>_Dx?;dMp)DhZr_wD(R~GqwiY)6;@CKP|G{Rcu7j58d$>+vX`jC W2%j0@vmty2c<~?W?Vim?83q7yLY0^R delta 1842 zcmV-22hI4ukqF6=2!MnEv;wmMe_?Yhq*lYeHm1HTf{7I;!8BIZ@rTJAKG|g{Bc>L_ z+7(5MX&Rb4Rk2Q-tD#-*F=bcELUMG(nwXmit^Vg1;_q#ktDx|*=17rUr;G|g-X${K`S44w^LS>jNJQZ`NOh$ zhnjtigl(Koo z4;Zi;g#VY6iM)f*&TekTV7}z|wyjw+$cih0b1s5xSI*(|`6Z0PitW)!7GMI3Y{|R?=$8e?`zd*B=ArV}$m^m04kI zR?nvF2yZ|Z!-6o13&X{(Ic__3j@M_^aw*x{AS#;2riS_nV3y%z;VPCfDrG5f0`HMP z$l53b5o0R=+Jd)~I%hBR>3e7y|1>F%o9r?}+=YEFX?#eY8v{(1$cw?wCc0yKoGIH` zLQn7oDHa+Ff2JV(mWUF=ys2$+D?5xSVX&~;i|P+>{c*F#7*RJ;5_2PM{r=T@*~#Fu zYl;xy8{>kWIV--3azz(>JeBr_9+T#AVP)Q6|BiGBF-m20&$tZFrYX}9P(NVPNb-o5 zVuP?Ugq`ge9|XnDGtt#<_WoEr(z>^qy|DLuWGZ zvcsF(f7pt!I_bTy>z{`>;vYW@*kJ2DoxG3)D1Jo~J#>4$0LQu8d&~b5qV^TOsuoYn zkpGC3DlaH{XJj9fC6GB5Kc*b3M?6deF>8W12QNB+6Abk931^3}-C|%cWLj_qdc!=O zL6Fp0Ie@*->n2LPpf8xiSe>%vXJNb~#>)!~e=sfv6w1$$^@vSEhC68#>td%>bI#vo z1)cFX>SSLsPMCvVWUjBby31_kkvycgsx)h(O| zz2((Dl?Y)c2*+%3BlOdjvo#aO9jGq|r`t+%3s59&XnnTVkyupMV|k&v@-_I>_2JV} zf4j>#Ke}&QDt8(W()~A-3)rrTuNDAca^>Kt7mVd^*O&4agmcw5yMkWF2EASIZX?{O zv4RGX(Gqxl7jAow4C|z^aCQqC7^|H9WgQFgnA{$REuViH$k`PC>ku{wpwVNZ8CKVm zUiq6b@V+=EOM(yb4F>hfOuD_sb!8o)ebSp69G*6;4lF{;15Uf6OX)U zng(@JbEHuQ;4cp*l&*SrK3!GDs}~!nU!M1>iq4g3ja27YdN=M%Z`n3T2K?6X8z%^w z@;HWV&L05}AEBAWv>aAv;3=>kPQ#f+2p`)@GjXscSLx8l#NW$qa?!dlOKgy>e=QuX z3!F&@kQpkv$u;qC5dj$+{%OQ(o^7THpyAiL4jRujqe6F1?AmT204LKCK+Br%@5eX= zCW0ppYRNq9pyBuq69CzAN|jpiDD*uqOvTA6*oA^5r|krM5oalrI5k*Cba}N-k$hqt;0lqDqL`nHQ8>wm zsE;0zelR%9xHwv8Z?>Zy-@~%qJ08KwGfI!SB1(vPgXfdBeIR{L0bf|~Bn@C&o{Zup gxhiAHMaW;G#3=Y|6ns_%pMhii2RqtnXG|Fe0Hp77#sB~S