From d0d3c40f13c912f1063539ccbde723466530c6b2 Mon Sep 17 00:00:00 2001 From: echarp <manu@echarp.org> Date: Tue, 21 May 2019 23:09:35 +0200 Subject: [PATCH] The tag field in the filter page was incohently labelled --- app/assets/stylesheets/form.sass | 2 + app/views/pages/filter.haml | 2 +- config/locales/views/nl.yml | 2 +- ...fest-43974a34a148e9d2067b8d73ea02a530.json | 2 +- ...4ac512e8e9403f71d7379bce24cf09d1d30d045.js | 52781 ++++++++++++++++ ...512e8e9403f71d7379bce24cf09d1d30d045.js.gz | Bin 0 -> 454170 bytes ...0a084700da079ea05453cd44d3a26d6899e7da.css | 31 + ...84700da079ea05453cd44d3a26d6899e7da.css.gz | Bin 0 -> 48132 bytes 8 files changed, 52817 insertions(+), 3 deletions(-) create mode 100644 public/assets/application-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js create mode 100644 public/assets/application-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js.gz create mode 100644 public/assets/application-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css create mode 100644 public/assets/application-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css.gz diff --git a/app/assets/stylesheets/form.sass b/app/assets/stylesheets/form.sass index cd6c24406..82415c0f1 100644 --- a/app/assets/stylesheets/form.sass +++ b/app/assets/stylesheets/form.sass @@ -156,6 +156,8 @@ input, textarea, select, a.button, .actions > button, div.tagsinput, .ui-autocom font-size: 24px font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif line-height: 0 + &.tag label:before, th.tag a:before + content: fa-content($fa-var-tag) &.tags label:before, th.tags a:before content: fa-content($fa-var-tags) &.active label:before diff --git a/app/views/pages/filter.haml b/app/views/pages/filter.haml index e9cb97775..829b892eb 100644 --- a/app/views/pages/filter.haml +++ b/app/views/pages/filter.haml @@ -27,7 +27,7 @@ params[:region]), include_blank: true - .field.tags + .field.tag = label_tag :tag, t('.tag'), for: 'tag_tag' = text_field_tag :tag, params[:tag] diff --git a/config/locales/views/nl.yml b/config/locales/views/nl.yml index 52d262916..46680666d 100644 --- a/config/locales/views/nl.yml +++ b/config/locales/views/nl.yml @@ -511,7 +511,7 @@ volledigere beschrijving." near_distance: Afstand near_distance_helper: van de locatie region: Regio - tags: Tags (Trefwoorden) + tag: Tag (Trefwoorden) iframe: Kaderloze iframe_helper: kop- en voettekst verwijderen, bedoelt voor integratie in een iframe diff --git a/public/assets/.sprockets-manifest-43974a34a148e9d2067b8d73ea02a530.json b/public/assets/.sprockets-manifest-43974a34a148e9d2067b8d73ea02a530.json index 2e1a0d608..85b71f482 100644 --- a/public/assets/.sprockets-manifest-43974a34a148e9d2067b8d73ea02a530.json +++ b/public/assets/.sprockets-manifest-43974a34a148e9d2067b8d73ea02a530.json @@ -1 +1 @@ -{"files":{"active_admin-877e761ceb08240deef11c0e8cf64c89f98cc542a77364f1402ff4afd6449509.css":{"logical_path":"active_admin.css","mtime":"2019-05-14T13:12:35+02:00","size":105676,"digest":"877e761ceb08240deef11c0e8cf64c89f98cc542a77364f1402ff4afd6449509","integrity":"sha256-h352HOsIJA3u8RwOjPZMifmMxUKnc2TxQC/0r9ZElQk="},"active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif":{"logical_path":"active_admin/nested_menu_arrow.gif","mtime":"2019-05-14T13:10:54+02:00","size":70,"digest":"15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442","integrity":"sha256-FQhNk8ZcGWTXB3cA6nSL0tcM+i1MGXB8WKnGTiMt1EI="},"active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif":{"logical_path":"active_admin/nested_menu_arrow_dark.gif","mtime":"2019-05-14T13:10:54+02:00","size":70,"digest":"7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034","integrity":"sha256-fEO44KX4gjh19JoJPJ16azdPiFtvnMJIrpzX5umykDQ="},"active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png":{"logical_path":"active_admin/orderable.png","mtime":"2019-05-14T13:10:54+02:00","size":220,"digest":"29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617","integrity":"sha256-KTdNu1WwAS14o3xhTVc7s0dPB3mEm0eKFH0PGEXKZhc="},"active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css":{"logical_path":"active_admin/print.css","mtime":"2019-05-14T13:10:54+02:00","size":7086,"digest":"cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6","integrity":"sha256-z5nL8n+5IGWp6s0o5vrUj6csra9uCRh5Do01sR2PmfY="},"active_admin-71f5376a62a9260af4c6b4c0930c35cdf18e4e35221289beb36ba77fac8bb030.js":{"logical_path":"active_admin.js","mtime":"2019-05-21T22:19:54+02:00","size":961773,"digest":"71f5376a62a9260af4c6b4c0930c35cdf18e4e35221289beb36ba77fac8bb030","integrity":"sha256-cfU3amKpJgr0xrTAkww1zfGOTjUiEom+s2unf6yLsDA="},"tinymce-1103c4904fc1df026a84e5ce890ce02b9a9fda036966b0fb34ad900ccb83c712.js":{"logical_path":"tinymce.js","mtime":"2019-05-14T13:13:17+02:00","size":1043848,"digest":"1103c4904fc1df026a84e5ce890ce02b9a9fda036966b0fb34ad900ccb83c712","integrity":"sha256-EQPEkE/B3wJqhOXOiQzgK5qf2gNpZrD7NK2QDMuDxxI="},"modernizr-654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97.js":{"logical_path":"modernizr.js","mtime":"2019-05-14T13:12:49+02:00","size":51365,"digest":"654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97","integrity":"sha256-ZUIi3r6AGLEvGZPO3f8w3BY6fVAI15hpw5nW0WcyH5c="},"font-awesome/fa-brands-400-bd4e21d8e25a889e979ac2367770c36863443b8e0f99feeaee09a62625b9cb13.eot":{"logical_path":"font-awesome/fa-brands-400.eot","mtime":"2019-05-14T13:12:35+02:00","size":129916,"digest":"bd4e21d8e25a889e979ac2367770c36863443b8e0f99feeaee09a62625b9cb13","integrity":"sha256-vU4h2OJaiJ6XmsI2d3DDaGNEO44Pmf7q7gmmJiW5yxM="},"font-awesome/fa-regular-400-4aa44a07b71f47067872c8f177f31babc0c609af2b384511353c89b1ca804458.eot":{"logical_path":"font-awesome/fa-regular-400.eot","mtime":"2019-05-14T13:12:35+02:00","size":34388,"digest":"4aa44a07b71f47067872c8f177f31babc0c609af2b384511353c89b1ca804458","integrity":"sha256-SqRKB7cfRwZ4csjxd/Mbq8DGCa8rOEURNTyJscqARFg="},"font-awesome/fa-solid-900-e153efe317e731e59eb8d6d1a568a811b8f7dd5df3823c327103be8e4a0047e4.eot":{"logical_path":"font-awesome/fa-solid-900.eot","mtime":"2019-05-14T13:12:35+02:00","size":186728,"digest":"e153efe317e731e59eb8d6d1a568a811b8f7dd5df3823c327103be8e4a0047e4","integrity":"sha256-4VPv4xfnMeWeuNbRpWioEbj33V3zgjwycQO+jkoAR+Q="},"font-awesome/fa-brands-400-e281f2a25598bf8b40a77f3c5228b51900788224e91dade3f4a0f8c383505f43.svg":{"logical_path":"font-awesome/fa-brands-400.svg","mtime":"2019-05-14T13:12:35+02:00","size":694583,"digest":"e281f2a25598bf8b40a77f3c5228b51900788224e91dade3f4a0f8c383505f43","integrity":"sha256-4oHyolWYv4tAp388Uii1GQB4giTpHa3j9KD4w4NQX0M="},"font-awesome/fa-regular-400-934530d864b6f03fad8e87b66daf829d17f0e7afbd74baead32a6a4157d584c2.svg":{"logical_path":"font-awesome/fa-regular-400.svg","mtime":"2019-05-14T13:12:35+02:00","size":144451,"digest":"934530d864b6f03fad8e87b66daf829d17f0e7afbd74baead32a6a4157d584c2","integrity":"sha256-k0Uw2GS28D+tjoe2ba+CnRfw56+9dLrq0ypqQVfVhMI="},"font-awesome/fa-solid-900-d5b212510d72b66bdb7feb22c611456621c3dd1a2e88cc42983d7d4c9ab79563.svg":{"logical_path":"font-awesome/fa-solid-900.svg","mtime":"2019-05-14T13:12:35+02:00","size":816926,"digest":"d5b212510d72b66bdb7feb22c611456621c3dd1a2e88cc42983d7d4c9ab79563","integrity":"sha256-1bISUQ1ytmvbf+sixhFFZiHD3RouiMxCmD19TJq3lWM="},"font-awesome/fa-brands-400-70726f98e0d98f543d5fde05a3a74bb131c5c67f5fbffcf4d41b7f68bca2b56b.ttf":{"logical_path":"font-awesome/fa-brands-400.ttf","mtime":"2019-05-14T13:12:35+02:00","size":129612,"digest":"70726f98e0d98f543d5fde05a3a74bb131c5c67f5fbffcf4d41b7f68bca2b56b","integrity":"sha256-cHJvmODZj1Q9X94Fo6dLsTHFxn9fv/z01Bt/aLyitWs="},"font-awesome/fa-regular-400-112491dccca97bf50ec7adff8d430dcba6d0b71e0a0b20386f814f3bf5bb94b5.ttf":{"logical_path":"font-awesome/fa-regular-400.ttf","mtime":"2019-05-14T13:12:35+02:00","size":34092,"digest":"112491dccca97bf50ec7adff8d430dcba6d0b71e0a0b20386f814f3bf5bb94b5","integrity":"sha256-ESSR3Mype/UOx63/jUMNy6bQtx4KCyA4b4FPO/W7lLU="},"font-awesome/fa-solid-900-7a58f741ff539af94798ff561c918e5841d7e6164e90cbe57befdec4a16f6a4e.ttf":{"logical_path":"font-awesome/fa-solid-900.ttf","mtime":"2019-05-14T13:12:35+02:00","size":186444,"digest":"7a58f741ff539af94798ff561c918e5841d7e6164e90cbe57befdec4a16f6a4e","integrity":"sha256-elj3Qf9TmvlHmP9WHJGOWEHX5hZOkMvle+/exKFvak4="},"font-awesome/fa-brands-400-17ce8b9d612897d1fefd5cd2096dbd83b82d05dd5d1f60421aca15c4ce2445ac.woff":{"logical_path":"font-awesome/fa-brands-400.woff","mtime":"2019-05-14T13:12:35+02:00","size":87688,"digest":"17ce8b9d612897d1fefd5cd2096dbd83b82d05dd5d1f60421aca15c4ce2445ac","integrity":"sha256-F86LnWEol9H+/VzSCW29g7gtBd1dH2BCGsoVxM4kRaw="},"font-awesome/fa-regular-400-2835b63ffc892d01aac2cc346969b501c845d9184f738589779ec176937e1f33.woff":{"logical_path":"font-awesome/fa-regular-400.woff","mtime":"2019-05-14T13:12:35+02:00","size":16804,"digest":"2835b63ffc892d01aac2cc346969b501c845d9184f738589779ec176937e1f33","integrity":"sha256-KDW2P/yJLQGqwsw0aWm1AchF2RhPc4WJd57BdpN+HzM="},"font-awesome/fa-solid-900-20464aebbff54cc17776497ce4112c3374a54b38f7ba5f58eec12174149d6742.woff":{"logical_path":"font-awesome/fa-solid-900.woff","mtime":"2019-05-14T13:12:35+02:00","size":96256,"digest":"20464aebbff54cc17776497ce4112c3374a54b38f7ba5f58eec12174149d6742","integrity":"sha256-IEZK67/1TMF3dkl85BEsM3SlSzj3ul9Y7sEhdBSdZ0I="},"font-awesome/fa-brands-400-dc64d7192f84497cacad5c10aef682562c24aa6124270f85fe247e223607f3ed.woff2":{"logical_path":"font-awesome/fa-brands-400.woff2","mtime":"2019-05-14T13:12:35+02:00","size":74768,"digest":"dc64d7192f84497cacad5c10aef682562c24aa6124270f85fe247e223607f3ed","integrity":"sha256-3GTXGS+ESXysrVwQrvaCViwkqmEkJw+F/iR+IjYH8+0="},"font-awesome/fa-regular-400-ccf4db1eeb68c96e05e74f8ebfa75cc60c3a0fed862dae6b0ad85d4e1b5b4e4f.woff2":{"logical_path":"font-awesome/fa-regular-400.woff2","mtime":"2019-05-14T13:12:35+02:00","size":13552,"digest":"ccf4db1eeb68c96e05e74f8ebfa75cc60c3a0fed862dae6b0ad85d4e1b5b4e4f","integrity":"sha256-zPTbHutoyW4F50+Ov6dcxgw6D+2GLa5rCthdThtbTk8="},"font-awesome/fa-solid-900-f18c486a80175cf02fee0e05c2b4acd86c04cdbaecec61c1ef91f920509b5efe.woff2":{"logical_path":"font-awesome/fa-solid-900.woff2","mtime":"2019-05-14T13:12:35+02:00","size":74256,"digest":"f18c486a80175cf02fee0e05c2b4acd86c04cdbaecec61c1ef91f920509b5efe","integrity":"sha256-8YxIaoAXXPAv7g4FwrSs2GwEzbrs7GHB75H5IFCbXv4="},"agendadescommuns-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png":{"logical_path":"agendadescommuns.png","mtime":"2018-03-01T22:17:10+01:00","size":2760,"digest":"0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33","integrity":"sha256-ABe+9T9iYcs7+VLUt4DGQwc2lxSy4eLU659p39mGqzM="},"alert-762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906.png":{"logical_path":"alert.png","mtime":"2014-07-04T14:08:56+02:00","size":47876,"digest":"762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906","integrity":"sha256-dirOlHkygkOkQGE0a2TE1rmX6WPGjfxr3dnk0kEZKQY="},"baby_gnu_adl-463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc.png":{"logical_path":"baby_gnu_adl.png","mtime":"2018-03-01T22:17:10+01:00","size":7411,"digest":"463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc","integrity":"sha256-RjqBggqi1P/Y5yENvOGhn/ysZ+82KqewkigMb5XJA/w="},"baby_gnu_adl-97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e.svg":{"logical_path":"baby_gnu_adl.svg","mtime":"2016-09-11T17:42:49+02:00","size":109635,"digest":"97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e","integrity":"sha256-lyUQBdMiXPHVi4xJfWt5BdvJVgzIrNUBGPzOYNCiZ54="},"communs-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png":{"logical_path":"communs.png","mtime":"2018-03-01T22:17:10+01:00","size":2760,"digest":"0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33","integrity":"sha256-ABe+9T9iYcs7+VLUt4DGQwc2lxSy4eLU659p39mGqzM="},"lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png":{"logical_path":"lef-small.png","mtime":"2018-03-01T22:17:10+01:00","size":1059,"digest":"93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e","integrity":"sha256-kyhdUxr0Y/h3lR1j/oRKbpYAt4LCyB94cjtzAHL6lC4="},"lef-7e9152b909c78144ff44ca2254c06709333bef0b8d4985deb1361aba5c63c86d.png":{"logical_path":"lef.png","mtime":"2018-12-20T12:28:10+01:00","size":15783,"digest":"7e9152b909c78144ff44ca2254c06709333bef0b8d4985deb1361aba5c63c86d","integrity":"sha256-fpFSuQnHgUT/RMoiVMBnCTM77wuNSYXesTYaulxjyG0="},"linux-presentation-day-863b30562924505dd21841220861f83643d310e0b943a0e6a905462ddfac86f1.png":{"logical_path":"linux-presentation-day.png","mtime":"2019-04-19T16:45:03+02:00","size":9358,"digest":"863b30562924505dd21841220861f83643d310e0b943a0e6a905462ddfac86f1","integrity":"sha256-hjswVikkUF3SGEEiCGH4NkPTEOC5Q6DmqQVGLd+shvE="},"priorite-logiciel-libre-je-soutiens-april_2_m-6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc.png":{"logical_path":"priorite-logiciel-libre-je-soutiens-april_2_m.png","mtime":"2018-07-15T15:58:42+02:00","size":16952,"digest":"6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc","integrity":"sha256-ZELkVOlu1FzB68QGc6bFC9KGucKOpqi1hXLpT31kWfw="},"regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png":{"logical_path":"regions/CA-QC.png","mtime":"2018-03-01T22:18:39+01:00","size":469,"digest":"70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174","integrity":"sha256-cGmeam4lxpBAo/FUiwr9gpxJA8zKJ2C2wQ9JzIfV0XQ="},"team-65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa.png":{"logical_path":"team.png","mtime":"2018-03-01T22:17:10+01:00","size":3586,"digest":"65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa","integrity":"sha256-ZchgIc+KEVRJNmQJSur8vj5aoT3GdbuO80siBIHbmPo="},"application-b28f5a42dc6b5de7d77e7b9ef9351c708f2153532290127f06ff78c9f4d978f2.js":{"logical_path":"application.js","mtime":"2019-05-11T17:00:57+02:00","size":1964749,"digest":"b28f5a42dc6b5de7d77e7b9ef9351c708f2153532290127f06ff78c9f4d978f2","integrity":"sha256-so9aQtxrXefXfnue+TUccI8hU1MikBJ/Bv94yfTZePI="},"application-8d9e6b02a80528a80ba3b8b8ee333f1a34e130575fb088490c2bc9403fb04597.css":{"logical_path":"application.css","mtime":"2019-05-14T15:14:02+02:00","size":170794,"digest":"8d9e6b02a80528a80ba3b8b8ee333f1a34e130575fb088490c2bc9403fb04597","integrity":"sha256-jZ5rAqgFKKgLo7i47jM/GjThMFdfsIhJDCvJQD+wRZc="},"flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg":{"logical_path":"flags/4x3/ad.svg","mtime":"2019-05-14T13:11:18+02:00","size":33972,"digest":"f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497","integrity":"sha256-9nxOWj9wnq1TwE2f81YU5sZ1F8PTKJFw96MXOQ9mFJc="},"flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg":{"logical_path":"flags/1x1/ad.svg","mtime":"2019-05-14T13:11:18+02:00","size":32745,"digest":"a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c","integrity":"sha256-oxWDbsLJ3MEe+b/YsYqnzPwtMUNcv0aiwxkwg2B24Jw="},"flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg":{"logical_path":"flags/4x3/ae.svg","mtime":"2019-05-14T13:11:18+02:00","size":257,"digest":"7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e","integrity":"sha256-ejs9wPULUxABTPvMggCl8c5WgSe/Q0UuQOgVjgz/LS4="},"flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg":{"logical_path":"flags/1x1/ae.svg","mtime":"2019-05-14T13:11:18+02:00","size":265,"digest":"bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5","integrity":"sha256-vN2aTaCVmHhfPjHbT/Qx4iaHsurRggmj5hVgBlUGjNU="},"flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg":{"logical_path":"flags/4x3/af.svg","mtime":"2019-05-14T13:11:18+02:00","size":21279,"digest":"01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260","integrity":"sha256-AWAbUh+oZYLjLDnu2MiEgK/sH4AbbekptS7X5J2kcmA="},"flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg":{"logical_path":"flags/1x1/af.svg","mtime":"2019-05-14T13:11:18+02:00","size":21145,"digest":"6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d","integrity":"sha256-YzLPdUpeKGbbYxkj4ffPxSoKVU0yuXvPGfgmOBnkyn0="},"flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg":{"logical_path":"flags/4x3/ag.svg","mtime":"2019-05-14T13:11:18+02:00","size":748,"digest":"cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b","integrity":"sha256-y2lS2CG6x4VSMcLLTRxE98cw9rNiFRirIPMNK5r+YEs="},"flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg":{"logical_path":"flags/1x1/ag.svg","mtime":"2019-05-14T13:11:18+02:00","size":764,"digest":"14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4","integrity":"sha256-FPfZl4SHqvREa1UWfoWnEcSKE/8H7awXXBcpaaOGUMQ="},"flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg":{"logical_path":"flags/4x3/ai.svg","mtime":"2019-05-14T13:11:18+02:00","size":42208,"digest":"f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc","integrity":"sha256-8HxswGRv36RBuaUG4dRujc4Nl7NyIikunGczyZXcibw="},"flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg":{"logical_path":"flags/1x1/ai.svg","mtime":"2019-05-14T13:11:18+02:00","size":47975,"digest":"95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810","integrity":"sha256-lQmeVE3im86junNd5TWCPy4ZrrQEPoLbwdmGL5JiuBA="},"flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg":{"logical_path":"flags/4x3/al.svg","mtime":"2019-05-14T13:11:18+02:00","size":3221,"digest":"9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03","integrity":"sha256-m5l/JyDehh4bDM7I3fQqKJB5Xr9QgX+SI+HOunEsmwM="},"flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg":{"logical_path":"flags/1x1/al.svg","mtime":"2019-05-14T13:11:18+02:00","size":3228,"digest":"94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09","integrity":"sha256-lIUtJxH8I6vzQjU0ue25UKDGqr8dLZi/JkPzx9rfrAk="},"flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg":{"logical_path":"flags/4x3/am.svg","mtime":"2019-05-14T13:11:18+02:00","size":226,"digest":"85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6","integrity":"sha256-haGZ7CHRr3SiVjNerQweOFkrtgPY2oH+2kZ4lF6eAOY="},"flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg":{"logical_path":"flags/1x1/am.svg","mtime":"2019-05-14T13:11:18+02:00","size":234,"digest":"869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7","integrity":"sha256-hpORsBSsKZkk0wd31ypKukMHUhdykKkKH8MlWnrXnuc="},"flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg":{"logical_path":"flags/4x3/ao.svg","mtime":"2019-05-14T13:11:18+02:00","size":1608,"digest":"29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75","integrity":"sha256-KSJKYb9jKCbVMM2lXYfCYViEvSwsOjIgNu1GjjTYXHU="},"flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg":{"logical_path":"flags/1x1/ao.svg","mtime":"2019-05-14T13:11:18+02:00","size":1608,"digest":"048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e","integrity":"sha256-BI6svIYv4YaM8OxzRXtwqLSaWYyA3qBJhW8OH9b+yD4="},"flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg":{"logical_path":"flags/4x3/aq.svg","mtime":"2019-05-14T13:11:18+02:00","size":2974,"digest":"b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd","integrity":"sha256-tAGndtLxp5RBcBFPCu7Oq14dli3z3n7R7/R9loJLc/0="},"flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg":{"logical_path":"flags/1x1/aq.svg","mtime":"2019-05-14T13:11:18+02:00","size":3183,"digest":"a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531","integrity":"sha256-qNfOm/uGC24rWGCLUL8sr8UiDHf20Emrd3CJH2QzRTE="},"flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg":{"logical_path":"flags/4x3/ar.svg","mtime":"2019-05-14T13:11:18+02:00","size":3430,"digest":"bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826","integrity":"sha256-v3NHW7cHEAh03sU4zkt+G1r8TtZ9xQqKgA7lGeUcyCY="},"flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg":{"logical_path":"flags/1x1/ar.svg","mtime":"2019-05-14T13:11:18+02:00","size":3503,"digest":"fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60","integrity":"sha256-/GWCzG0+8HgoBdhJfud6stg2xTQi6RAH5I+BpKn6LmA="},"flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg":{"logical_path":"flags/4x3/as.svg","mtime":"2019-05-14T13:11:18+02:00","size":8098,"digest":"79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1","integrity":"sha256-edOVGQNFIG6gNHW2e0RjjhERViQRUEtgZGSDycCw99E="},"flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg":{"logical_path":"flags/1x1/as.svg","mtime":"2019-05-14T13:11:18+02:00","size":7845,"digest":"04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183","integrity":"sha256-BPDbd8XYYQpVxpUIsianwziST4z31ld9XWWQ6F7lcYM="},"flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg":{"logical_path":"flags/4x3/at.svg","mtime":"2019-05-14T13:11:18+02:00","size":243,"digest":"3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f","integrity":"sha256-PRl96PHwCWorDUQLb8fYCCFYWmY35kbAVIeodxi/a18="},"flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg":{"logical_path":"flags/1x1/at.svg","mtime":"2019-05-14T13:11:18+02:00","size":245,"digest":"ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8","integrity":"sha256-7E25rqx5OCesfI5AwHKnb3Z1AQBYzIyN/TqGu1rPprg="},"flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg":{"logical_path":"flags/4x3/au.svg","mtime":"2019-05-14T13:11:18+02:00","size":1335,"digest":"126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12","integrity":"sha256-Em+iUAoxUoel+Ef02Vi7kp8R2ps581kSzEQMD8/7ixI="},"flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg":{"logical_path":"flags/1x1/au.svg","mtime":"2019-05-14T13:11:18+02:00","size":1320,"digest":"bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b","integrity":"sha256-v5kNzJV8n3TrkI6P+nM/FzEne/bsi3MBpuoe2StZzEs="},"flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg":{"logical_path":"flags/4x3/aw.svg","mtime":"2019-05-14T13:11:18+02:00","size":9948,"digest":"4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6","integrity":"sha256-RSRkNFJCPpXzsNvmIWsFmp5SEms0xzrks8F7aC+JOqY="},"flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg":{"logical_path":"flags/1x1/aw.svg","mtime":"2019-05-14T13:11:18+02:00","size":12088,"digest":"f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8","integrity":"sha256-9wArzu9VSGpEK/a/Qzvgxg0LFbKqVIuBxSTGfM8FZag="},"flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg":{"logical_path":"flags/4x3/ax.svg","mtime":"2019-05-14T13:11:18+02:00","size":556,"digest":"c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90","integrity":"sha256-wpfg62VMpi5Y9es6u3DfnyReSRlJDym9Dx1JxP4FLZA="},"flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg":{"logical_path":"flags/1x1/ax.svg","mtime":"2019-05-14T13:11:18+02:00","size":544,"digest":"a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880","integrity":"sha256-oSRWiey/MhwKnlVruhfzyfKuuLH2PRT8tZHXaofxKIA="},"flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg":{"logical_path":"flags/4x3/az.svg","mtime":"2019-05-14T13:11:18+02:00","size":515,"digest":"132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c","integrity":"sha256-Ey5o1eA4bTufoFtCiKD9ZvFBTivHr2udQ3tpNaffoAw="},"flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg":{"logical_path":"flags/1x1/az.svg","mtime":"2019-05-14T13:11:18+02:00","size":501,"digest":"3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d","integrity":"sha256-OZDAUmuTO9ZQKF2CHyuT5DKnO6cJhpVJuO91sFHTvS0="},"flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg":{"logical_path":"flags/4x3/ba.svg","mtime":"2019-05-14T13:11:18+02:00","size":1306,"digest":"89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5","integrity":"sha256-id0MFgDZR0HefWZ6SHMQGToMSMTPGlFZw7+d031l0rU="},"flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg":{"logical_path":"flags/1x1/ba.svg","mtime":"2019-05-14T13:11:18+02:00","size":1247,"digest":"2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a","integrity":"sha256-Lb6Q6xK5N/Spro25V2CTCj4xj0zlgprAXikurWmLrlo="},"flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg":{"logical_path":"flags/4x3/bb.svg","mtime":"2019-05-14T13:11:18+02:00","size":613,"digest":"16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6","integrity":"sha256-Fvgkn/lYv7wY+x8jpSggADR7/9tXaaxiCWYYWx3LV/Y="},"flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg":{"logical_path":"flags/1x1/bb.svg","mtime":"2019-05-14T13:11:18+02:00","size":616,"digest":"fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060","integrity":"sha256-+ukthCYZauJP+lYaynJhP65lGl6cC82mPsyHet0FsGA="},"flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg":{"logical_path":"flags/4x3/bd.svg","mtime":"2019-05-14T13:11:18+02:00","size":193,"digest":"8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6","integrity":"sha256-jawFR+c+4loEFIo/D9AmqQ5Wwjt+kpIVZdQmMFC6d6Y="},"flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg":{"logical_path":"flags/1x1/bd.svg","mtime":"2019-05-14T13:11:18+02:00","size":195,"digest":"ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1","integrity":"sha256-7MPD6H1MxZyDUPK019yo9c9GvbJjGdsO6At0RIKvUME="},"flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg":{"logical_path":"flags/4x3/be.svg","mtime":"2019-05-14T13:11:18+02:00","size":293,"digest":"a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae","integrity":"sha256-oYDKaFIRiAF7tTZ/GeUD2VmdbL7NYb8FTlmlf1jmSK4="},"flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg":{"logical_path":"flags/1x1/be.svg","mtime":"2019-05-14T13:11:18+02:00","size":293,"digest":"c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e","integrity":"sha256-yNQZQTe9AZVShbMp39+ZZJDRbDEWqSzi8yLjVLbXSU4="},"flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg":{"logical_path":"flags/4x3/bf.svg","mtime":"2019-05-14T13:11:18+02:00","size":360,"digest":"6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313","integrity":"sha256-ayFJNu+J8ZEz1KhOmc3wz9uZ1kCfLzc/bRhpRCMBMxM="},"flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg":{"logical_path":"flags/1x1/bf.svg","mtime":"2019-05-14T13:11:18+02:00","size":386,"digest":"04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee","integrity":"sha256-BMfWGqMUrataQb1513qngMEBNrtrj0xiQj5h4j44Ue4="},"flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg":{"logical_path":"flags/4x3/bg.svg","mtime":"2019-05-14T13:11:18+02:00","size":289,"digest":"dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4","integrity":"sha256-3TmFunRpQrDmW8UqKAzE0o+yT9LH2eIqya/S117nv8Q="},"flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg":{"logical_path":"flags/1x1/bg.svg","mtime":"2019-05-14T13:11:18+02:00","size":297,"digest":"f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746","integrity":"sha256-9ZKUpzbVvcDxArWNcNvkXQK9kt+CKCC/lTNoQPdaB0Y="},"flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg":{"logical_path":"flags/4x3/bh.svg","mtime":"2019-05-14T13:11:18+02:00","size":546,"digest":"7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c","integrity":"sha256-fILEprqWMXLGwbRCPzmg6+nJmUScx92HAYkXlD20c1w="},"flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg":{"logical_path":"flags/1x1/bh.svg","mtime":"2019-05-14T13:11:18+02:00","size":572,"digest":"6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88","integrity":"sha256-aJOqw+VcZIDp2sDAI+whefbBKg2oKgvCcXE0OEwJfog="},"flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg":{"logical_path":"flags/4x3/bi.svg","mtime":"2019-05-14T13:11:18+02:00","size":1074,"digest":"4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c","integrity":"sha256-T80BFvf5PAVkxpVYBvPDVj0OpzNK5AbymolyVYRckjw="},"flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg":{"logical_path":"flags/1x1/bi.svg","mtime":"2019-05-14T13:11:18+02:00","size":1048,"digest":"91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a","integrity":"sha256-kcNOtDGya+Z4UngqC5Ph19V3qSVFTWyM6gCg2HLS3oo="},"flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg":{"logical_path":"flags/4x3/bj.svg","mtime":"2019-05-14T13:11:18+02:00","size":499,"digest":"63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f","integrity":"sha256-Y73bQmj1+MLthnBBvPBY+xj82dHgeZ4BKG/KLV6WHH8="},"flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg":{"logical_path":"flags/1x1/bj.svg","mtime":"2019-05-14T13:11:18+02:00","size":502,"digest":"e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc","integrity":"sha256-4mBsWoSYxHSmtnCGJriBCPy3OEA0R2ZWbcVvgEJ5zfw="},"flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg":{"logical_path":"flags/4x3/bl.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74","integrity":"sha256-gkpyZfSHidXhrVxbAEKhOn0tQ1chDlvYEk/KGZMejHQ="},"flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg":{"logical_path":"flags/1x1/bl.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6","integrity":"sha256-ump4gbDKcqxXruTYI65hGrStJKk47p4Bp6TVrgTPzPY="},"flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg":{"logical_path":"flags/4x3/bm.svg","mtime":"2019-05-14T13:11:18+02:00","size":22650,"digest":"2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc","integrity":"sha256-Li8J5aTt9LGK//WBZW9QsLTDd4PbKVkf8AynaPf3Vbw="},"flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg":{"logical_path":"flags/1x1/bm.svg","mtime":"2019-05-14T13:11:18+02:00","size":22337,"digest":"f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6","integrity":"sha256-9VP5U/h4TqTWelGX9dgIpndH64octWmQ1oOOaQCQ0tY="},"flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg":{"logical_path":"flags/4x3/bn.svg","mtime":"2019-05-14T13:11:18+02:00","size":14387,"digest":"bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180","integrity":"sha256-vPmWfBLrY5c0bLW5YK6S76QfMU94DQmj18gfXaysQYA="},"flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg":{"logical_path":"flags/1x1/bn.svg","mtime":"2019-05-14T13:11:18+02:00","size":14521,"digest":"1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043","integrity":"sha256-HRqtP+n9M86SLrozya5gR6VkY0kjnCDRvHMH7G0ZoEM="},"flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg":{"logical_path":"flags/4x3/bo.svg","mtime":"2019-05-14T13:11:18+02:00","size":118272,"digest":"fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e","integrity":"sha256-+kI/K7Srbo6d05mtc3geqNnLr9MPG37gvOz7nnt1WB4="},"flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg":{"logical_path":"flags/1x1/bo.svg","mtime":"2019-05-14T13:11:18+02:00","size":119850,"digest":"f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e","integrity":"sha256-9fqinkAZHgx2BwrBodKh8rGOnNNYuKd8767Y78SaJl4="},"flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg":{"logical_path":"flags/4x3/bq.svg","mtime":"2019-05-14T13:11:18+02:00","size":227,"digest":"493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e","integrity":"sha256-STySqxkgTDrTGebKugId8FATK5m9V6j5t0Ext4Ipwp4="},"flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg":{"logical_path":"flags/1x1/bq.svg","mtime":"2019-05-14T13:11:18+02:00","size":231,"digest":"6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33","integrity":"sha256-bjC76rwqoJf2V6QRmEs8IyeKj8zi/AFrHNbSJi9nLTM="},"flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg":{"logical_path":"flags/4x3/br.svg","mtime":"2019-05-14T13:11:18+02:00","size":8244,"digest":"cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01","integrity":"sha256-zzuoDsLJ/U08hFw6PEOiudgc+QcHopGHieix9ZaDPgE="},"flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg":{"logical_path":"flags/1x1/br.svg","mtime":"2019-05-14T13:11:18+02:00","size":7852,"digest":"7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6","integrity":"sha256-e/TksxZQrCXwvGyG64dJGn5ajqwTrMz8veRDRsiHKPY="},"flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg":{"logical_path":"flags/4x3/bs.svg","mtime":"2019-05-14T13:11:18+02:00","size":549,"digest":"69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836","integrity":"sha256-afYLX+qWtn3ZOeWXCZmUkhuz3DvPMbje58xFviiFyDY="},"flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg":{"logical_path":"flags/1x1/bs.svg","mtime":"2019-05-14T13:11:18+02:00","size":571,"digest":"f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262","integrity":"sha256-9das9+96JA3AmsiHEP13/TSUUBEEOS23TVxUDUgvImI="},"flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg":{"logical_path":"flags/4x3/bt.svg","mtime":"2019-05-14T13:11:18+02:00","size":25345,"digest":"6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e","integrity":"sha256-bCCwwA4S1YmL4COaDGbOd13r0L1TbeVqJxhZoChaA54="},"flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg":{"logical_path":"flags/1x1/bt.svg","mtime":"2019-05-14T13:11:18+02:00","size":25172,"digest":"58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85","integrity":"sha256-WN48qUOIEe8ZIOL4TEukzjLQEGn00ZerXVd95qy+DIU="},"flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg":{"logical_path":"flags/4x3/bv.svg","mtime":"2019-05-14T13:11:18+02:00","size":582,"digest":"ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586","integrity":"sha256-/xcxkPwzmzy4tugjW8Xjc4U9cSf9lMvDKsc36DmutYY="},"flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg":{"logical_path":"flags/1x1/bv.svg","mtime":"2019-05-14T13:11:18+02:00","size":585,"digest":"59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43","integrity":"sha256-WWFv8acilZBkyDknyi5JwfzkKpsY6Ruey7dPYlJ6/0M="},"flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg":{"logical_path":"flags/4x3/bw.svg","mtime":"2019-05-14T13:11:18+02:00","size":255,"digest":"4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850","integrity":"sha256-S7HTExuIxltd7MZ/e0SQPpMbyi/KyEGUJZHFmfDLuFA="},"flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg":{"logical_path":"flags/1x1/bw.svg","mtime":"2019-05-14T13:11:18+02:00","size":257,"digest":"e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6","integrity":"sha256-4I9QwINspYWK7XsFJq7W+2MNqNxra5a9mkdq9ZncidY="},"flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg":{"logical_path":"flags/4x3/by.svg","mtime":"2019-05-14T13:11:18+02:00","size":5998,"digest":"324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4","integrity":"sha256-MkrJa/vgdXgcZkvjueKsa00qRt0rQYygkgKE9kOUx9Q="},"flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg":{"logical_path":"flags/1x1/by.svg","mtime":"2019-05-14T13:11:18+02:00","size":6105,"digest":"37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a","integrity":"sha256-N7gOi/flH++ZqDB9bf+wTuFkeQzur+9gbVFsozPpSIo="},"flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg":{"logical_path":"flags/4x3/bz.svg","mtime":"2019-05-14T13:11:18+02:00","size":46916,"digest":"156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d","integrity":"sha256-FW/cRfjBXJUgoeqfwPOV8pTwIHdAjqGTjCIqN8+7fx0="},"flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg":{"logical_path":"flags/1x1/bz.svg","mtime":"2019-05-14T13:11:18+02:00","size":47160,"digest":"24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a","integrity":"sha256-JFd9TnspszqzsdN5FMhHmIm6p+jIOZxtHJn67TGrBTo="},"flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg":{"logical_path":"flags/4x3/ca.svg","mtime":"2019-05-14T13:11:18+02:00","size":731,"digest":"0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f","integrity":"sha256-DVfKtG1duwASpeSuCp7+47rukNXRV5UKbF1n7fLapY8="},"flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg":{"logical_path":"flags/1x1/ca.svg","mtime":"2019-05-14T13:11:18+02:00","size":712,"digest":"192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90","integrity":"sha256-GSpvsFROWm8zoyFJ1i8eesCh1hxcWvpX86QjRsqOjJA="},"flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg":{"logical_path":"flags/4x3/cc.svg","mtime":"2019-05-14T13:11:18+02:00","size":3144,"digest":"a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843","integrity":"sha256-o18qnhCijWkYztZeBiOwO7L78fIGcLWBvApAnTO06EM="},"flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg":{"logical_path":"flags/1x1/cc.svg","mtime":"2019-05-14T13:11:18+02:00","size":3092,"digest":"d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6","integrity":"sha256-0gJe78nTD3JPP82VwP2feTiTDssBr34M1u5lU9c1jrY="},"flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg":{"logical_path":"flags/4x3/cd.svg","mtime":"2019-05-14T13:11:18+02:00","size":352,"digest":"5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c","integrity":"sha256-XSEnyZGzBSKuCinQX6y8iHKMBQ1+Mzpg1hSvFUVFnFw="},"flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg":{"logical_path":"flags/1x1/cd.svg","mtime":"2019-05-14T13:11:18+02:00","size":510,"digest":"59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3","integrity":"sha256-WdrPQk0cjHedtmxbfyqTo8jxSXbCl1zPsHY5Z2oWAuM="},"flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg":{"logical_path":"flags/4x3/cf.svg","mtime":"2019-05-14T13:11:18+02:00","size":689,"digest":"ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e","integrity":"sha256-rAqv+6NU2EjrolAaQC7oHclqVq0KzTdB7JkF52w3Lh4="},"flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg":{"logical_path":"flags/1x1/cf.svg","mtime":"2019-05-14T13:11:18+02:00","size":635,"digest":"e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d","integrity":"sha256-5jdnT69+3NrTcYIZLQOESMFXQhqwxpN32bjlarLAJJ0="},"flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg":{"logical_path":"flags/4x3/cg.svg","mtime":"2019-05-14T13:11:18+02:00","size":484,"digest":"3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538","integrity":"sha256-Nyn3F8g8nffQVDoaXUpQbv4YS9/rOfkmC0tj7fGdJTg="},"flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg":{"logical_path":"flags/1x1/cg.svg","mtime":"2019-05-14T13:11:18+02:00","size":472,"digest":"8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf","integrity":"sha256-g1P/HyUXFLG4kF7sFyI3hCZxmVXQY30gbTXR3Ppo3c8="},"flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg":{"logical_path":"flags/4x3/ch.svg","mtime":"2019-05-14T13:11:18+02:00","size":300,"digest":"6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf","integrity":"sha256-Zznt7m0e9yxO2Xz+cj07t/F+TfU5DzpK4jTx/97s4M8="},"flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg":{"logical_path":"flags/1x1/ch.svg","mtime":"2019-05-14T13:11:18+02:00","size":298,"digest":"7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208","integrity":"sha256-fD3sRlIomBxXqQo6ezpsQt0+aZIwZj53C1UAjObRQgg="},"flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg":{"logical_path":"flags/4x3/ci.svg","mtime":"2019-05-14T13:11:18+02:00","size":283,"digest":"3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e","integrity":"sha256-PgdtE8lSQUlQjEQvj3J0JGYBJONZEoDYrpvd+dgnKh4="},"flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg":{"logical_path":"flags/1x1/ci.svg","mtime":"2019-05-14T13:11:18+02:00","size":286,"digest":"691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91","integrity":"sha256-aRoKhXe31VX8kNxxcK3J7HVxGRyzUHxGwOhRb9F3ipE="},"flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg":{"logical_path":"flags/4x3/ck.svg","mtime":"2019-05-14T13:11:18+02:00","size":1887,"digest":"9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6","integrity":"sha256-nP8JjlBa/em/UWbLewxAkXhXVjO5E84IwccA0IxHfbY="},"flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg":{"logical_path":"flags/1x1/ck.svg","mtime":"2019-05-14T13:11:18+02:00","size":1846,"digest":"9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88","integrity":"sha256-nI3/o71ZU9ihIXgIMfJbWHOOZ/O+cZYYlMVt/SWEjIg="},"flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg":{"logical_path":"flags/4x3/cl.svg","mtime":"2019-05-14T13:11:18+02:00","size":560,"digest":"a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b","integrity":"sha256-pMV+wrua3LZ+GFAlblFlInt2QYfWlBo42V0N71FEaZs="},"flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg":{"logical_path":"flags/1x1/cl.svg","mtime":"2019-05-14T13:11:18+02:00","size":577,"digest":"5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c","integrity":"sha256-Wj6Vz2M1jjkRyXQEgYws3f1GQU2EReR9aXbuFmxIkmw="},"flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg":{"logical_path":"flags/4x3/cm.svg","mtime":"2019-05-14T13:11:18+02:00","size":827,"digest":"5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722","integrity":"sha256-Xc6fNtkqYb3AxIIUG9tPVb/OwKLsx0XbZDp5U+LlpyI="},"flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg":{"logical_path":"flags/1x1/cm.svg","mtime":"2019-05-14T13:11:18+02:00","size":827,"digest":"d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd","integrity":"sha256-2NIfVMRN9d+e3vInaROEpK03wV/1fIqg3q1oTRnqyM0="},"flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg":{"logical_path":"flags/4x3/cn.svg","mtime":"2019-05-14T13:11:18+02:00","size":804,"digest":"48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f","integrity":"sha256-SM4cKDe7gGpqr4t6mHi20EDA0Gmg/8qaiknnoxqjDn8="},"flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg":{"logical_path":"flags/1x1/cn.svg","mtime":"2019-05-14T13:11:18+02:00","size":746,"digest":"e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc","integrity":"sha256-5r5kxsSpduZNOb/opq5KWx04pqobE43crPNKlC3/ULw="},"flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg":{"logical_path":"flags/4x3/co.svg","mtime":"2019-05-14T13:11:18+02:00","size":292,"digest":"648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7","integrity":"sha256-ZI0/9Zag7PPoWsF8U6vh18pHWWiOEKejqLVvCWumtvc="},"flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg":{"logical_path":"flags/1x1/co.svg","mtime":"2019-05-14T13:11:18+02:00","size":292,"digest":"d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1","integrity":"sha256-08FhgMa85jD3Yq/3iRBNEOnbyUnnQFNaYTls0Ow0waE="},"flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg":{"logical_path":"flags/4x3/cr.svg","mtime":"2019-05-14T13:11:18+02:00","size":296,"digest":"84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d","integrity":"sha256-hK7GDxm9M+GsGiCRVf7I03LhfLWdwTRruRJOXMhnN10="},"flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg":{"logical_path":"flags/1x1/cr.svg","mtime":"2019-05-14T13:11:18+02:00","size":296,"digest":"5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35","integrity":"sha256-U3HPi8WtGoBRVcGzBl5CCgpBjI1jtHK8VFiQKJo2WzU="},"flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg":{"logical_path":"flags/4x3/cu.svg","mtime":"2019-05-14T13:11:18+02:00","size":619,"digest":"bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0","integrity":"sha256-uz+FfgKuq2BhINnxZCg/B6RLIn8SqtfW00THV597P/A="},"flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg":{"logical_path":"flags/1x1/cu.svg","mtime":"2019-05-14T13:11:18+02:00","size":576,"digest":"02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d","integrity":"sha256-AsAFQWm4dKjSMd4fRbLQiE3kiEgVdzTg3c0PaEwFwY0="},"flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg":{"logical_path":"flags/4x3/cv.svg","mtime":"2019-05-14T13:11:18+02:00","size":1414,"digest":"90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f","integrity":"sha256-kO6Qq1lxNFSiGNjDAMcROeYmVd6Av76oHfkxQqUpuB8="},"flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg":{"logical_path":"flags/1x1/cv.svg","mtime":"2019-05-14T13:11:18+02:00","size":1362,"digest":"2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308","integrity":"sha256-LPPu3pekaNKEWczCJxwou1tgKa8jiLAwH2IDvlXkkwg="},"flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg":{"logical_path":"flags/4x3/cw.svg","mtime":"2019-05-14T13:11:18+02:00","size":678,"digest":"d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad","integrity":"sha256-1GvrexC0D6gs/UDrhqOzh59Z9doqL175HRIaubFsCq0="},"flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg":{"logical_path":"flags/1x1/cw.svg","mtime":"2019-05-14T13:11:18+02:00","size":685,"digest":"ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5","integrity":"sha256-unjINOYbJKiitrx8gKufFOQsPGlBWUHdt8jB9lLM2LU="},"flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg":{"logical_path":"flags/4x3/cx.svg","mtime":"2019-05-14T13:11:18+02:00","size":2469,"digest":"28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2","integrity":"sha256-KBh/udkb7cbyObEH0m627BzCoMdzCBAwbFprMTwU8rI="},"flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg":{"logical_path":"flags/1x1/cx.svg","mtime":"2019-05-14T13:11:18+02:00","size":2508,"digest":"8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6","integrity":"sha256-jr4HPZl/k9CSpJMwDqHSNMka74DG6PQx6Iqn+Ock+aY="},"flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg":{"logical_path":"flags/4x3/cy.svg","mtime":"2019-05-14T13:11:18+02:00","size":5949,"digest":"8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be","integrity":"sha256-jWM+yrx5aLuKhpxiVF8SKqy7w+EIwlzrQhu4vIc0ub4="},"flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg":{"logical_path":"flags/1x1/cy.svg","mtime":"2019-05-14T13:11:18+02:00","size":6053,"digest":"6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790","integrity":"sha256-bvN/3XUY8YcnvsHtl0G7TR+FTd5+8afp/S9Lpikad5A="},"flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg":{"logical_path":"flags/4x3/cz.svg","mtime":"2019-05-14T13:11:18+02:00","size":481,"digest":"6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56","integrity":"sha256-bJTj1T/BrlmC2OsFi3bYbwfT+0zTJWmP6jKR+jVQTFY="},"flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg":{"logical_path":"flags/1x1/cz.svg","mtime":"2019-05-14T13:11:18+02:00","size":483,"digest":"af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e","integrity":"sha256-r5iY69MlWc2+ov0Xs1Hl7tr8ytpvvGoreVLK14NpgX4="},"flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg":{"logical_path":"flags/4x3/de.svg","mtime":"2019-05-14T13:11:18+02:00","size":216,"digest":"e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1","integrity":"sha256-5zIwg2ddJRB8hfDOplNL0h0h535tUk2S4bLQpOIRF6E="},"flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg":{"logical_path":"flags/1x1/de.svg","mtime":"2019-05-14T13:11:18+02:00","size":224,"digest":"fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266","integrity":"sha256-/bYBRpUtOy0QQxCyiIKg7N5E2AgkDDurLNbDAqU4smY="},"flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg":{"logical_path":"flags/4x3/dj.svg","mtime":"2019-05-14T13:11:18+02:00","size":588,"digest":"546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03","integrity":"sha256-VG2koNrpsat03GrGB20McG837yoNeZNC3QNF4R93DwM="},"flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg":{"logical_path":"flags/1x1/dj.svg","mtime":"2019-05-14T13:11:18+02:00","size":588,"digest":"c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900","integrity":"sha256-wEgbZn8APZ1aPJOGECOpepgiQiesGap+B7W27dNf6QA="},"flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg":{"logical_path":"flags/4x3/dk.svg","mtime":"2019-05-14T13:11:18+02:00","size":242,"digest":"a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5","integrity":"sha256-oTc1wDN6tGec2GeVCL9egGdjerYRylxUFyxiHXQEIOU="},"flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg":{"logical_path":"flags/1x1/dk.svg","mtime":"2019-05-14T13:11:18+02:00","size":238,"digest":"822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c","integrity":"sha256-gio7i2lI9JqoH+diC9FzRT2aRUBqloDyS61+cU5Yy3w="},"flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg":{"logical_path":"flags/4x3/dm.svg","mtime":"2019-05-14T13:11:18+02:00","size":16026,"digest":"7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940","integrity":"sha256-dxP6vTzzQWlLTB710TeYIHc3IrYcGQI0rHQW8ocuOUA="},"flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg":{"logical_path":"flags/1x1/dm.svg","mtime":"2019-05-14T13:11:18+02:00","size":16514,"digest":"33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46","integrity":"sha256-M9mE/JiXuyo70Wxmcrh27/waitwMV60SKhbbVAYeTkY="},"flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg":{"logical_path":"flags/4x3/do.svg","mtime":"2019-05-14T13:11:18+02:00","size":394146,"digest":"714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a","integrity":"sha256-cUtvMH6jqcPTA0hoS4V06Lf1B49RZJ36l64qaacQi0o="},"flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg":{"logical_path":"flags/1x1/do.svg","mtime":"2019-05-14T13:11:18+02:00","size":391714,"digest":"d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857","integrity":"sha256-03MGxLNG+J6hRzkUQ3TKrWllK+MejOjiUEyaDUIqSFc="},"flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg":{"logical_path":"flags/4x3/dz.svg","mtime":"2019-05-14T13:11:18+02:00","size":301,"digest":"a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1","integrity":"sha256-qW6UPIMFWP6YIwRKrCv7P2pMrzvTxXlDNSKAp/a2jLE="},"flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg":{"logical_path":"flags/1x1/dz.svg","mtime":"2019-05-14T13:11:18+02:00","size":312,"digest":"09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4","integrity":"sha256-CUANOyxY5kGhZBpoe4FHZ2HQX50P9lhhrqozx/UIzaQ="},"flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg":{"logical_path":"flags/4x3/ec.svg","mtime":"2019-05-14T13:11:18+02:00","size":29417,"digest":"6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e","integrity":"sha256-Z2K6heoPe7KJsKpiGceX5SQxA9KBsUYsYbYQMPoynV4="},"flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg":{"logical_path":"flags/1x1/ec.svg","mtime":"2019-05-14T13:11:18+02:00","size":29972,"digest":"7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f","integrity":"sha256-dBCnWgE3OPu4y9dW2Wc4DgKuVMp06e+aQcS1g8LCeU8="},"flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg":{"logical_path":"flags/4x3/ee.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0","integrity":"sha256-zjtiIhS9nu+0M3PK4oEeqM9u9qFrtq+6pbyq6jQCTaA="},"flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg":{"logical_path":"flags/1x1/ee.svg","mtime":"2019-05-14T13:11:18+02:00","size":355,"digest":"a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8","integrity":"sha256-ogeoNjtN3kT1mVFQHCy1OUGekrCBSyXWRIcQztUiJvg="},"flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg":{"logical_path":"flags/4x3/eg.svg","mtime":"2019-05-14T13:11:18+02:00","size":9978,"digest":"16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c","integrity":"sha256-FqEfqThW3cX9RviBGt/JNmAXVySyDqq1X/BGhVo1LSw="},"flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg":{"logical_path":"flags/1x1/eg.svg","mtime":"2019-05-14T13:11:18+02:00","size":9992,"digest":"9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2","integrity":"sha256-n00JjGBDJrvDaS+eLzNdvJs0vfJwZWW/RIOA8KiJ0eI="},"flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg":{"logical_path":"flags/4x3/eh.svg","mtime":"2019-05-14T13:11:18+02:00","size":878,"digest":"9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97","integrity":"sha256-nPSnTSnBoa/EE33utbZ41VyPvfjRgSFyZ/OlzOanapc="},"flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg":{"logical_path":"flags/1x1/eh.svg","mtime":"2019-05-14T13:11:18+02:00","size":828,"digest":"16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f","integrity":"sha256-FsMyfbzzSD5jSzU2sFYyS1R4IS2ubQYPL/suyWHNOC8="},"flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg":{"logical_path":"flags/4x3/er.svg","mtime":"2019-05-14T13:11:18+02:00","size":3207,"digest":"69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e","integrity":"sha256-aaHh5FKJ0Sgt9LHlzl5xLWn74xSr0MkiNT/OkIFMVD4="},"flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg":{"logical_path":"flags/1x1/er.svg","mtime":"2019-05-14T13:11:18+02:00","size":3395,"digest":"90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a","integrity":"sha256-kNSUCOWJVc8c8xhbAZPgPEoQcELUfvXpddu+EMbvf0o="},"flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg":{"logical_path":"flags/4x3/es.svg","mtime":"2019-05-14T13:11:18+02:00","size":92574,"digest":"50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499","integrity":"sha256-UOWWgca2QSSYvZy/xHOr7ccT23XFTFOLg52zw5TWRJk="},"flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg":{"logical_path":"flags/1x1/es.svg","mtime":"2019-05-14T13:11:18+02:00","size":94269,"digest":"29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d","integrity":"sha256-KcaPo8nIwq2s3C6wFi6cL6mY+qQIg2kA7GKFAAR2gA0="},"flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg":{"logical_path":"flags/4x3/et.svg","mtime":"2019-05-14T13:11:18+02:00","size":1243,"digest":"14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df","integrity":"sha256-FCY7p+qJD9Ck2JonkTQ+y3rMiaqx/CWT4Apgk7IiUd8="},"flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg":{"logical_path":"flags/1x1/et.svg","mtime":"2019-05-14T13:11:18+02:00","size":1242,"digest":"086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6","integrity":"sha256-CG7vtw6a2tU3zBxkCnLMD6hD7HqbBrJ3iqmLLbBVv+Y="},"flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg":{"logical_path":"flags/4x3/fi.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e","integrity":"sha256-pMQcqgKk9oA+oNbDbeS+6/INFQ4990KxNppAmcL/ZI4="},"flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg":{"logical_path":"flags/1x1/fi.svg","mtime":"2019-05-14T13:11:18+02:00","size":243,"digest":"c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a","integrity":"sha256-xf3zGPrF/fyU/lQmhhjliivFkzYX6tCZkpAPkMwl3po="},"flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg":{"logical_path":"flags/4x3/fj.svg","mtime":"2019-05-14T13:11:18+02:00","size":27388,"digest":"cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79","integrity":"sha256-ywzEs7XCAvB0h+5Rn0iz6ttHA19fLV0/mdIPgeSNa3k="},"flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg":{"logical_path":"flags/1x1/fj.svg","mtime":"2019-05-14T13:11:18+02:00","size":27519,"digest":"c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f","integrity":"sha256-wsf9U2hBkl52R7LVENagxYcA4qje0OQgCPuT/6zeEB8="},"flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg":{"logical_path":"flags/4x3/fk.svg","mtime":"2019-05-14T13:11:18+02:00","size":30453,"digest":"cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968","integrity":"sha256-y2HqoNciGCP30X3lnqiO0WtQb5WFqwxykc+DlEnYKWg="},"flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg":{"logical_path":"flags/1x1/fk.svg","mtime":"2019-05-14T13:11:18+02:00","size":30648,"digest":"a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf","integrity":"sha256-qHF0I4CuFX0SEaY8w1zTYhsb9t5tZ+So41Za0gCx2M8="},"flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg":{"logical_path":"flags/4x3/fm.svg","mtime":"2019-05-14T13:11:18+02:00","size":773,"digest":"079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153","integrity":"sha256-B5uTdWKppBKq6Pt2K1cd20m/I2J5Q8lyR7apu9t2gVM="},"flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg":{"logical_path":"flags/1x1/fm.svg","mtime":"2019-05-14T13:11:18+02:00","size":763,"digest":"dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8","integrity":"sha256-2+xzYz7NimxQ9W1U3za75qL4+1NKx2WEd8gsrRSoBqg="},"flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg":{"logical_path":"flags/4x3/fo.svg","mtime":"2019-05-14T13:11:18+02:00","size":567,"digest":"27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413","integrity":"sha256-JyecJIG7HLPkSFCpSJh9aoQRrP+ncMOuzRt21MWFNBM="},"flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg":{"logical_path":"flags/1x1/fo.svg","mtime":"2019-05-14T13:11:18+02:00","size":537,"digest":"7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f","integrity":"sha256-fLT9u6HHIjcC2EPLBwndx5n4n5Cd/hAePjbWvzbD5n8="},"flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg":{"logical_path":"flags/4x3/fr.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e","integrity":"sha256-MO0vaNyaF5J2Q2QPSPPSqFi9BBdwVHA1NJxueXE82E4="},"flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg":{"logical_path":"flags/1x1/fr.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc","integrity":"sha256-a4SRUSBMZvpmHDCzTmKRmhO55mt803pPyJYujguvm9w="},"flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg":{"logical_path":"flags/4x3/ga.svg","mtime":"2019-05-14T13:11:18+02:00","size":277,"digest":"e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63","integrity":"sha256-44QPnVvW7gjbdI03pTRQC4N77g+M5lmHsvCZpq/SzGM="},"flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg":{"logical_path":"flags/1x1/ga.svg","mtime":"2019-05-14T13:11:18+02:00","size":281,"digest":"9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9","integrity":"sha256-nq/VOIBCs9IlisYiMHW3JkJiEBNrmFG2N5cxBXIbZNk="},"flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg":{"logical_path":"flags/4x3/gb.svg","mtime":"2019-05-14T13:11:18+02:00","size":834,"digest":"ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d","integrity":"sha256-zpPIprl01jmY4mP20l+Jj8IFgKKEZEV/L0Rjtofk/o0="},"flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg":{"logical_path":"flags/1x1/gb.svg","mtime":"2019-05-14T13:11:18+02:00","size":792,"digest":"1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457","integrity":"sha256-HZPhzi4uEMFwnk3FCslWwAeywaY6S8It39ZDVPea1Fc="},"flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg":{"logical_path":"flags/4x3/gd.svg","mtime":"2019-05-14T13:11:18+02:00","size":1694,"digest":"7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2","integrity":"sha256-fDprYGi72aaryYwil91KzV4xAi5aQhD8DhIF7ChJj6I="},"flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg":{"logical_path":"flags/1x1/gd.svg","mtime":"2019-05-14T13:11:18+02:00","size":1834,"digest":"2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8","integrity":"sha256-IxC8A9no3chZm0CJG/sQuBKwcCOIFZmn4C4wKNG8nKg="},"flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg":{"logical_path":"flags/4x3/ge.svg","mtime":"2019-05-14T13:11:18+02:00","size":1400,"digest":"501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f","integrity":"sha256-UBwBNfuMN329KFn/YpC0fvSQeo4qsq4eORFrcW22eV8="},"flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg":{"logical_path":"flags/1x1/ge.svg","mtime":"2019-05-14T13:11:18+02:00","size":1544,"digest":"ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114","integrity":"sha256-yp7jaIPsEgSPu3+7+vIxwNSEiuCwfat0pG1Tt7NNgRQ="},"flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg":{"logical_path":"flags/4x3/gf.svg","mtime":"2019-05-14T13:11:18+02:00","size":261,"digest":"7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2","integrity":"sha256-fBZfkL/mrDZ0kDYyGCIhqZLwF/9wY1SxdhACOC6JwsI="},"flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg":{"logical_path":"flags/1x1/gf.svg","mtime":"2019-05-14T13:11:18+02:00","size":264,"digest":"8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c","integrity":"sha256-iDgzexXNzxQ/rBbHFOjb8tiT0uqPHI7wba3LZS3+xBw="},"flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg":{"logical_path":"flags/4x3/gg.svg","mtime":"2019-05-14T13:11:18+02:00","size":598,"digest":"2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778","integrity":"sha256-LHv8UNW803S19hB5dNBq8k5w7boxrXGiJeDC7MLW53g="},"flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg":{"logical_path":"flags/1x1/gg.svg","mtime":"2019-05-14T13:11:18+02:00","size":628,"digest":"509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359","integrity":"sha256-UJSJsXkoMbsn1pdcdqoKKsL6LDkGvPhE9hbeXg+7w1k="},"flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg":{"logical_path":"flags/4x3/gh.svg","mtime":"2019-05-14T13:11:18+02:00","size":286,"digest":"79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf","integrity":"sha256-ecGHdW6T3yL65XGtlBlinFJHwBbjKnRHHg1GEEj99c8="},"flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg":{"logical_path":"flags/1x1/gh.svg","mtime":"2019-05-14T13:11:18+02:00","size":299,"digest":"e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b","integrity":"sha256-578Y5jN5gu4x42c6uT5yKzQQt6TCAmVqS8OIfYZWKGs="},"flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg":{"logical_path":"flags/4x3/gi.svg","mtime":"2019-05-14T13:11:18+02:00","size":2972,"digest":"ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087","integrity":"sha256-7ZmzacjHfmSr1Z+rHygVXXG0N4tJYlxmqwq23/T4gIc="},"flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg":{"logical_path":"flags/1x1/gi.svg","mtime":"2019-05-14T13:11:18+02:00","size":2964,"digest":"2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a","integrity":"sha256-LlY+ludm4TwKnFo6NyBZpEc5u2luhT1xpvawjEkd+5o="},"flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg":{"logical_path":"flags/4x3/gl.svg","mtime":"2019-05-14T13:11:18+02:00","size":229,"digest":"612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260","integrity":"sha256-YS5WDbrWjVQL5nK4DiLFTbQ9biBwUj6BwVbM1rP8QmA="},"flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg":{"logical_path":"flags/1x1/gl.svg","mtime":"2019-05-14T13:11:18+02:00","size":243,"digest":"a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e","integrity":"sha256-qbs10rn/J2OGWNmta54sT0UgcrmoC1CNMudtN79iz24="},"flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg":{"logical_path":"flags/4x3/gm.svg","mtime":"2019-05-14T13:11:18+02:00","size":543,"digest":"4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045","integrity":"sha256-Sm+WcKQVSMzqztK3KOS8Vqy8SjulVE56CX99rnqLsEU="},"flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg":{"logical_path":"flags/1x1/gm.svg","mtime":"2019-05-14T13:11:18+02:00","size":385,"digest":"b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c","integrity":"sha256-tn+fa84vjIcAwZjei/r6xy0BuKHlW3f3Hoyv3Fj4r1w="},"flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg":{"logical_path":"flags/4x3/gn.svg","mtime":"2019-05-14T13:11:18+02:00","size":298,"digest":"873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28","integrity":"sha256-hztOtS80x1WL75PP0bghF7XDLJ+8BhD4ghzNIvKKvig="},"flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg":{"logical_path":"flags/1x1/gn.svg","mtime":"2019-05-14T13:11:18+02:00","size":298,"digest":"72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504","integrity":"sha256-cvUdwwzw7VRZrQ8jnPMEPqwF7OdZRbyvTqZlOvhoxQQ="},"flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg":{"logical_path":"flags/4x3/gp.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923","integrity":"sha256-RVnK0+stFzIUFh0WsCN8aPXIF3SaOchi+nsj37Su6SM="},"flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg":{"logical_path":"flags/1x1/gp.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416","integrity":"sha256-1maVMgVNtbfkQfSFjCiSAkamXKPooVUYxkx7u0+cZBY="},"flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg":{"logical_path":"flags/4x3/gq.svg","mtime":"2019-05-14T13:11:18+02:00","size":5188,"digest":"0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9","integrity":"sha256-DI3+f5VDMHBWu+bW5EoWwXIBIo5TRNWv7BzPG5pesvk="},"flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg":{"logical_path":"flags/1x1/gq.svg","mtime":"2019-05-14T13:11:18+02:00","size":5280,"digest":"ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8","integrity":"sha256-7Ldh5ttZub+Lo3Uz6vDGC3/MfA36L88oHuhMlw3LEPg="},"flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg":{"logical_path":"flags/4x3/gr.svg","mtime":"2019-05-14T13:11:18+02:00","size":818,"digest":"4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80","integrity":"sha256-SkCGMQOXv/poLUOb6GUKnijZTjKWO2QRthQ1KSrEz4A="},"flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg":{"logical_path":"flags/1x1/gr.svg","mtime":"2019-05-14T13:11:18+02:00","size":875,"digest":"0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f","integrity":"sha256-DL0XGJLAVosFXTtlhdWKwT3WDfvPrRbtofT56tEd0W8="},"flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg":{"logical_path":"flags/4x3/gs.svg","mtime":"2019-05-14T13:11:18+02:00","size":34658,"digest":"e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486","integrity":"sha256-5FFpqTqelMFfXLdlpshjMZFx+5tNzlYJRBGCnNaI1IY="},"flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg":{"logical_path":"flags/1x1/gs.svg","mtime":"2019-05-14T13:11:18+02:00","size":35151,"digest":"3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a","integrity":"sha256-PvyeGzKWH5qp1/qiYm5ZYoK2PQSfZxfCN4so4/UI55o="},"flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg":{"logical_path":"flags/4x3/gt.svg","mtime":"2019-05-14T13:11:18+02:00","size":37857,"digest":"64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5","integrity":"sha256-ZKc0XPZvrPfzI9IUKuu0FyGREIp4rHSTsaYHe3isjsU="},"flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg":{"logical_path":"flags/1x1/gt.svg","mtime":"2019-05-14T13:11:18+02:00","size":37857,"digest":"436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911","integrity":"sha256-Q2oq89lc88sT3tiX8xnP1uLAh9Z4rQ6XHBmLDSwCmRE="},"flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg":{"logical_path":"flags/4x3/gu.svg","mtime":"2019-05-14T13:11:18+02:00","size":4859,"digest":"f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53","integrity":"sha256-9WCCLuI35Sd4KeY2E6YVou49jMYZbf//4PDVakmxHFM="},"flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg":{"logical_path":"flags/1x1/gu.svg","mtime":"2019-05-14T13:11:18+02:00","size":4644,"digest":"a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450","integrity":"sha256-pxydKQxmwaCSmwVDbcaoIpsRR9fMYjNuBMmt9pcDBFA="},"flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg":{"logical_path":"flags/4x3/gw.svg","mtime":"2019-05-14T13:11:18+02:00","size":816,"digest":"0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219","integrity":"sha256-DcnsF3Ne1gW2hnKUfOVcSaTsFVFJHM0SH0gsGHXN8hk="},"flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg":{"logical_path":"flags/1x1/gw.svg","mtime":"2019-05-14T13:11:18+02:00","size":892,"digest":"7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674","integrity":"sha256-eGjDBeSmSw2Ov9P3y4yIGEHXGn4MPq0mg/5QPIDeBnQ="},"flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg":{"logical_path":"flags/4x3/gy.svg","mtime":"2019-05-14T13:11:18+02:00","size":491,"digest":"c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85","integrity":"sha256-yRJuVExiUIq/uJjwrwvXnEb0x2fJ7W+ShBiiSw8kbYU="},"flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg":{"logical_path":"flags/1x1/gy.svg","mtime":"2019-05-14T13:11:18+02:00","size":484,"digest":"0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972","integrity":"sha256-DjuEnORg+Ksex89molvhupHom3LYsKpnmgVTRk83qXI="},"flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg":{"logical_path":"flags/4x3/hk.svg","mtime":"2019-05-14T13:11:18+02:00","size":3511,"digest":"cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7","integrity":"sha256-zs6RJsy/kVH+rf7XV5Hr8y1KFr6rEvGCQEUZ0Mwk7sc="},"flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg":{"logical_path":"flags/1x1/hk.svg","mtime":"2019-05-14T13:11:18+02:00","size":3561,"digest":"9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d","integrity":"sha256-n60A4G+QNIdxSTlJFLqivDKSIjsOMt8rH5OZ1N5uFn0="},"flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg":{"logical_path":"flags/4x3/hm.svg","mtime":"2019-05-14T13:11:18+02:00","size":1328,"digest":"4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9","integrity":"sha256-S0kjuB2iTWLr8xqbwK3fdr7vhFkzdLHL0DuhnzsS4+k="},"flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg":{"logical_path":"flags/1x1/hm.svg","mtime":"2019-05-14T13:11:18+02:00","size":1312,"digest":"776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61","integrity":"sha256-d2yCIROiLoNYEjTQX0C/wO04tgZI2H9RPz2j//lv+2E="},"flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg":{"logical_path":"flags/4x3/hn.svg","mtime":"2019-05-14T13:11:18+02:00","size":1115,"digest":"855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9","integrity":"sha256-hVyDB4YoOGKl85ng1p3/5StiI7kbMuMbVdVcgvL6Msk="},"flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg":{"logical_path":"flags/1x1/hn.svg","mtime":"2019-05-14T13:11:18+02:00","size":1119,"digest":"64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd","integrity":"sha256-ZMOLrJQDQXxOJ2v1U20oT8VBD8BLgKzTmpYdKY9DDb0="},"flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg":{"logical_path":"flags/4x3/hr.svg","mtime":"2019-05-14T13:11:18+02:00","size":41617,"digest":"c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af","integrity":"sha256-yMrYYfc5iiK50n6mgtJ3jfDd6OFG0wFCtSlNr5iIVK8="},"flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg":{"logical_path":"flags/1x1/hr.svg","mtime":"2019-05-14T13:11:18+02:00","size":41808,"digest":"60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489","integrity":"sha256-YMCT32dg5MxqvibDelK+O1FFjwJxLxjhHwiwfcYjtIk="},"flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg":{"logical_path":"flags/4x3/ht.svg","mtime":"2019-05-14T13:11:18+02:00","size":15231,"digest":"fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16","integrity":"sha256-/oHaBiKPo25/IRvsDZ8MAg9bnH+BU0tMsiUYSKonaxY="},"flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg":{"logical_path":"flags/1x1/ht.svg","mtime":"2019-05-14T13:11:18+02:00","size":15317,"digest":"dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9","integrity":"sha256-3QGXwHiFnFpm/zpR06P5KAl2jja/q97A/Aq2DQaK/Nk="},"flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg":{"logical_path":"flags/4x3/hu.svg","mtime":"2019-05-14T13:11:18+02:00","size":277,"digest":"9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344","integrity":"sha256-mqmY5jZoeu3kkeMH89Bo2+WPLZC/367A560DuqWzY0Q="},"flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg":{"logical_path":"flags/1x1/hu.svg","mtime":"2019-05-14T13:11:18+02:00","size":279,"digest":"06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23","integrity":"sha256-BoWND71DIEluhJAQ41yP6C62GBiM9uwymu+T9eevHCM="},"flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg":{"logical_path":"flags/4x3/id.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293","integrity":"sha256-d12/7dZTOv31vQF8zBrU+PQjjL6HOT2cg3pmkZbxcpM="},"flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg":{"logical_path":"flags/1x1/id.svg","mtime":"2019-05-14T13:11:18+02:00","size":242,"digest":"3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29","integrity":"sha256-OSDOZip+qTeywRcH2OH1PbUmEd0ATt91OwOJ7UkNnSk="},"flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg":{"logical_path":"flags/4x3/ie.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0","integrity":"sha256-Y2ihySRA/PgNPDVgdUO8qi1GYtbgvHrPZ0ndvEGKcsA="},"flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg":{"logical_path":"flags/1x1/ie.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3","integrity":"sha256-GZfp3mQPp2Rneqj11S94iLskoCkWDo9nsG29BDtPEbM="},"flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg":{"logical_path":"flags/4x3/il.svg","mtime":"2019-05-14T13:11:18+02:00","size":898,"digest":"d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178","integrity":"sha256-12iDojMPmgWkpkmQupVfwb6Qu0a8sZrlSMIYFufnQXg="},"flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg":{"logical_path":"flags/1x1/il.svg","mtime":"2019-05-14T13:11:18+02:00","size":851,"digest":"f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8","integrity":"sha256-9eZD0OEBaaQ4EZ3EQeoxALUqL/Vpu7OjrW0RMbR2Atg="},"flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg":{"logical_path":"flags/4x3/im.svg","mtime":"2019-05-14T13:11:18+02:00","size":9948,"digest":"bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf","integrity":"sha256-u66Kqd0Sn4RGVWr+SQQZStQzd9iC+acF/PHaK9v6vM8="},"flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg":{"logical_path":"flags/1x1/im.svg","mtime":"2019-05-14T13:11:18+02:00","size":10295,"digest":"767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3","integrity":"sha256-dn1ywuctcy1lybAWra2YN3jfu7K1tS5xgw9OQSl3KNM="},"flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg":{"logical_path":"flags/4x3/in.svg","mtime":"2019-05-14T13:11:18+02:00","size":1077,"digest":"519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29","integrity":"sha256-UZ4zMhuLK6cKC3VX1mxi1+/clyOJbEn4JSixBwKP/ik="},"flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg":{"logical_path":"flags/1x1/in.svg","mtime":"2019-05-14T13:11:18+02:00","size":1091,"digest":"27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361","integrity":"sha256-J4MfdtxqIYpSm25dDq/EwZyZlGEye3wBP1kibAYBo2E="},"flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg":{"logical_path":"flags/4x3/io.svg","mtime":"2019-05-14T13:11:18+02:00","size":27446,"digest":"8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6","integrity":"sha256-jSWo6Y9oIZm0E637y2iYw3BYybrgheQn+6sD1W6MDeY="},"flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg":{"logical_path":"flags/1x1/io.svg","mtime":"2019-05-14T13:11:18+02:00","size":27497,"digest":"627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde","integrity":"sha256-Yn87DO9y/ZH/Qm10oAfcMtdMn+Z3zyyDVcuoQ1nhb94="},"flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg":{"logical_path":"flags/4x3/iq.svg","mtime":"2019-05-14T13:11:18+02:00","size":1479,"digest":"96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6","integrity":"sha256-lrJNFDkYTQpMNcp86mXl8gRpoOjIQ4ljqtAW5Zw5nMY="},"flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg":{"logical_path":"flags/1x1/iq.svg","mtime":"2019-05-14T13:11:18+02:00","size":1484,"digest":"af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669","integrity":"sha256-rwTbE5+MRM/gxhLiwF6EjM+tiPu/y1jojNt8gNs2Vmk="},"flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg":{"logical_path":"flags/4x3/ir.svg","mtime":"2019-05-14T13:11:18+02:00","size":15484,"digest":"db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019","integrity":"sha256-2ywjDTVa3isawjXsZHuxU15HA8Y5pE+c4RJHMnLuEBk="},"flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg":{"logical_path":"flags/1x1/ir.svg","mtime":"2019-05-14T13:11:18+02:00","size":15387,"digest":"c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63","integrity":"sha256-xkjL9W/I8yT9pHfqgWeDyd+KfTmPRfX5SswcFsiHe2M="},"flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg":{"logical_path":"flags/4x3/is.svg","mtime":"2019-05-14T13:11:18+02:00","size":521,"digest":"29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7","integrity":"sha256-KVCGkxOJdyKXWLDzIro06Q2816inToggcpkz0kBR2ac="},"flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg":{"logical_path":"flags/1x1/is.svg","mtime":"2019-05-14T13:11:18+02:00","size":529,"digest":"b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01","integrity":"sha256-scXbHUtIU7gUTx2Iq6u/FPyIdSNARXuj4slKtdVMnAE="},"flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg":{"logical_path":"flags/4x3/it.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562","integrity":"sha256-0sFoBQ/FCa2sEWOwl7DtQJIXVgc1sngCrpJZWHwUZWI="},"flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg":{"logical_path":"flags/1x1/it.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea","integrity":"sha256-WS00+2ZkMPoA+Y0zNiPV76PI4OZaxO7ga7xMHefOS+o="},"flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg":{"logical_path":"flags/4x3/je.svg","mtime":"2019-05-14T13:11:18+02:00","size":4776,"digest":"b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35","integrity":"sha256-s2Ok46IWMPEHkcLr63+RgyCBbvh8FV1P0pzjeYL03zU="},"flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg":{"logical_path":"flags/1x1/je.svg","mtime":"2019-05-14T13:11:18+02:00","size":4757,"digest":"6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9","integrity":"sha256-bUP3TjDgmbwFbakl7DTAIAcI8KbpDaNNseWdVM4Qz9k="},"flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg":{"logical_path":"flags/4x3/jm.svg","mtime":"2019-05-14T13:11:18+02:00","size":392,"digest":"3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823","integrity":"sha256-PRM/vCVk8p4DaFXoviJNFXn+Zv5J4PWiugvc88snKCM="},"flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg":{"logical_path":"flags/1x1/jm.svg","mtime":"2019-05-14T13:11:18+02:00","size":392,"digest":"1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467","integrity":"sha256-GuqOpdjLxxf6PvMx2MqpoUIciKe9B25A+CdqW2+NBGc="},"flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg":{"logical_path":"flags/4x3/jo.svg","mtime":"2019-05-14T13:11:18+02:00","size":717,"digest":"eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6","integrity":"sha256-7uQyM5+OpnUJh+ESEYfrS1PsU33XzLJAwBjeY/epLbY="},"flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg":{"logical_path":"flags/1x1/jo.svg","mtime":"2019-05-14T13:11:18+02:00","size":694,"digest":"7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa","integrity":"sha256-eWmyCDxTXIW35xS3VUWaZgaUDgtd2xtx4k2vChgNFKo="},"flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg":{"logical_path":"flags/4x3/jp.svg","mtime":"2019-05-14T13:11:18+02:00","size":484,"digest":"2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe","integrity":"sha256-Lq3PxnuozVDB2obgjmd44BAsMHKGXauMMSzIgAbaCr4="},"flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg":{"logical_path":"flags/1x1/jp.svg","mtime":"2019-05-14T13:11:18+02:00","size":500,"digest":"551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5","integrity":"sha256-VRKBp15sb9ZOtls59WECtSwYL2w47gRclCL2WS8PZcU="},"flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg":{"logical_path":"flags/4x3/ke.svg","mtime":"2019-05-14T13:11:18+02:00","size":1383,"digest":"45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b","integrity":"sha256-RXkLw+we2O0BJHd6fJ4JFjNTta9P9wrmYEphtTcS30s="},"flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg":{"logical_path":"flags/1x1/ke.svg","mtime":"2019-05-14T13:11:18+02:00","size":1495,"digest":"2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b","integrity":"sha256-LMok7PAkuAFUPAVy78mWn/2vJc7DE+IUnGSWGDm8MBs="},"flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg":{"logical_path":"flags/4x3/kg.svg","mtime":"2019-05-14T13:11:18+02:00","size":3387,"digest":"3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49","integrity":"sha256-OHn4kx10zJxZJyYfQJWyu3hvPWLIA7KpbsVQoj+un0k="},"flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg":{"logical_path":"flags/1x1/kg.svg","mtime":"2019-05-14T13:11:18+02:00","size":3337,"digest":"74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140","integrity":"sha256-dDGJMoCPhbct8wg1jy8mmasMt6tPetPITEvkAk8PsUA="},"flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg":{"logical_path":"flags/4x3/kh.svg","mtime":"2019-05-14T13:11:18+02:00","size":7295,"digest":"7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e","integrity":"sha256-dAn6tLpOZ223tcYQILl4k7FzX+C4456bT5YQhAC+cE4="},"flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg":{"logical_path":"flags/1x1/kh.svg","mtime":"2019-05-14T13:11:18+02:00","size":7296,"digest":"2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042","integrity":"sha256-JgP2phtADLErhzl+66YK4XB1EUZ9XgxDDAWAm/ieUEI="},"flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg":{"logical_path":"flags/4x3/ki.svg","mtime":"2019-05-14T13:11:18+02:00","size":5818,"digest":"617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5","integrity":"sha256-YXwbUvPZrumdCU7b0Xdcrneq3iZqExjrRnGyuxYg3tU="},"flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg":{"logical_path":"flags/1x1/ki.svg","mtime":"2019-05-14T13:11:18+02:00","size":5955,"digest":"74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad","integrity":"sha256-dGFSZrRAok8Jq96uOFPX4REfDrp333HM0XbYP70f2a0="},"flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg":{"logical_path":"flags/4x3/km.svg","mtime":"2019-05-14T13:11:18+02:00","size":1061,"digest":"0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698","integrity":"sha256-DJvL9+Z3pUH8jf9vhIydkraYKsKTSudfqlaiuEa7Vpg="},"flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg":{"logical_path":"flags/1x1/km.svg","mtime":"2019-05-14T13:11:18+02:00","size":1044,"digest":"81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8","integrity":"sha256-gbD75T0JGUJw6O1Mvpvo6xrnJ+d5VwBTaa2L3GUd0cg="},"flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg":{"logical_path":"flags/4x3/kn.svg","mtime":"2019-05-14T13:11:18+02:00","size":816,"digest":"0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03","integrity":"sha256-BEL1X4HNOxBXxgkwHwrytQPYmolalUr4yXDfmX6SvQM="},"flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg":{"logical_path":"flags/1x1/kn.svg","mtime":"2019-05-14T13:11:18+02:00","size":820,"digest":"897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a","integrity":"sha256-iXw071S+5Ibw0k0hkeJAD0mhnZjvsZ+MPxon+wuXExo="},"flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg":{"logical_path":"flags/4x3/kp.svg","mtime":"2019-05-14T13:11:18+02:00","size":792,"digest":"a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e","integrity":"sha256-pU9yAZgrKVMDgbcaXioRwRU4YPIsBMCi2Ruw0g/t944="},"flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg":{"logical_path":"flags/1x1/kp.svg","mtime":"2019-05-14T13:11:18+02:00","size":855,"digest":"758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6","integrity":"sha256-dY7M2J7zcHgI+2jZMfCG5JMzkE9MxnyIRo88lvtDt7Y="},"flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg":{"logical_path":"flags/4x3/kr.svg","mtime":"2019-05-14T13:11:18+02:00","size":1827,"digest":"c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06","integrity":"sha256-wLmyyFQTNBDArZytvBCx4LrPAwVRmIMSbVW/oyFPnQY="},"flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg":{"logical_path":"flags/1x1/kr.svg","mtime":"2019-05-14T13:11:18+02:00","size":1733,"digest":"7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b","integrity":"sha256-fARXrF0oSyi3QuouBhoaoqNfYxceRks6frUBpIdWzns="},"flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg":{"logical_path":"flags/4x3/kw.svg","mtime":"2019-05-14T13:11:18+02:00","size":506,"digest":"81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb","integrity":"sha256-gcPV0lx7hA7xR4O1HRjGt8/GH5STLGZLvJ5Yef7wIOs="},"flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg":{"logical_path":"flags/1x1/kw.svg","mtime":"2019-05-14T13:11:18+02:00","size":510,"digest":"66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c","integrity":"sha256-ZmcCEaZ6TmHUZSoZ2CHcUZXwGiijqbKLfkxgSM2GsZw="},"flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg":{"logical_path":"flags/4x3/ky.svg","mtime":"2019-05-14T13:11:18+02:00","size":21886,"digest":"0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3","integrity":"sha256-D0q2bZUa4z+ADWgKqlcEgEupyIRNTYDlvuLj+g4QCvM="},"flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg":{"logical_path":"flags/1x1/ky.svg","mtime":"2019-05-14T13:11:18+02:00","size":22495,"digest":"fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e","integrity":"sha256-+19Xu1i3TSM3e62ZVKdauI0Vh69oVGzhN6aueoincB4="},"flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg":{"logical_path":"flags/4x3/kz.svg","mtime":"2019-05-14T13:11:18+02:00","size":11339,"digest":"39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb","integrity":"sha256-Oe3JUsWYxxviyVEJRKj69wjY5LNnta14pojRzTf1Ius="},"flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg":{"logical_path":"flags/1x1/kz.svg","mtime":"2019-05-14T13:11:18+02:00","size":11433,"digest":"924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c","integrity":"sha256-kkwE3BkmewSfNSE68OKwxUCTPAY4lDPLSqzY3aM7KGw="},"flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg":{"logical_path":"flags/4x3/la.svg","mtime":"2019-05-14T13:11:18+02:00","size":457,"digest":"e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3","integrity":"sha256-46NqO9AANELDoh06GSmV+m+zs8CKLarcjzj2Jza1seM="},"flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg":{"logical_path":"flags/1x1/la.svg","mtime":"2019-05-14T13:11:18+02:00","size":507,"digest":"c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5","integrity":"sha256-ydQiOol+Xik4pIkrvFk9OCgJO5Q5/D9t4hUg5AE928U="},"flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg":{"logical_path":"flags/4x3/lb.svg","mtime":"2019-05-14T13:11:18+02:00","size":2814,"digest":"508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f","integrity":"sha256-UIwqWptQ1gSJVnW58cHlkUw5Sn9Gj12CPrBHasqsvH8="},"flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg":{"logical_path":"flags/1x1/lb.svg","mtime":"2019-05-14T13:11:18+02:00","size":2754,"digest":"10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f","integrity":"sha256-EMm6jqeqMYnxanJzyDeYKoh/xN38nVFNj1pmDXI1b38="},"flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg":{"logical_path":"flags/4x3/lc.svg","mtime":"2019-05-14T13:11:18+02:00","size":373,"digest":"04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c","integrity":"sha256-BMzZL7FXhlQYH+uuow69a2Yg9WEVcwsqLWc8cSMHv1w="},"flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg":{"logical_path":"flags/1x1/lc.svg","mtime":"2019-05-14T13:11:18+02:00","size":373,"digest":"4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a","integrity":"sha256-T/tTr7i9KW1SasJv2AB6/HSFXpKDOok9PJNKXRLrFSo="},"flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg":{"logical_path":"flags/4x3/li.svg","mtime":"2019-05-14T13:11:18+02:00","size":8327,"digest":"3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40","integrity":"sha256-MFjcSuryvS2oy5EIkhN9cytW5enTQuVlpAWd4ajkDkA="},"flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg":{"logical_path":"flags/1x1/li.svg","mtime":"2019-05-14T13:11:18+02:00","size":8350,"digest":"0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f","integrity":"sha256-B4Ck8hi57kZuM9FCdLigFXWoazeHs0fjJpo7MBwiDV8="},"flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg":{"logical_path":"flags/4x3/lk.svg","mtime":"2019-05-14T13:11:18+02:00","size":11333,"digest":"a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe","integrity":"sha256-oT1qsdpRvjsdLFuA9NhmySPUKwF+GXRp4b/A3QIcS/4="},"flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg":{"logical_path":"flags/1x1/lk.svg","mtime":"2019-05-14T13:11:18+02:00","size":11345,"digest":"99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02","integrity":"sha256-mXWTY/Dfa4aP0TmL8FZmxoC6/h7uyLhZtk1FCTAhPgI="},"flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg":{"logical_path":"flags/4x3/lr.svg","mtime":"2019-05-14T13:11:18+02:00","size":724,"digest":"b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf","integrity":"sha256-sGodcImYJrMFzjh/ox4foL2zvLF8E5LxX5lc4dunI88="},"flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg":{"logical_path":"flags/1x1/lr.svg","mtime":"2019-05-14T13:11:18+02:00","size":697,"digest":"820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd","integrity":"sha256-ggqdAj5bHmjtZAv6uo+ErUN5xCpsXJgst2sDkN0ry90="},"flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg":{"logical_path":"flags/4x3/ls.svg","mtime":"2019-05-14T13:11:18+02:00","size":1222,"digest":"d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e","integrity":"sha256-0CvO/nwpjBU2ZfNcM+7bCOLis0U1DkvxcUqHq/hrLQ4="},"flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg":{"logical_path":"flags/1x1/ls.svg","mtime":"2019-05-14T13:11:18+02:00","size":1245,"digest":"85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb","integrity":"sha256-hccxwxOkbbEr2yf+Ip6ffQUrRHxiRmO3P/odurl/A/s="},"flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg":{"logical_path":"flags/4x3/lt.svg","mtime":"2019-05-14T13:11:18+02:00","size":445,"digest":"c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51","integrity":"sha256-wI6xihXSADy1REMrEcUIHT1XQTcGabTfMG0ca84Uy1E="},"flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg":{"logical_path":"flags/1x1/lt.svg","mtime":"2019-05-14T13:11:18+02:00","size":445,"digest":"c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5","integrity":"sha256-wb1+PSiaybDfBtRyN3gOr00w8BKB7VCn35oivDokicU="},"flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg":{"logical_path":"flags/4x3/lu.svg","mtime":"2019-05-14T13:11:18+02:00","size":231,"digest":"99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f","integrity":"sha256-mee2rbOp4PhnsX6zsfDzPbkv0nz9e2UfYkU/NZus4i8="},"flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg":{"logical_path":"flags/1x1/lu.svg","mtime":"2019-05-14T13:11:18+02:00","size":235,"digest":"ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7","integrity":"sha256-q1RERfFq+kUFSSiKyGwsyaRYqdd0ezqJ1ezvfbnIPOc="},"flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg":{"logical_path":"flags/4x3/lv.svg","mtime":"2019-05-14T13:11:18+02:00","size":236,"digest":"f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886","integrity":"sha256-+IRNULifA2n3PVgNNnZVPn5V3YqyRg5ZKimlMNm+2IY="},"flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg":{"logical_path":"flags/1x1/lv.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4","integrity":"sha256-uuztSd1CSeNqJbDyOlxgGmnp3uMTdifNRFAZS4WpndQ="},"flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg":{"logical_path":"flags/4x3/ly.svg","mtime":"2019-05-14T13:11:18+02:00","size":534,"digest":"03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae","integrity":"sha256-AyCRIUg5Z/nXSEn7kmHeI+n/LgLE5Asp8c2gYxuKX64="},"flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg":{"logical_path":"flags/1x1/ly.svg","mtime":"2019-05-14T13:11:18+02:00","size":533,"digest":"1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe","integrity":"sha256-Hm4HCqpL/JelpEajm/dGqzxMgdn2LJdcqxZOFt46P/4="},"flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg":{"logical_path":"flags/4x3/ma.svg","mtime":"2019-05-14T13:11:18+02:00","size":253,"digest":"9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63","integrity":"sha256-miXMfCho+kWyUd0bmaC+O1g99pcyFGFCAg/pxsDJW2M="},"flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg":{"logical_path":"flags/1x1/ma.svg","mtime":"2019-05-14T13:11:18+02:00","size":253,"digest":"4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3","integrity":"sha256-Txi5w1W4uL8NtputsjWhg9vVWN62Q5vwO08Y5Wg3p/M="},"flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg":{"logical_path":"flags/4x3/mc.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2","integrity":"sha256-sMUFmeoqVQaApqhnV5kw4LR9PgUZOnKUomt4SaetNeI="},"flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg":{"logical_path":"flags/1x1/mc.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28","integrity":"sha256-jx/mIQM4OZ2HkdkfOSNLGgms8qpeA4dpYEjccGhTSig="},"flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg":{"logical_path":"flags/4x3/md.svg","mtime":"2019-05-14T13:11:18+02:00","size":11283,"digest":"8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643","integrity":"sha256-iEnu9735Fuli97sxr4fI1HrvM/n0ogF7LOVcQWbnlkM="},"flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg":{"logical_path":"flags/1x1/md.svg","mtime":"2019-05-14T13:11:18+02:00","size":11387,"digest":"43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4","integrity":"sha256-Q/G7QVdUWr5ueSFUWe+1SNkTu+eSIHjNQMtyKk4Z2bQ="},"flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg":{"logical_path":"flags/4x3/me.svg","mtime":"2019-05-14T13:11:18+02:00","size":63177,"digest":"983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d","integrity":"sha256-mD1FLUPPuNYov8XAz0mRwro88OOecKpTU8/U6ew9pi0="},"flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg":{"logical_path":"flags/1x1/me.svg","mtime":"2019-05-14T13:11:18+02:00","size":64191,"digest":"104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f","integrity":"sha256-EE1qlgOO8G09i4nJIhmW82SbW4IRObEbLgdpWw9v2i8="},"flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg":{"logical_path":"flags/4x3/mf.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086","integrity":"sha256-MfuFG/zCNA0vpD6GoJnMe+z8jn+Zak0spWvQUOZTcIY="},"flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg":{"logical_path":"flags/1x1/mf.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55","integrity":"sha256-/iDOm/kRYx1uee3yHIz/Bxby3B/97TlRVzVETZpm+lU="},"flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg":{"logical_path":"flags/4x3/mg.svg","mtime":"2019-05-14T13:11:18+02:00","size":305,"digest":"5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701","integrity":"sha256-Xv/pY+KfgEom+V27yVGa3UVKD9nrkY3f61Xh6ZoaJwE="},"flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg":{"logical_path":"flags/1x1/mg.svg","mtime":"2019-05-14T13:11:18+02:00","size":305,"digest":"9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91","integrity":"sha256-nlRs+3iBDZslyBSoSq3WkHiAuODN0uTjBzi1GefBrJE="},"flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg":{"logical_path":"flags/4x3/mh.svg","mtime":"2019-05-14T13:11:18+02:00","size":744,"digest":"d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782","integrity":"sha256-2M/RIwB9u5mqcAwzWVeSam1eh3q0loDHlimjJxbXp4I="},"flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg":{"logical_path":"flags/1x1/mh.svg","mtime":"2019-05-14T13:11:18+02:00","size":767,"digest":"3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45","integrity":"sha256-P+A9TQY6Ryn8i2j9Xp19Lu9uZcToKVTIP3axOM6i60U="},"flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg":{"logical_path":"flags/4x3/mk.svg","mtime":"2019-05-14T13:11:18+02:00","size":385,"digest":"6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c","integrity":"sha256-boBx0V8v8SXTC/idAA3LR9uVRc+bf/BPFHRlDsL00lw="},"flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg":{"logical_path":"flags/1x1/mk.svg","mtime":"2019-05-14T13:11:18+02:00","size":413,"digest":"fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5","integrity":"sha256-/ckhL58xHL+s5Wtlh0aKLoRREbaX7cEbft2p/PEAwdU="},"flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg":{"logical_path":"flags/4x3/ml.svg","mtime":"2019-05-14T13:11:18+02:00","size":279,"digest":"a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd","integrity":"sha256-pzAQLgxvY2LenBDvjabPexI0ZdAaKX56iYCLAfpHcc0="},"flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg":{"logical_path":"flags/1x1/ml.svg","mtime":"2019-05-14T13:11:18+02:00","size":282,"digest":"a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192","integrity":"sha256-pmE1XaIGsMt6xMhLbN9+QR+8qPyyca6Zn6YNXGdXgZI="},"flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg":{"logical_path":"flags/4x3/mm.svg","mtime":"2019-05-14T13:11:18+02:00","size":851,"digest":"6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16","integrity":"sha256-bQ0gfWYkdxEPK4Y0iAiIGNhAA4Y1jcvGaaLYxU0brhY="},"flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg":{"logical_path":"flags/1x1/mm.svg","mtime":"2019-05-14T13:11:18+02:00","size":868,"digest":"de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99","integrity":"sha256-3n1GtlQzQ69huplwRctBpwe9DbHnpYeZccqP3cvfnpk="},"flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg":{"logical_path":"flags/4x3/mn.svg","mtime":"2019-05-14T13:11:18+02:00","size":1256,"digest":"656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65","integrity":"sha256-ZW61Hoi/zoJAHkCA63kd3xbVccu6ECzdQxbF3kcRrGU="},"flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg":{"logical_path":"flags/1x1/mn.svg","mtime":"2019-05-14T13:11:18+02:00","size":1263,"digest":"ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123","integrity":"sha256-rSLLLBlafYyo5BdNsBHV9YI47iUDm1stomSdjKiwASM="},"flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg":{"logical_path":"flags/4x3/mo.svg","mtime":"2019-05-14T13:11:18+02:00","size":1516,"digest":"37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792","integrity":"sha256-N6EIiqaHrxOVG8k4huPlHLJG7M/eG1ZSjxiTJ+opF5I="},"flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg":{"logical_path":"flags/1x1/mo.svg","mtime":"2019-05-14T13:11:18+02:00","size":1550,"digest":"b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1","integrity":"sha256-tGOhw3tpEx1mLj+yrpN1g0WIJKCbz2j8ftLX/XKRONE="},"flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg":{"logical_path":"flags/4x3/mp.svg","mtime":"2019-05-14T13:11:18+02:00","size":23425,"digest":"ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14","integrity":"sha256-7NEsrcNY/fKT6FbAo//AlAkSPKvTxyASJbLSG1lVHhQ="},"flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg":{"logical_path":"flags/1x1/mp.svg","mtime":"2019-05-14T13:11:18+02:00","size":23663,"digest":"d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835","integrity":"sha256-0fS6EMFAnnEyU/H7sQfuzL1Owaj5A2Zj8awZka7lODU="},"flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg":{"logical_path":"flags/4x3/mq.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f","integrity":"sha256-tOGwipPBNkx55tYflbFvyluITabneDW8Dgrf/47MLX8="},"flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg":{"logical_path":"flags/1x1/mq.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8","integrity":"sha256-GctvfLc1TD/UDph8k6LXYynTSy7Thzw/Jf5WgC8lHqg="},"flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg":{"logical_path":"flags/4x3/mr.svg","mtime":"2019-05-14T13:11:18+02:00","size":450,"digest":"9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a","integrity":"sha256-n2SvPtXG2NH2i1ywn9GqnSjDyVEH4GP2Sg75Xwy5Qpo="},"flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg":{"logical_path":"flags/1x1/mr.svg","mtime":"2019-05-14T13:11:18+02:00","size":438,"digest":"0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576","integrity":"sha256-Dnm3vMZpu4cdlAIdsreLFiuYZ8fq+TTY96MCX9WQNXY="},"flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg":{"logical_path":"flags/4x3/ms.svg","mtime":"2019-05-14T13:11:18+02:00","size":6792,"digest":"32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc","integrity":"sha256-MmIN1wNTd3su5ilRVWl285jNOK41m1qMlzEaHcYeuLw="},"flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg":{"logical_path":"flags/1x1/ms.svg","mtime":"2019-05-14T13:11:18+02:00","size":6700,"digest":"4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c","integrity":"sha256-QQTU82y1zxxt545S6QvDxbi/omJhexanN2c/64wwoAw="},"flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg":{"logical_path":"flags/4x3/mt.svg","mtime":"2019-05-14T13:11:18+02:00","size":8807,"digest":"0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64","integrity":"sha256-DJgZqmmzS4TB7kNiCSJzcSLrOPEHvphkoGkKxm74qmQ="},"flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg":{"logical_path":"flags/1x1/mt.svg","mtime":"2019-05-14T13:11:18+02:00","size":10519,"digest":"3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106","integrity":"sha256-PD/nHyor8Nlh/RRa1+SMoenToFzOUUNUcUukVoUD0QY="},"flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg":{"logical_path":"flags/4x3/mu.svg","mtime":"2019-05-14T13:11:18+02:00","size":322,"digest":"c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059","integrity":"sha256-x4wj8UmXVrnbdirkNMo1TRSBRH+pTGa8EKypRDs5kFk="},"flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg":{"logical_path":"flags/1x1/mu.svg","mtime":"2019-05-14T13:11:18+02:00","size":322,"digest":"91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69","integrity":"sha256-kevHnQ+jBhJ+qLejP3fVso81xRbqkf8EaMc0Tcg422k="},"flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg":{"logical_path":"flags/4x3/mv.svg","mtime":"2019-05-14T13:11:18+02:00","size":292,"digest":"a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb","integrity":"sha256-oXyUfhetrmqs7wGj4THEFQqglJEbU/uurUF4NoPgCOs="},"flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg":{"logical_path":"flags/1x1/mv.svg","mtime":"2019-05-14T13:11:18+02:00","size":310,"digest":"d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01","integrity":"sha256-0TjpTZ0u0JPvFCXBFkSTt4AgL5p/eTckGnsIG3n/iwE="},"flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg":{"logical_path":"flags/4x3/mw.svg","mtime":"2019-05-14T13:11:18+02:00","size":3721,"digest":"21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632","integrity":"sha256-IfEWr99x34DjxZCExrpkCBT6U4lDAyj/VclAO1wjljI="},"flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg":{"logical_path":"flags/1x1/mw.svg","mtime":"2019-05-14T13:11:18+02:00","size":3930,"digest":"5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788","integrity":"sha256-XCIo0/HPH5z4yxWOgTICmBgowR6MrxF4NvxX+mvBx4g="},"flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg":{"logical_path":"flags/4x3/mx.svg","mtime":"2019-05-14T13:11:18+02:00","size":95864,"digest":"a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6","integrity":"sha256-ojX5sWkhWQt+eMqm92M5NhNWlG6vAEa63RBzK0ZHwLY="},"flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg":{"logical_path":"flags/1x1/mx.svg","mtime":"2019-05-14T13:11:18+02:00","size":91341,"digest":"cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292","integrity":"sha256-zasB683MwCDKFuE1XvH9GMoAQ7UB85nKjtxIrfqMcpI="},"flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg":{"logical_path":"flags/4x3/my.svg","mtime":"2019-05-14T13:11:18+02:00","size":1284,"digest":"0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59","integrity":"sha256-DtY1dM9fIMBmOrjNH3AOFQ+2Qf0Lk2AroBOrv6rl7lk="},"flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg":{"logical_path":"flags/1x1/my.svg","mtime":"2019-05-14T13:11:18+02:00","size":1275,"digest":"5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628","integrity":"sha256-Xo0x7wb/yK8zpWFtdgWS7NAixSr8i6M8ch8eSYnaBig="},"flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg":{"logical_path":"flags/4x3/mz.svg","mtime":"2019-05-14T13:11:18+02:00","size":2623,"digest":"752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a","integrity":"sha256-dS4ik5F7HS7OPwlxBMrq32pnkFSneenTvo5J3DJLuIo="},"flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg":{"logical_path":"flags/1x1/mz.svg","mtime":"2019-05-14T13:11:18+02:00","size":2604,"digest":"300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964","integrity":"sha256-MAy6l1rUPJYs7KDSZt7R/j0h1rTXAdZX+0KycmjqKWQ="},"flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg":{"logical_path":"flags/4x3/na.svg","mtime":"2019-05-14T13:11:18+02:00","size":1005,"digest":"a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8","integrity":"sha256-oGVaLnB1Enjmpg0x6Bj2coZKbmjos9M2Gy+7cPqb/vg="},"flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg":{"logical_path":"flags/1x1/na.svg","mtime":"2019-05-14T13:11:18+02:00","size":983,"digest":"1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d","integrity":"sha256-HOCJoYnbW+FesF34FV+b0Be2H8Gkl+WzAh/yymZOEi0="},"flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg":{"logical_path":"flags/4x3/nc.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305","integrity":"sha256-DHFx2RxEQU7WmAhhHbWI8Sg+5+NOqKdKmlEBukscswU="},"flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg":{"logical_path":"flags/1x1/nc.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c","integrity":"sha256-06FinwbcMgCvdmny2JX84ZCNLBygLXHlML36ZkapUWw="},"flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg":{"logical_path":"flags/4x3/ne.svg","mtime":"2019-05-14T13:11:18+02:00","size":279,"digest":"2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4","integrity":"sha256-K2HTCmy0VUU1U447dTkmhT6MYppJSjRyhrlzHIA1SOQ="},"flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg":{"logical_path":"flags/1x1/ne.svg","mtime":"2019-05-14T13:11:18+02:00","size":285,"digest":"9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1","integrity":"sha256-nF95jM19PdN3GuYotKOd+ypFeP79LgBvPOicPklNDLE="},"flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg":{"logical_path":"flags/4x3/nf.svg","mtime":"2019-05-14T13:11:18+02:00","size":5845,"digest":"4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3","integrity":"sha256-TmFbqoOotNs+Of4dJRq5E5Q9ZODNMg8lHWGatU51EtM="},"flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg":{"logical_path":"flags/1x1/nf.svg","mtime":"2019-05-14T13:11:18+02:00","size":5598,"digest":"45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103","integrity":"sha256-RUAyR8kAUEhIE6zyPFD1Q3eVKONGMXJ0Nzw8JP2DAQM="},"flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg":{"logical_path":"flags/4x3/ng.svg","mtime":"2019-05-14T13:11:18+02:00","size":263,"digest":"d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641","integrity":"sha256-1S/RiL6XPzHdNOWgs/7Q3mj+c2yKQcYCjZwkjAOMhkE="},"flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg":{"logical_path":"flags/1x1/ng.svg","mtime":"2019-05-14T13:11:18+02:00","size":263,"digest":"f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5","integrity":"sha256-8i7cxYZ1VNaey+Fa3Q+7sTiWMfPO0HpPggBlx3cMZfU="},"flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg":{"logical_path":"flags/4x3/ni.svg","mtime":"2019-05-14T13:11:18+02:00","size":18584,"digest":"2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610","integrity":"sha256-L7uIPkb747Ls/tnawATOtUbyXHeoSllm7qIkZ0rrxhA="},"flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg":{"logical_path":"flags/1x1/ni.svg","mtime":"2019-05-14T13:11:18+02:00","size":18664,"digest":"214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680","integrity":"sha256-IUrtFIthXEhG+EK0f5nPF4rGKpbPGMXdayNGcYS1ZoA="},"flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg":{"logical_path":"flags/4x3/nl.svg","mtime":"2019-05-14T13:11:18+02:00","size":367,"digest":"4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774","integrity":"sha256-Tw7OpSndTACZ3UGngB+lrESqBM2HLKMeEe/Vi1qBN3Q="},"flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg":{"logical_path":"flags/1x1/nl.svg","mtime":"2019-05-14T13:11:18+02:00","size":375,"digest":"9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68","integrity":"sha256-nI9g5jiHnWQkh4GJdeWMYc0xAvDmjDYHCCQ8B2Q2/2g="},"flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg":{"logical_path":"flags/4x3/no.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce","integrity":"sha256-Jw9+6dHS76ar8W9pP6uoWGra6ELXnYqtnj836Wwny84="},"flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg":{"logical_path":"flags/1x1/no.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979","integrity":"sha256-fTdzJejF7E3gN26fTBNGPxg69jfmxENxbyICDHoxOXk="},"flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg":{"logical_path":"flags/4x3/np.svg","mtime":"2019-05-14T13:11:18+02:00","size":1061,"digest":"69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8","integrity":"sha256-aWN92zoXPEUipxWYJ4qjJGLhdi403ZnJ3JmlFUM6bPg="},"flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg":{"logical_path":"flags/1x1/np.svg","mtime":"2019-05-14T13:11:18+02:00","size":1199,"digest":"44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2","integrity":"sha256-ROrRGMzjofy7cgzI1uq27La2IpIxX2GuWWOkAmLuEdI="},"flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg":{"logical_path":"flags/4x3/nr.svg","mtime":"2019-05-14T13:11:18+02:00","size":648,"digest":"0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d","integrity":"sha256-C9PAunu6xL1Zhbg4CW7uvWdxHTkGVhnvCS+ku1WyKm0="},"flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg":{"logical_path":"flags/1x1/nr.svg","mtime":"2019-05-14T13:11:18+02:00","size":671,"digest":"63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c","integrity":"sha256-Y7nETl3WalmJX1JwfcJNtb0eq25TUpjSTkFMDy2vyzw="},"flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg":{"logical_path":"flags/4x3/nu.svg","mtime":"2019-05-14T13:11:18+02:00","size":1748,"digest":"259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc","integrity":"sha256-JZmJ4e6gy/a0GjMXakycHqoueuZXGtgKMkxjCb1apfw="},"flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg":{"logical_path":"flags/1x1/nu.svg","mtime":"2019-05-14T13:11:18+02:00","size":1736,"digest":"1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53","integrity":"sha256-HLU1cI9k7Ys4aiReVx5nfpNQCa+S8rIUdgooMsHuG1M="},"flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg":{"logical_path":"flags/4x3/nz.svg","mtime":"2019-05-14T13:11:18+02:00","size":3019,"digest":"90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e","integrity":"sha256-kM7KKmg/vsOVqRt3sIgM6pnDssvbJMqlR0kly9zDZ14="},"flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg":{"logical_path":"flags/1x1/nz.svg","mtime":"2019-05-14T13:11:18+02:00","size":3045,"digest":"b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac","integrity":"sha256-sNePFlpy7dRlmSIqLqX2qRqCUpdcsD4zxMoI44mFmqw="},"flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg":{"logical_path":"flags/4x3/om.svg","mtime":"2019-05-14T13:11:18+02:00","size":22891,"digest":"aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965","integrity":"sha256-qtzKe8etMYQACXuEhJ3WTEdEMGzZtPFS+6NPLoQRaWU="},"flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg":{"logical_path":"flags/1x1/om.svg","mtime":"2019-05-14T13:11:18+02:00","size":22875,"digest":"705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed","integrity":"sha256-cF4r0rL8fRPBUqoGv7nm7krYspn4wGyhatrQsYsrGO0="},"flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg":{"logical_path":"flags/4x3/pa.svg","mtime":"2019-05-14T13:11:18+02:00","size":746,"digest":"027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38","integrity":"sha256-An5nm9ZdyqLFMUWhRmnB5nSkZ6iJ73AsviomD3yorTg="},"flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg":{"logical_path":"flags/1x1/pa.svg","mtime":"2019-05-14T13:11:18+02:00","size":662,"digest":"edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb","integrity":"sha256-7etPrq2qKG3n/cZn4l04rQzbzK7FAjGC/tajx06LCes="},"flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg":{"logical_path":"flags/4x3/pe.svg","mtime":"2019-05-14T13:11:18+02:00","size":74343,"digest":"7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611","integrity":"sha256-fsWYQnN8kNb/VD8YMf1ptR4efuGwaMOsYlnL8sIU1hE="},"flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg":{"logical_path":"flags/1x1/pe.svg","mtime":"2019-05-14T13:11:18+02:00","size":73629,"digest":"97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3","integrity":"sha256-l9G47R1O1eXwNIpzHKSjpLmrx9RARH3IelIfIp83XtM="},"flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg":{"logical_path":"flags/4x3/pf.svg","mtime":"2019-05-14T13:11:18+02:00","size":4292,"digest":"27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1","integrity":"sha256-J5Vcc8W+QEPFt932TI9G0RxmSOOx/A7+AouK/qIaQOE="},"flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg":{"logical_path":"flags/1x1/pf.svg","mtime":"2019-05-14T13:11:18+02:00","size":4235,"digest":"83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a","integrity":"sha256-g+Ph02+6ReAVxi+Tjm0YICntwF6/3FC8szhg82+W1zo="},"flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg":{"logical_path":"flags/4x3/pg.svg","mtime":"2019-05-14T13:11:18+02:00","size":1671,"digest":"c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897","integrity":"sha256-wv3SVR+QRMRh7M+uLXugo0epkUP2ACtxpCmUKvAheJc="},"flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg":{"logical_path":"flags/1x1/pg.svg","mtime":"2019-05-14T13:11:18+02:00","size":2111,"digest":"cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09","integrity":"sha256-z2Alf6hfknCx6ZgOcDQ1GGEQFn92wVO8RgwQ7ostSwk="},"flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg":{"logical_path":"flags/4x3/ph.svg","mtime":"2019-05-14T13:11:18+02:00","size":1303,"digest":"bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b","integrity":"sha256-vzOUhQps7GpTVCDqvOJj5/gZNBPkrx+zF8dtoCU4jBs="},"flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg":{"logical_path":"flags/1x1/ph.svg","mtime":"2019-05-14T13:11:18+02:00","size":1303,"digest":"006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169","integrity":"sha256-AGwyGO/+QmklLLljjeguoznrKJSVFwXGMFM87/qEIWk="},"flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg":{"logical_path":"flags/4x3/pk.svg","mtime":"2019-05-14T13:11:18+02:00","size":743,"digest":"b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500","integrity":"sha256-tk9qMuW7WY9Xz+ScSJnCAh8tFTZT89khAebhGyFY5QA="},"flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg":{"logical_path":"flags/1x1/pk.svg","mtime":"2019-05-14T13:11:18+02:00","size":694,"digest":"d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60","integrity":"sha256-0tWN75E8kIHF7u2l8LaJUGjsE8lVaU41lTHiNCIUXmA="},"flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg":{"logical_path":"flags/4x3/pl.svg","mtime":"2019-05-14T13:11:18+02:00","size":228,"digest":"f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f","integrity":"sha256-9VpxCZGpTC5sL58aeko267hLJLfJ2d9OH/6G1hMh+m8="},"flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg":{"logical_path":"flags/1x1/pl.svg","mtime":"2019-05-14T13:11:18+02:00","size":228,"digest":"fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7","integrity":"sha256-+vtTklk4XyuZ35EM/whXEKm02XBrdOTg+KbvYnYVxOc="},"flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg":{"logical_path":"flags/4x3/pm.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5","integrity":"sha256-j2M40q4+DkKtyXVHIMohrUl5CVz210Z6jbWlocPgsqU="},"flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg":{"logical_path":"flags/1x1/pm.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b","integrity":"sha256-YwKcYZjcQsQE7DmAeplSix0Zju7qb5oeMJVIJCSAFAs="},"flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg":{"logical_path":"flags/4x3/pn.svg","mtime":"2019-05-14T13:11:18+02:00","size":10953,"digest":"4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8","integrity":"sha256-QAbBHKgwEcDdYKE6wwsn2gV4ufE2i9jG3lqrQj9mYtg="},"flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg":{"logical_path":"flags/1x1/pn.svg","mtime":"2019-05-14T13:11:18+02:00","size":8624,"digest":"6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd","integrity":"sha256-bEM/f5y3nG1e17vq3opJXjsmyiYE9P05lQlhCWhKxd0="},"flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg":{"logical_path":"flags/4x3/pr.svg","mtime":"2019-05-14T13:11:18+02:00","size":634,"digest":"6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132","integrity":"sha256-YofhUV+oDi0FEz7ZPxTKA6G+aQmp72xzb9YPnJ/nMTI="},"flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg":{"logical_path":"flags/1x1/pr.svg","mtime":"2019-05-14T13:11:18+02:00","size":622,"digest":"526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd","integrity":"sha256-UmmFs6bS1t5XftDtktC0nOhUZn4/9jAwSBP9WvFVJ80="},"flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg":{"logical_path":"flags/4x3/ps.svg","mtime":"2019-05-14T13:11:18+02:00","size":558,"digest":"31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b","integrity":"sha256-MfUOH8tEuapunORHPDCF90TnDqD6H9jYV4f057DEpps="},"flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg":{"logical_path":"flags/1x1/ps.svg","mtime":"2019-05-14T13:11:18+02:00","size":544,"digest":"c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04","integrity":"sha256-xDkYvHG+9xsk3UboysxT4N9T4C3M5hmdBtEaRjfwigQ="},"flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg":{"logical_path":"flags/4x3/pt.svg","mtime":"2019-05-14T13:11:18+02:00","size":8393,"digest":"9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92","integrity":"sha256-mqsgyu1xTuR/xAjwFwN66pSmSbO6TYfi2jeHDuMeT5I="},"flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg":{"logical_path":"flags/1x1/pt.svg","mtime":"2019-05-14T13:11:18+02:00","size":8775,"digest":"a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966","integrity":"sha256-owmGnlAYyWkKZevfii1p1h+CdyBop5IPloDtBYGuWWY="},"flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg":{"logical_path":"flags/4x3/pw.svg","mtime":"2019-05-14T13:11:18+02:00","size":467,"digest":"9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a","integrity":"sha256-kmIDfRFND2FXHHT5pUVYCXCbQ+ZWVEOuJmeYHuy18So="},"flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg":{"logical_path":"flags/1x1/pw.svg","mtime":"2019-05-14T13:11:18+02:00","size":511,"digest":"a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6","integrity":"sha256-pvQgGWU64m1Dxum3vvg/yYz/jsXo0MUK18sKF9XlZaY="},"flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg":{"logical_path":"flags/4x3/py.svg","mtime":"2019-05-14T13:11:18+02:00","size":17312,"digest":"5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74","integrity":"sha256-W8np8N7pSuPZvYCub7GqwpfcgaHFktCnO8M4O85zr3Q="},"flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg":{"logical_path":"flags/1x1/py.svg","mtime":"2019-05-14T13:11:18+02:00","size":17478,"digest":"182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de","integrity":"sha256-GC7/MA9FB/2TmftjENHNO0WtrdeSStKBQAPHER7FwN4="},"flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg":{"logical_path":"flags/4x3/qa.svg","mtime":"2019-05-14T13:11:18+02:00","size":362,"digest":"32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e","integrity":"sha256-Msk5cPjlIYUO3fryqJ3/+YfwrjsLc6JTwwG2HPVHz54="},"flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg":{"logical_path":"flags/1x1/qa.svg","mtime":"2019-05-14T13:11:18+02:00","size":359,"digest":"182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c","integrity":"sha256-GC5Nis4mB9DALTwp1l6whK9xCSNXAGvEHNYBmB7DuBw="},"flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg":{"logical_path":"flags/4x3/re.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92","integrity":"sha256-iy6h8nJ8JmorgMsSqbcZX2tlb1IVUrZ4k7Z2Ggf5vJI="},"flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg":{"logical_path":"flags/1x1/re.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1","integrity":"sha256-B+t9hVAivGeLR7DOX9BdpQRNbd6GrTaX1K5Vxo/0R8E="},"flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg":{"logical_path":"flags/4x3/ro.svg","mtime":"2019-05-14T13:11:18+02:00","size":308,"digest":"4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f","integrity":"sha256-SreXVx4dnrMmSG91ZUpFkP0z8gRE+Ft3ugmX62E4wh8="},"flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg":{"logical_path":"flags/1x1/ro.svg","mtime":"2019-05-14T13:11:18+02:00","size":308,"digest":"ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75","integrity":"sha256-3fy67ATRG/f5Wr69HTpCsoYrGvj8qbAnZKbtDkCaHXU="},"flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg":{"logical_path":"flags/4x3/rs.svg","mtime":"2019-05-14T13:11:18+02:00","size":187640,"digest":"dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585","integrity":"sha256-3YpSRz6kDiOzk7X0ow0e3ZGGWqsWfwwYNa6EsV3M5YU="},"flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg":{"logical_path":"flags/1x1/rs.svg","mtime":"2019-05-14T13:11:18+02:00","size":187503,"digest":"42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865","integrity":"sha256-Qr9AIJyS5OcWna8p+8tyU7KATu56RjBRUpMn84hR+GU="},"flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg":{"logical_path":"flags/4x3/ru.svg","mtime":"2019-05-14T13:11:18+02:00","size":289,"digest":"13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d","integrity":"sha256-E/RSWkyq1uMa+lI9K8SgweY3fAvvG/2HJoITDT8ZnR0="},"flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg":{"logical_path":"flags/1x1/ru.svg","mtime":"2019-05-14T13:11:18+02:00","size":293,"digest":"b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe","integrity":"sha256-uXkqlj+vZnRH4EVtulvoCjs3wZekKE0VOaNDNyHZ4v4="},"flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg":{"logical_path":"flags/4x3/rw.svg","mtime":"2019-05-14T13:11:18+02:00","size":750,"digest":"bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422","integrity":"sha256-vDi81uGdKUGDmyU69uhjsTM4zeEXSHT5Z0RxAmwV5CI="},"flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg":{"logical_path":"flags/1x1/rw.svg","mtime":"2019-05-14T13:11:18+02:00","size":751,"digest":"456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c","integrity":"sha256-RWaYEjd1uD0rD6G5/gc/nM26C2vzmnA7iXnczhWOsyw="},"flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg":{"logical_path":"flags/4x3/sa.svg","mtime":"2019-05-14T13:11:18+02:00","size":10303,"digest":"2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d","integrity":"sha256-Ky/Wq7SEFdVAfFdsJKJPvYCvWHfvBs8tAmRS9sZ/X00="},"flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg":{"logical_path":"flags/1x1/sa.svg","mtime":"2019-05-14T13:11:18+02:00","size":10233,"digest":"d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae","integrity":"sha256-2evHPnlX+GYEFk3VBU+zJgGtFNff1L/nPaW90Quy+K4="},"flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg":{"logical_path":"flags/4x3/sb.svg","mtime":"2019-05-14T13:11:18+02:00","size":950,"digest":"37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf","integrity":"sha256-N3YZJwOdCje6CZXFn9MbvjbIoMoWHltyuBMeNln43d8="},"flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg":{"logical_path":"flags/1x1/sb.svg","mtime":"2019-05-14T13:11:18+02:00","size":956,"digest":"bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79","integrity":"sha256-vtv4RkzYLzkb/mF4xjBVtlDQzzruYMN/p5pYb5V4O3k="},"flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg":{"logical_path":"flags/4x3/sc.svg","mtime":"2019-05-14T13:11:18+02:00","size":568,"digest":"f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345","integrity":"sha256-9qL483vpPwdgC0kbUstY2A10uS2KzgrzE/TOCBsNE0U="},"flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg":{"logical_path":"flags/1x1/sc.svg","mtime":"2019-05-14T13:11:18+02:00","size":573,"digest":"5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60","integrity":"sha256-Xc0BuYw0RgyWJCgPtQR4EfuufZdmIM0KcK1CY6kIW2A="},"flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg":{"logical_path":"flags/4x3/sd.svg","mtime":"2019-05-14T13:11:18+02:00","size":494,"digest":"cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b","integrity":"sha256-zJz5foo3YiueG60ogR1GxEcVla+kSNwFXg46rnaH/ks="},"flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg":{"logical_path":"flags/1x1/sd.svg","mtime":"2019-05-14T13:11:18+02:00","size":496,"digest":"1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c","integrity":"sha256-H10T+XgAhay6rRPZWbGRjHlrp7BFCVSxXRReh86+BFw="},"flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg":{"logical_path":"flags/4x3/se.svg","mtime":"2019-05-14T13:11:18+02:00","size":688,"digest":"84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286","integrity":"sha256-hLBrzVvZDqjdbRw8jSeZqEPEewJWzgmK73VBSWRhgoY="},"flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg":{"logical_path":"flags/1x1/se.svg","mtime":"2019-05-14T13:11:18+02:00","size":701,"digest":"39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc","integrity":"sha256-OfEoaGZSz5FPhgERD8yayHm8ogRAcBO5Ov9MpPsu2bw="},"flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg":{"logical_path":"flags/4x3/sg.svg","mtime":"2019-05-14T13:11:18+02:00","size":890,"digest":"a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc","integrity":"sha256-qCrNkAd+djGN2wvpaZnZaVuan0Yn6KDzQdOYemJ0fcw="},"flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg":{"logical_path":"flags/1x1/sg.svg","mtime":"2019-05-14T13:11:18+02:00","size":954,"digest":"c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4","integrity":"sha256-wi4JNjRWiq4km/NfndyqZ5a18n12w5/1M2q/fxuKR9Q="},"flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg":{"logical_path":"flags/4x3/sh.svg","mtime":"2019-05-14T13:11:18+02:00","size":29702,"digest":"57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f","integrity":"sha256-V0cNmnWVXw+sYFqU6FO6tSTHRhpMAl6An7Cdt2Lr5G8="},"flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg":{"logical_path":"flags/1x1/sh.svg","mtime":"2019-05-14T13:11:18+02:00","size":30308,"digest":"8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16","integrity":"sha256-jQag//YeUetlNX0TjgBzZUWDW4ZJqiaUFS9M3J+UHBY="},"flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg":{"logical_path":"flags/4x3/si.svg","mtime":"2019-05-14T13:11:18+02:00","size":2055,"digest":"289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8","integrity":"sha256-KJ1kF/FUMj55It8J/8D0ne0xVIx+6AIMOcuFck/7zqg="},"flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg":{"logical_path":"flags/1x1/si.svg","mtime":"2019-05-14T13:11:18+02:00","size":2068,"digest":"ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051","integrity":"sha256-ykCl9POBGdb1L/092zavlZUaKqH63NiX9bwWQbsuAFE="},"flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg":{"logical_path":"flags/4x3/sj.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833","integrity":"sha256-Z9TN0mjQwM2T/FYbUGy1ZGy1CDhck+01DRH5SqHIODM="},"flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg":{"logical_path":"flags/1x1/sj.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c","integrity":"sha256-98SJYHAzE4A5YS1qvn9LC0ttraXKx114IE9ASg0pKxw="},"flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg":{"logical_path":"flags/4x3/sk.svg","mtime":"2019-05-14T13:11:18+02:00","size":1208,"digest":"a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5","integrity":"sha256-oL27f11pmP/p/LyAu98ObP82KXQNLOG41hAl4KizIrU="},"flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg":{"logical_path":"flags/1x1/sk.svg","mtime":"2019-05-14T13:11:18+02:00","size":1187,"digest":"a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed","integrity":"sha256-qCqBOy2Br5vhqndfIrLCRX0R6HDgctfiOVehHQh4+u0="},"flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg":{"logical_path":"flags/4x3/sl.svg","mtime":"2019-05-14T13:11:18+02:00","size":278,"digest":"be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb","integrity":"sha256-viZb7STP4LJXeCAfJR5S5Och49MZeVh1kTgF0a6oTrs="},"flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg":{"logical_path":"flags/1x1/sl.svg","mtime":"2019-05-14T13:11:18+02:00","size":441,"digest":"cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3","integrity":"sha256-y4vMuqIZV/AG7UrgFE2oHJmek72AFAI7FrUA/c3Dl9M="},"flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg":{"logical_path":"flags/4x3/sm.svg","mtime":"2019-05-14T13:11:18+02:00","size":15960,"digest":"d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27","integrity":"sha256-14GN8/jy1dvtJ9xaCoCx5Bzc1hMO7/Ih2ljwMh6SXyc="},"flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg":{"logical_path":"flags/1x1/sm.svg","mtime":"2019-05-14T13:11:18+02:00","size":15881,"digest":"6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd","integrity":"sha256-b4dmDcrJJbvbA2x5oOINOyCCFdMnvkxHZK4QadZGTv0="},"flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg":{"logical_path":"flags/4x3/sn.svg","mtime":"2019-05-14T13:11:18+02:00","size":427,"digest":"b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0","integrity":"sha256-sTGxejdLz70A1ELSgvpS8OTg5EjNoc36rCWpX/VkQ8A="},"flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg":{"logical_path":"flags/1x1/sn.svg","mtime":"2019-05-14T13:11:18+02:00","size":418,"digest":"d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772","integrity":"sha256-0YDTzphGlm3uaj2UM+3n0kgB3EMRY2qr1HDsW4dl13I="},"flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg":{"logical_path":"flags/4x3/so.svg","mtime":"2019-05-14T13:11:18+02:00","size":494,"digest":"3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e","integrity":"sha256-O1t3s3EplHgUSpS2DJlST7a5m/7bPcyXarcBheB/OZ4="},"flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg":{"logical_path":"flags/1x1/so.svg","mtime":"2019-05-14T13:11:18+02:00","size":501,"digest":"50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3","integrity":"sha256-UKqUHy0pVChe+eWsJgzdJkpzzy5LDGJ2d/BBQf/yr9M="},"flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg":{"logical_path":"flags/4x3/sr.svg","mtime":"2019-05-14T13:11:18+02:00","size":318,"digest":"94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2","integrity":"sha256-lNDwrvy96o17o1ZI7aUDfpm/QSZyPONkFlgupDsI0+I="},"flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg":{"logical_path":"flags/1x1/sr.svg","mtime":"2019-05-14T13:11:18+02:00","size":323,"digest":"3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82","integrity":"sha256-OUTWgwaNQ3Rxcl0i/XHMvmpjrjB/+XdWkEF9O/Jiz4I="},"flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg":{"logical_path":"flags/4x3/ss.svg","mtime":"2019-05-14T13:11:18+02:00","size":389,"digest":"f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a","integrity":"sha256-85HlACy86D+X99GhHChPouNqfW3HNHV9czZWgBqxfQo="},"flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg":{"logical_path":"flags/1x1/ss.svg","mtime":"2019-05-14T13:11:18+02:00","size":400,"digest":"853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a","integrity":"sha256-hTvZ9xPS9rH+VAqC6L9HVJEtohV1s/51a4dBdn8xj3o="},"flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg":{"logical_path":"flags/4x3/st.svg","mtime":"2019-05-14T13:11:18+02:00","size":919,"digest":"b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c","integrity":"sha256-tSu0iiwIAPXLSwe92Tw5CPd7y2gAvog+v5Q7vT2Z1Cw="},"flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg":{"logical_path":"flags/1x1/st.svg","mtime":"2019-05-14T13:11:18+02:00","size":923,"digest":"d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8","integrity":"sha256-2LWxyLn+lHCGpNJ30qxda5z/GI39N72mbIv14CxfrMg="},"flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg":{"logical_path":"flags/4x3/sv.svg","mtime":"2019-05-14T13:11:18+02:00","size":84037,"digest":"6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b","integrity":"sha256-bQLWPH8EyTiOmPiSzEPY2qIRD8hCQnWNVif80ke/0Js="},"flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg":{"logical_path":"flags/1x1/sv.svg","mtime":"2019-05-14T13:11:18+02:00","size":84509,"digest":"fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea","integrity":"sha256-+0yNfrmDlqk8W5w3GV1w6Ang1x2Lj5MW6EISH5W7guo="},"flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg":{"logical_path":"flags/4x3/sx.svg","mtime":"2019-05-14T13:11:18+02:00","size":13306,"digest":"fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224","integrity":"sha256-+2p7HLxbKe7rOaWuxk73qtQyw3u+hI0plVo3hrl2MiQ="},"flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg":{"logical_path":"flags/1x1/sx.svg","mtime":"2019-05-14T13:11:18+02:00","size":13115,"digest":"a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a","integrity":"sha256-o3sSQhL4UwuSGu92V8+zXCiVpzHHoG8zP67kyT8ygGo="},"flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg":{"logical_path":"flags/4x3/sy.svg","mtime":"2019-05-14T13:11:18+02:00","size":568,"digest":"e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50","integrity":"sha256-41+NiMhk7U847bL5+W1b1p9t8Hi1BRW4xUZ79rFon1A="},"flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg":{"logical_path":"flags/1x1/sy.svg","mtime":"2019-05-14T13:11:18+02:00","size":582,"digest":"5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9","integrity":"sha256-XVN71bQrWPbop+M/vllCoWEmq7Y57fnLWLiJOMV+uqk="},"flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg":{"logical_path":"flags/4x3/sz.svg","mtime":"2019-05-14T13:11:18+02:00","size":6755,"digest":"c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6","integrity":"sha256-xlrlkulDIXeHhINkvbTFczWGn0YmznBa2r3CYgZpwcY="},"flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg":{"logical_path":"flags/1x1/sz.svg","mtime":"2019-05-14T13:11:18+02:00","size":6706,"digest":"dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f","integrity":"sha256-3T0cZb3wkxdVPyBeWI49xzNqzsHLkxW/vg9b2Mpbuj8="},"flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg":{"logical_path":"flags/4x3/tc.svg","mtime":"2019-05-14T13:11:18+02:00","size":14585,"digest":"594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb","integrity":"sha256-WUtsyHBAg2xtZ3evtYM9Vl0+XnX0BDUKUUQ+xFiKHMs="},"flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg":{"logical_path":"flags/1x1/tc.svg","mtime":"2019-05-14T13:11:18+02:00","size":14843,"digest":"34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3","integrity":"sha256-NKNwBiUu6jQEiCIFhcMdBHtX4+eTTHcYDZMJcqrOrcM="},"flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg":{"logical_path":"flags/4x3/td.svg","mtime":"2019-05-14T13:11:18+02:00","size":270,"digest":"b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3","integrity":"sha256-tnoZeOO624lf9kDIC7bA4z6sNUIgwIzz/JPWK/XWhaM="},"flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg":{"logical_path":"flags/1x1/td.svg","mtime":"2019-05-14T13:11:18+02:00","size":282,"digest":"556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311","integrity":"sha256-VWs6eZHBcBDLfh/yPE7cwtzbjEBqEo1Af9Fl6ooZ0xE="},"flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg":{"logical_path":"flags/4x3/tf.svg","mtime":"2019-05-14T13:11:18+02:00","size":1091,"digest":"35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02","integrity":"sha256-Nc2DNRUh8wIqQ+AfDEDzRmOmasHpIEWXnzHT/WXBbQI="},"flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg":{"logical_path":"flags/1x1/tf.svg","mtime":"2019-05-14T13:11:18+02:00","size":1199,"digest":"485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5","integrity":"sha256-SF5x9h/1d3NdvEuhAlUVwiqDxI7n86LtSYBHZsNfbqU="},"flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg":{"logical_path":"flags/4x3/tg.svg","mtime":"2019-05-14T13:11:18+02:00","size":725,"digest":"24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff","integrity":"sha256-JLJfTCIT/jXl9VhterI6vwwlrSBJcIzVK6cuHse3VP8="},"flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg":{"logical_path":"flags/1x1/tg.svg","mtime":"2019-05-14T13:11:18+02:00","size":736,"digest":"05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374","integrity":"sha256-BfPZg5Kl7D5K7Pj2KdPQPwWsVau32dhBh9WZrP4nE3Q="},"flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg":{"logical_path":"flags/4x3/th.svg","mtime":"2019-05-14T13:11:18+02:00","size":287,"digest":"cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4","integrity":"sha256-zJNrrNhN3dFUVO8GvGTjV/g4VK80aS/Dc2MnLWH2N9Q="},"flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg":{"logical_path":"flags/1x1/th.svg","mtime":"2019-05-14T13:11:18+02:00","size":288,"digest":"de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172","integrity":"sha256-3oLL13DbK+U6jj1Z2G4rdIpdP5brhYT3uTZM770GoXI="},"flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg":{"logical_path":"flags/4x3/tj.svg","mtime":"2019-05-14T13:11:18+02:00","size":1831,"digest":"b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d","integrity":"sha256-uQvz4t1jJl1VtnlisWDfZfAhxCtuowTilDwQueKodJ0="},"flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg":{"logical_path":"flags/1x1/tj.svg","mtime":"2019-05-14T13:11:18+02:00","size":1788,"digest":"5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36","integrity":"sha256-X2Vx50sfhyD57MLTqiCYykXS561mArKlfCBjhHGbnzY="},"flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg":{"logical_path":"flags/4x3/tk.svg","mtime":"2019-05-14T13:11:18+02:00","size":791,"digest":"602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8","integrity":"sha256-YCUgspuQnJa66hejjrZU1sb7xwiPRqDLjY/jT/kuPLg="},"flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg":{"logical_path":"flags/1x1/tk.svg","mtime":"2019-05-14T13:11:18+02:00","size":781,"digest":"fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba","integrity":"sha256-/h3IqqBkOkWnTs7IrsCfD+IgfRBLs8KMC4RAXxJ1rro="},"flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg":{"logical_path":"flags/4x3/tl.svg","mtime":"2019-05-14T13:11:18+02:00","size":600,"digest":"ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b","integrity":"sha256-69uGKqWuXeGnIkJXHeqnC/siL0iKk7cOME8gdbR01Us="},"flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg":{"logical_path":"flags/1x1/tl.svg","mtime":"2019-05-14T13:11:18+02:00","size":582,"digest":"485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6","integrity":"sha256-SF8CGDvbGSujzm5fB24YQRJzn4g64Kj94zxFQ3e4SNY="},"flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg":{"logical_path":"flags/4x3/tm.svg","mtime":"2019-05-14T13:11:18+02:00","size":32579,"digest":"5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b","integrity":"sha256-XdtBKL8L7NfGBBPVQYAn9fAcpLxyVh1UuU/r/ueloks="},"flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg":{"logical_path":"flags/1x1/tm.svg","mtime":"2019-05-14T13:11:18+02:00","size":31884,"digest":"3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392","integrity":"sha256-NSGtVppAlaqNQWbV2QlPzP27PqQRIHrWhbbdWBTvM5I="},"flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg":{"logical_path":"flags/4x3/tn.svg","mtime":"2019-05-14T13:11:18+02:00","size":753,"digest":"ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79","integrity":"sha256-yifrUNiLEdILWwniu+y3dTJnIiSJkgxSZgjl0qzSLXk="},"flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg":{"logical_path":"flags/1x1/tn.svg","mtime":"2019-05-14T13:11:18+02:00","size":743,"digest":"222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b","integrity":"sha256-Iixs1HQsVY9I68rLR+ozQFdkL/+jRWocdeD62eco0Js="},"flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg":{"logical_path":"flags/4x3/to.svg","mtime":"2019-05-14T13:11:18+02:00","size":358,"digest":"c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1","integrity":"sha256-ycUJ/CT1kfvlK79zLEQpE4THh3luH8nHA6lzWHw/itE="},"flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg":{"logical_path":"flags/1x1/to.svg","mtime":"2019-05-14T13:11:18+02:00","size":364,"digest":"cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda","integrity":"sha256-zybftEtWuRWy8RiWNVy3eLk47VRCMxHWnXzaliaIfdo="},"flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg":{"logical_path":"flags/4x3/tr.svg","mtime":"2019-05-14T13:11:18+02:00","size":557,"digest":"c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4","integrity":"sha256-xA9pcHDPjYNYeFuSA9HI9DiXbjzWRKh9nuFvqZYN6qQ="},"flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg":{"logical_path":"flags/1x1/tr.svg","mtime":"2019-05-14T13:11:18+02:00","size":578,"digest":"627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5","integrity":"sha256-Yn3PkaHlFTwEXjOjRZtdVgAlMP3dP8U5J/TQ+36gBKU="},"flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg":{"logical_path":"flags/4x3/tt.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0","integrity":"sha256-BHhv/tveLJajCtHL9NsACEjxS9cAMkZR/Ig2Tl88L9A="},"flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg":{"logical_path":"flags/1x1/tt.svg","mtime":"2019-05-14T13:11:18+02:00","size":323,"digest":"6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30","integrity":"sha256-ajxzv6d4I2bZXmc9hH74+EwEdbNk01ne8e/SZCl7rDA="},"flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg":{"logical_path":"flags/4x3/tv.svg","mtime":"2019-05-14T13:11:18+02:00","size":2299,"digest":"20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7","integrity":"sha256-ILVufAovuqKgt7G9h6/GNoRA8XX7OgWJ3l406Z0WP9c="},"flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg":{"logical_path":"flags/1x1/tv.svg","mtime":"2019-05-14T13:11:18+02:00","size":2166,"digest":"8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc","integrity":"sha256-i84de94uINzEc+06M8ZuS+3PGs8tL/9tVDU6SAuMr7w="},"flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg":{"logical_path":"flags/4x3/tw.svg","mtime":"2019-05-14T13:11:18+02:00","size":945,"digest":"36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a","integrity":"sha256-NgcKwKFasfSBFHjaYudnh1apqiZrFB7QVJq6HA4EMzo="},"flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg":{"logical_path":"flags/1x1/tw.svg","mtime":"2019-05-14T13:11:18+02:00","size":960,"digest":"fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba","integrity":"sha256-/XoNsvOAiELKmRdvCXNW/p5vPBINaqnoxKnC3Uw5Q7o="},"flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg":{"logical_path":"flags/4x3/tz.svg","mtime":"2019-05-14T13:11:18+02:00","size":546,"digest":"51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7","integrity":"sha256-Ua19afBZB132G5ImRorw14ZCr0rTSnVA9kxb6oLoA9c="},"flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg":{"logical_path":"flags/1x1/tz.svg","mtime":"2019-05-14T13:11:18+02:00","size":605,"digest":"0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440","integrity":"sha256-BwPymnrgKpoXU8sXJt0pNNde06EujWP6qfqGbh/mFEA="},"flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg":{"logical_path":"flags/4x3/ua.svg","mtime":"2019-05-14T13:11:18+02:00","size":241,"digest":"7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a","integrity":"sha256-f32wPDtJKqrNEbCrrHDVQ6fA7FJlo21Sm7uAp8Qy2Bo="},"flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg":{"logical_path":"flags/1x1/ua.svg","mtime":"2019-05-14T13:11:18+02:00","size":241,"digest":"25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28","integrity":"sha256-JRkvqA8SDtsd0cR1f9e3nvOPXhcpI49BNQA+ahUBvyg="},"flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg":{"logical_path":"flags/4x3/ug.svg","mtime":"2019-05-14T13:11:18+02:00","size":3959,"digest":"7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0","integrity":"sha256-djXfU+r99BG+CAnfg1v7z/1hut1sTfPbCQnIsxiAFaA="},"flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg":{"logical_path":"flags/1x1/ug.svg","mtime":"2019-05-14T13:11:18+02:00","size":4038,"digest":"537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186","integrity":"sha256-U3809k5yP758t5AuoOYTA/Gtp5IUGX78OevixSziQYY="},"flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg":{"logical_path":"flags/4x3/um.svg","mtime":"2019-05-14T13:11:18+02:00","size":4524,"digest":"a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d","integrity":"sha256-oK6A40u/lGd91gUuqHzACQq6dH2rVEDlym4jH38HyW0="},"flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg":{"logical_path":"flags/1x1/um.svg","mtime":"2019-05-14T13:11:18+02:00","size":3975,"digest":"3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a","integrity":"sha256-PxvAm6vn/c8yUYu0nRqsOmbQIE+VXqzKKRxY1PTviVo="},"flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg":{"logical_path":"flags/4x3/us.svg","mtime":"2019-05-14T13:11:18+02:00","size":4468,"digest":"aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329","integrity":"sha256-rv2PflfRH3sEFtAdnGZas4SLEK+EnzWk13LVjSTYMyk="},"flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg":{"logical_path":"flags/1x1/us.svg","mtime":"2019-05-14T13:11:18+02:00","size":3924,"digest":"87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2","integrity":"sha256-h69FvpNG6MggMSl2q+My7hH4kx4p+jYTKNKGYKcRseI="},"flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg":{"logical_path":"flags/4x3/uy.svg","mtime":"2019-05-14T13:11:18+02:00","size":1721,"digest":"9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc","integrity":"sha256-n2NsgoOr9WzJMHRv1CfB0WRNz4c2xTdinfE/dg2pbrw="},"flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg":{"logical_path":"flags/1x1/uy.svg","mtime":"2019-05-14T13:11:18+02:00","size":1718,"digest":"e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e","integrity":"sha256-4ha3Yqk+xVv5tK49Nbf+vgsZKhIkb9ZsRROc53+yCV4="},"flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg":{"logical_path":"flags/4x3/uz.svg","mtime":"2019-05-14T13:11:18+02:00","size":1457,"digest":"697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb","integrity":"sha256-aX1ZZwU3IyO+3cyzYm0c5AWzYkkxXGsAb/FSniSQnOs="},"flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg":{"logical_path":"flags/1x1/uz.svg","mtime":"2019-05-14T13:11:18+02:00","size":1457,"digest":"aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353","integrity":"sha256-qjTL5Pbw5LXYkJdVeNKMybHojr1QPTvcppN0jrKbM1M="},"flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg":{"logical_path":"flags/4x3/va.svg","mtime":"2019-05-14T13:11:18+02:00","size":91241,"digest":"d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0","integrity":"sha256-0k08W+4QjDlpl8PVsr0ic0M3UtjCIutTFlDlFVGkr9A="},"flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg":{"logical_path":"flags/1x1/va.svg","mtime":"2019-05-14T13:11:18+02:00","size":90876,"digest":"01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95","integrity":"sha256-ARYMG//aEvC5RVS6DFAWKojagHlDYXM0vUxXoDCYXpU="},"flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg":{"logical_path":"flags/4x3/vc.svg","mtime":"2019-05-14T13:11:18+02:00","size":454,"digest":"ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb","integrity":"sha256-3fl5vuKIlBTloFrFXzmpyT804K/w018AdgUEmi2LWvs="},"flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg":{"logical_path":"flags/1x1/vc.svg","mtime":"2019-05-14T13:11:18+02:00","size":501,"digest":"ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9","integrity":"sha256-rHduFt7Bn/Li2SOPVB2uXZdygrRRqDqz1BIu/tI5K+k="},"flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg":{"logical_path":"flags/4x3/ve.svg","mtime":"2019-05-14T13:11:18+02:00","size":1171,"digest":"e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b","integrity":"sha256-4jq9AGzHWoxPnsHLEitG+bUuJsVgZTLSyGgnfUzNUjs="},"flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg":{"logical_path":"flags/1x1/ve.svg","mtime":"2019-05-14T13:11:18+02:00","size":1191,"digest":"1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef","integrity":"sha256-FIBxPyhxngqD2ixfEzNAfb+lvMDejJunGPz0cnPule8="},"flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg":{"logical_path":"flags/4x3/vg.svg","mtime":"2019-05-14T13:11:18+02:00","size":24818,"digest":"7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15","integrity":"sha256-f48kpNaZXk3Tnj2QmNrV4UZJgh+hL/wgDt8KWGKF7hU="},"flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg":{"logical_path":"flags/1x1/vg.svg","mtime":"2019-05-14T13:11:18+02:00","size":24997,"digest":"b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8","integrity":"sha256-tGS2p45Gwp355L2twmRiCPEcWRaHBkVgdflwVSok76g="},"flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg":{"logical_path":"flags/4x3/vi.svg","mtime":"2019-05-14T13:11:18+02:00","size":8775,"digest":"58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7","integrity":"sha256-WDETJaKTsEYESXbYmfKIzg++m/1wWiOUeps415kZg9c="},"flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg":{"logical_path":"flags/1x1/vi.svg","mtime":"2019-05-14T13:11:18+02:00","size":8730,"digest":"1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d","integrity":"sha256-HBMtLP9mzb23tqz1BLsM2ddXlZXYDD+mYE/yTKegGE0="},"flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg":{"logical_path":"flags/4x3/vn.svg","mtime":"2019-05-14T13:11:18+02:00","size":492,"digest":"a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a","integrity":"sha256-qRjTyc3DaLHS/5YU1Yy80dQ7cliJsLoY9dTmkwceOJo="},"flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg":{"logical_path":"flags/1x1/vn.svg","mtime":"2019-05-14T13:11:18+02:00","size":501,"digest":"895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791","integrity":"sha256-iV5CiuPZjJnbsCCIz47wQL+wMd9vFsPI/DZ4UF2Gl5E="},"flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg":{"logical_path":"flags/4x3/vu.svg","mtime":"2019-05-14T13:11:18+02:00","size":3771,"digest":"2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c","integrity":"sha256-LChsd4p77QPLYDqyS2jckYaPTwVM9PhRvdF6oWcxVxw="},"flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg":{"logical_path":"flags/1x1/vu.svg","mtime":"2019-05-14T13:11:18+02:00","size":3740,"digest":"51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a","integrity":"sha256-Ue8jEh4mQevurFDTHE5St9ANOrG8n8CtleqG/TYxl1o="},"flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg":{"logical_path":"flags/4x3/wf.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c","integrity":"sha256-9+msXtrBlqwy17r6BLXA2SS4np1+TzU1pqJsbBUjY5w="},"flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg":{"logical_path":"flags/1x1/wf.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee","integrity":"sha256-lakgp5qjLZL4o2IyGq5CMOFwJawE2XZZP0Qj0MN8Gu4="},"flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg":{"logical_path":"flags/4x3/ws.svg","mtime":"2019-05-14T13:11:18+02:00","size":663,"digest":"efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3","integrity":"sha256-78ZQWoAqP6IBi8EC/C4R24xzhGTGGTgbbtwy0KiTQaM="},"flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg":{"logical_path":"flags/1x1/ws.svg","mtime":"2019-05-14T13:11:18+02:00","size":645,"digest":"e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932","integrity":"sha256-46+4HAN8gUYgAnv2GsXiZmg8q3uleW7PELZMEQz8uTI="},"flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg":{"logical_path":"flags/4x3/ye.svg","mtime":"2019-05-14T13:11:18+02:00","size":278,"digest":"fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b","integrity":"sha256-/YiFbnDWawG08PYIk2phzzsdna1AopMvxdpNAfcqRHs="},"flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg":{"logical_path":"flags/1x1/ye.svg","mtime":"2019-05-14T13:11:18+02:00","size":278,"digest":"0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6","integrity":"sha256-DA4yMwhx5tg69Ur/t9rbvnNvl5kGhQghH7rlTbm73MY="},"flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg":{"logical_path":"flags/4x3/yt.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b","integrity":"sha256-Lu8XtUNCQILZ+bQqZ+hMILUuf36ujEMm1gcRFY2lHVs="},"flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg":{"logical_path":"flags/1x1/yt.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7","integrity":"sha256-kR2oB1M3/Y917MijOMKUy3cca5oIV2+Wyd4UN4iM0qc="},"flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg":{"logical_path":"flags/4x3/za.svg","mtime":"2019-05-14T13:11:18+02:00","size":856,"digest":"45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371","integrity":"sha256-RZkaKu4wcZhRDla/klIwcKrEJByv5sPduPibIKYdY3E="},"flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg":{"logical_path":"flags/1x1/za.svg","mtime":"2019-05-14T13:11:18+02:00","size":875,"digest":"bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8","integrity":"sha256-vAmomykxHqflgu9gv04Yr/fCneb77+MJRjynZXI6DOg="},"flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg":{"logical_path":"flags/4x3/zm.svg","mtime":"2019-05-14T13:11:18+02:00","size":5508,"digest":"07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2","integrity":"sha256-B8DzDYbmbQytnWbNnJOE2czhhE8VnSRd7/ZxcQH+ScI="},"flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg":{"logical_path":"flags/1x1/zm.svg","mtime":"2019-05-14T13:11:18+02:00","size":5429,"digest":"fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241","integrity":"sha256-/FvOODTHH+NmF+pfV/C9Hc84gKfGqlFdz5KuBn95YkE="},"flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg":{"logical_path":"flags/4x3/zw.svg","mtime":"2019-05-14T13:11:18+02:00","size":6791,"digest":"5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a","integrity":"sha256-UhfHTxTZ/dokS2nFmCu6vuBSrA8cwHBJJuix5iHlD5o="},"flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg":{"logical_path":"flags/1x1/zw.svg","mtime":"2019-05-14T13:11:18+02:00","size":6770,"digest":"a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9","integrity":"sha256-ozsZHGMXCbnh2F4G9bFVNftUTUZoyL74Ze3ioLaojtk="},"flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg":{"logical_path":"flags/4x3/es-ct.svg","mtime":"2019-05-14T13:11:18+02:00","size":261,"digest":"bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d","integrity":"sha256-vLtFSlDJpkfv1D3PBBRF8V6N1wZUveUwv2JAHU+3c40="},"flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg":{"logical_path":"flags/1x1/es-ct.svg","mtime":"2019-05-14T13:11:18+02:00","size":260,"digest":"7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef","integrity":"sha256-fxPrKy9cEdzNcEMoa+11QNTa1LGoNnsKyhuEBaNRsu8="},"flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg":{"logical_path":"flags/4x3/eu.svg","mtime":"2019-05-14T13:11:18+02:00","size":1252,"digest":"5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240","integrity":"sha256-XxKdtkMGNTJRt4+ZjVMdLxAZQEz6iQrmPtcNwxbH8kA="},"flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg":{"logical_path":"flags/1x1/eu.svg","mtime":"2019-05-14T13:11:18+02:00","size":1253,"digest":"ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127","integrity":"sha256-7Fmsja8qY+qOKZrWOiCERdaKlq/+ahCnMorLZ5nUQSc="},"flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg":{"logical_path":"flags/4x3/gb-eng.svg","mtime":"2019-05-14T13:11:18+02:00","size":245,"digest":"1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14","integrity":"sha256-GJX041rimfXYadokYv/PmN9LCNzdxTHI8XXklyAAGhQ="},"flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg":{"logical_path":"flags/1x1/gb-eng.svg","mtime":"2019-05-14T13:11:18+02:00","size":235,"digest":"d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3","integrity":"sha256-0Rr7h/QPNazaQ1qIbqBEvV4LbzY7oMcxnx0BgVUf7PM="},"flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg":{"logical_path":"flags/4x3/gb-nir.svg","mtime":"2019-05-14T13:11:18+02:00","size":23738,"digest":"b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf","integrity":"sha256-soDwnHh/SVwQdDds1nU3tAIW9nKRfn0gS7Erjnxyr68="},"flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg":{"logical_path":"flags/1x1/gb-nir.svg","mtime":"2019-05-14T13:11:18+02:00","size":25263,"digest":"2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41","integrity":"sha256-LlFucuDo4kTvQw5mCDIvjE+ydoB6sDMnmyplcN1o/UE="},"flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg":{"logical_path":"flags/4x3/gb-sct.svg","mtime":"2019-05-14T13:11:18+02:00","size":234,"digest":"1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506","integrity":"sha256-G55AeAKukBz42nQMOC7CsZghg312JxpzNG4MY8IkRQY="},"flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg":{"logical_path":"flags/1x1/gb-sct.svg","mtime":"2019-05-14T13:11:18+02:00","size":242,"digest":"d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3","integrity":"sha256-0B6KBqNA4wzlLoo6unymIHr7lv2yOKgVzGy5Lfj6XfM="},"flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg":{"logical_path":"flags/4x3/gb-wls.svg","mtime":"2019-05-14T13:11:18+02:00","size":9188,"digest":"5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9","integrity":"sha256-UjKz43ahmGbN3sgiXLokJ4OypIBjgRlX8c5aLDR8W8k="},"flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg":{"logical_path":"flags/1x1/gb-wls.svg","mtime":"2019-05-14T13:11:18+02:00","size":9083,"digest":"126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9","integrity":"sha256-EmYVvDWX/aHKTukx7yT2ws8lR5mMBtucHe1p/mbEeek="},"flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg":{"logical_path":"flags/4x3/un.svg","mtime":"2019-05-14T13:11:18+02:00","size":20268,"digest":"31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af","integrity":"sha256-Md7OIq4Yw+AehmSO8+9F8vWz2dKKHiu7zbHYfDevVa8="},"flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg":{"logical_path":"flags/1x1/un.svg","mtime":"2019-05-14T13:11:18+02:00","size":20476,"digest":"455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798","integrity":"sha256-RVtfMXPKmsZPITX6xOrXIX1/vgdVHQ0sxgIW+DII95g="},"leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png":{"logical_path":"leaflet/dist/images/layers.png","mtime":"2019-05-14T13:13:00+02:00","size":696,"digest":"1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6","integrity":"sha256-Hbvp0CjikvNvy6j4s6KNXokydU/CIVuaxp5M3s9RB8Y="},"leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png":{"logical_path":"leaflet/dist/images/layers-2x.png","mtime":"2019-05-14T13:13:00+02:00","size":1259,"digest":"066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf","integrity":"sha256-Bm2sqFDY/77wB68AsG6sABVyje4nnFHzy2xxbffELt8="},"leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png":{"logical_path":"leaflet/dist/images/marker-icon.png","mtime":"2019-05-14T13:13:00+02:00","size":1466,"digest":"574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437","integrity":"sha256-V0w6XMqF9BFAhbaEFZbWLwDXyJLHsD8oy/owHesdxDc="},"markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png":{"logical_path":"markers-soft.png","mtime":"2016-05-21T23:41:15+02:00","size":41226,"digest":"e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739","integrity":"sha256-54eE5O1wqv/d1zwxX6tZAjPMTntyOI191HoUeW/Hxzk="},"markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png":{"logical_path":"markers-shadow.png","mtime":"2016-05-21T23:41:15+02:00","size":535,"digest":"8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20","integrity":"sha256-hwOiJicQ9ePSnmXSrN+Q1lEuFZ4RnSe4I0cx2KYgiiA="},"markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png":{"logical_path":"markers-soft@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":66408,"digest":"c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf","integrity":"sha256-wedyU6i/vjDOwkiF1wRvRDt267ZvTJYfdwg7A/Sly68="},"markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png":{"logical_path":"markers-shadow@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":1469,"digest":"b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a","integrity":"sha256-shpTa+JzE/tQT2n1iZ/wsSRbJ2VxdprAjWwyw1Z25Ho="},"tinymce/langs/fr_FR-6aba16704f73dd83662a78ca3360f3d98b1f1ed80a67560313554446915611a5.js":{"logical_path":"tinymce/langs/fr_FR.js","mtime":"2019-04-17T02:49:18+02:00","size":14986,"digest":"6aba16704f73dd83662a78ca3360f3d98b1f1ed80a67560313554446915611a5","integrity":"sha256-aroWcE9z3YNmKnjKM2Dz2YsfHtgKZ1YDE1VERpFWEaU="},"markers-matte-497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9.png":{"logical_path":"markers-matte.png","mtime":"2016-05-21T23:41:15+02:00","size":14323,"digest":"497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9","integrity":"sha256-SXgmVFqQ4JokBQTRRTDrpFgjsZ/UQXXgnifEfNgi3bk="},"markers-matte@2x-948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823.png":{"logical_path":"markers-matte@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":31113,"digest":"948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823","integrity":"sha256-lI/IxEJvBPYJZO0gOUJH9FsLYOV10COYubaBDnopqCM="},"markers-plain-cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff.png":{"logical_path":"markers-plain.png","mtime":"2016-05-21T23:41:15+02:00","size":7946,"digest":"cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff","integrity":"sha256-zyM0I6pE51rAAx53uLpXHNMzEBBRfhGX5j+3sGhWwf8="},"leaflet/dist/images/marker-icon-2x-00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528.png":{"logical_path":"leaflet/dist/images/marker-icon-2x.png","mtime":"2019-05-14T13:13:00+02:00","size":2464,"digest":"00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528","integrity":"sha256-ABecTB7oMNOhCEEq4NKU9Vd2z+sIXGASmjmqb8SuJSg="},"leaflet/dist/images/marker-shadow-264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da.png":{"logical_path":"leaflet/dist/images/marker-shadow.png","mtime":"2019-05-14T13:13:00+02:00","size":618,"digest":"264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da","integrity":"sha256-Jk9cZAM58ELdcpBiz8BMF/jqDymIK1OOOEjtjxDttNo="},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2019-05-14T13:12:47+02:00","size":86,"digest":"ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410","integrity":"sha256-rmWnriLEwjEVlI/etcBckTfb0Tyi1CazxMPEGDRR5BA="},"jquery-ui/ui-icons_444444_256x240-31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d.png":{"logical_path":"jquery-ui/ui-icons_444444_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d","integrity":"sha256-MdmIdltOb1ZVPClYjFADgdw+bwqimAyCEiAuVkSu/V0="},"jquery-ui/ui-icons_555555_256x240-32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5.png":{"logical_path":"jquery-ui/ui-icons_555555_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5","integrity":"sha256-MhdSYdrudsgrsO3w7qFqVkIYZvvDHpTzwdVwqhFFAvU="},"jquery-ui/ui-icons_777620_256x240-0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b.png":{"logical_path":"jquery-ui/ui-icons_777620_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b","integrity":"sha256-CwIPxuaW2I0pbnux9h8esq2CeEjixzgqTD4JmecC3Zs="},"jquery-ui/ui-icons_777777_256x240-faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f.png":{"logical_path":"jquery-ui/ui-icons_777777_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f","integrity":"sha256-+vMgB64SDDAiE1V2JuZg3RDnEcXdTxET018m3AW3jS8="},"jquery-ui/ui-icons_cc0000_256x240-40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69.png":{"logical_path":"jquery-ui/ui-icons_cc0000_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69","integrity":"sha256-QJhaZLTV3SE/uif82GKhvRszepdnT2/wuewgq87kvGk="},"jquery-ui/ui-icons_ffffff_256x240-350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a.png":{"logical_path":"jquery-ui/ui-icons_ffffff_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a","integrity":"sha256-NQ3xtxMQN94g6DxcDzpBp3DSrEi1di6ncrP0qKe51Ho="},"tinymce/preinit-84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89.js":{"logical_path":"tinymce/preinit.js","mtime":"2019-05-14T13:13:17+02:00","size":82,"digest":"84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89","integrity":"sha256-hDKKU+eY3xL4ketJhxdz/Z+SVDnIYw6eIkI6gu+eb4k="},"tinymce/rails-bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca.js":{"logical_path":"tinymce/rails.js","mtime":"2019-05-14T13:13:17+02:00","size":1345,"digest":"bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca","integrity":"sha256-v3/VyVLyVIEBB1jd5qJoFJgHT5UJIw9gGzFzVqalT8o="},"tinymce/tinymce-56cf2f2424cb80d80288b9207d6d01dffdcf3b6849e1414c1f7df44b8c95db86.js":{"logical_path":"tinymce/tinymce.js","mtime":"2019-05-14T13:13:17+02:00","size":1042418,"digest":"56cf2f2424cb80d80288b9207d6d01dffdcf3b6849e1414c1f7df44b8c95db86","integrity":"sha256-Vs8vJCTLgNgCiLkgfW0B3/3PO2hJ4UFMH330S4yV24Y="},"tinymce/jquery.tinymce-05402ca7d9e16d0a48a6259f8c005507d800186c5187f8cab94e79803c657535.js":{"logical_path":"tinymce/jquery.tinymce.js","mtime":"2019-05-14T13:13:17+02:00","size":6689,"digest":"05402ca7d9e16d0a48a6259f8c005507d800186c5187f8cab94e79803c657535","integrity":"sha256-BUAsp9nhbQpIpiWfjABVB9gAGGxRh/jKuU55gDxldTU="},"tinymce/langs/readme-5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de.md":{"logical_path":"tinymce/langs/readme.md","mtime":"2019-05-14T13:13:17+02:00","size":151,"digest":"5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de","integrity":"sha256-WotqBNV7XIjj+38qhwuOLTpI7APOZHQgbEHfeMFVst4="},"tinymce/license-47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66.txt":{"logical_path":"tinymce/license.txt","mtime":"2019-05-14T13:13:17+02:00","size":26441,"digest":"47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66","integrity":"sha256-R6nc0ldIkaWkZREv2d/OvMfmGETt7Cf6k2pkZCAI/mY="},"tinymce/plugins/advlist/plugin-b7c8cf80403d2ccef198eece952f4426ca2dbc41bd3797796a75f984a9382ade.js":{"logical_path":"tinymce/plugins/advlist/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":4121,"digest":"b7c8cf80403d2ccef198eece952f4426ca2dbc41bd3797796a75f984a9382ade","integrity":"sha256-t8jPgEA9LM7xmO7OlS9EJsotvEG9N5d5anX5hKk4Kt4="},"tinymce/plugins/anchor/plugin-0e1e67988d427784f73513db28a206eb47a3ef546aa87882a80975a16111a33a.js":{"logical_path":"tinymce/plugins/anchor/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2108,"digest":"0e1e67988d427784f73513db28a206eb47a3ef546aa87882a80975a16111a33a","integrity":"sha256-Dh5nmI1Cd4T3NRPbKKIG60ej71RqqHiCqAl1oWERozo="},"tinymce/plugins/autolink/plugin-2e8a38a913070f4b3fb0252a5b5625057b8ee9f6fc529d65d3003328d112d5d8.js":{"logical_path":"tinymce/plugins/autolink/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2428,"digest":"2e8a38a913070f4b3fb0252a5b5625057b8ee9f6fc529d65d3003328d112d5d8","integrity":"sha256-Loo4qRMHD0s/sCUqW1YlBXuO6fb8Up1l0wAzKNES1dg="},"tinymce/plugins/autoresize/plugin-2adac0d857ae16f93c7ca4f92e36e76f4bbf885cb9a72755af78889627ed8738.js":{"logical_path":"tinymce/plugins/autoresize/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2233,"digest":"2adac0d857ae16f93c7ca4f92e36e76f4bbf885cb9a72755af78889627ed8738","integrity":"sha256-KtrA2FeuFvk8fKT5Ljbnb0u/iFy5pydVr3iIlifthzg="},"tinymce/plugins/autosave/plugin-a6960dd7eb9a053b0ce876b2eb946f8bf8fc429de45466e73d17129213229674.js":{"logical_path":"tinymce/plugins/autosave/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":3321,"digest":"a6960dd7eb9a053b0ce876b2eb946f8bf8fc429de45466e73d17129213229674","integrity":"sha256-ppYN1+uaBTsM6Hay65Rvi/j8Qp3kVGbnPRcSkhMilnQ="},"tinymce/plugins/bbcode/plugin-1a9fd62a2514ce8e15e8a3a99473674c1042c23adb359b35523931407910c7aa.js":{"logical_path":"tinymce/plugins/bbcode/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":3151,"digest":"1a9fd62a2514ce8e15e8a3a99473674c1042c23adb359b35523931407910c7aa","integrity":"sha256-Gp/WKiUUzo4V6KOplHNnTBBCwjrbNZs1UjkxQHkQx6o="},"tinymce/plugins/charmap/plugin-e68609a6c6f050af409dc34cba1eaf97b45dc4219500de60bb3ed63ea49279a0.js":{"logical_path":"tinymce/plugins/charmap/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":11935,"digest":"e68609a6c6f050af409dc34cba1eaf97b45dc4219500de60bb3ed63ea49279a0","integrity":"sha256-5oYJpsbwUK9AncNMuh6vl7RdxCGVAN5guz7WPqSSeaA="},"tinymce/plugins/code/plugin-32c177297fd26a1ceaa79d4b0c10ff5c3b332141dce46b97931e3228daa9bf1a.js":{"logical_path":"tinymce/plugins/code/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1225,"digest":"32c177297fd26a1ceaa79d4b0c10ff5c3b332141dce46b97931e3228daa9bf1a","integrity":"sha256-MsF3KX/Sahzqp51LDBD/XDszIUHc5GuXkx4yKNqpvxo="},"tinymce/plugins/codesample/plugin-d495c33177247da2e3845e4d849182792be7b0347e8707dd133db053727f86e9.js":{"logical_path":"tinymce/plugins/codesample/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":21054,"digest":"d495c33177247da2e3845e4d849182792be7b0347e8707dd133db053727f86e9","integrity":"sha256-1JXDMXckfaLjhF5NhJGCeSvnsDR+hwfdEz2wU3J/huk="},"tinymce/plugins/colorpicker/plugin-3270f40522357ea68191288332b98cbbdafe950a758b5f1514ad8890ba68619f.js":{"logical_path":"tinymce/plugins/colorpicker/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":541,"digest":"3270f40522357ea68191288332b98cbbdafe950a758b5f1514ad8890ba68619f","integrity":"sha256-MnD0BSI1fqaBkSiDMrmMu9r+lQp1i18VFK2IkLpoYZ8="},"tinymce/plugins/contextmenu/plugin-b528042e89738439d9d4b9d008a3a75284ef5233cd15aaa29c7e1ce6d48fb12e.js":{"logical_path":"tinymce/plugins/contextmenu/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":541,"digest":"b528042e89738439d9d4b9d008a3a75284ef5233cd15aaa29c7e1ce6d48fb12e","integrity":"sha256-tSgELolzhDnZ1LnQCKOnUoTvUjPNFaqinH4c5tSPsS4="},"tinymce/plugins/directionality/plugin-5004dc6b7d90139d4b1cf32d788845a48efc7055adb3aa25993219dd4df2fe5c.js":{"logical_path":"tinymce/plugins/directionality/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":4316,"digest":"5004dc6b7d90139d4b1cf32d788845a48efc7055adb3aa25993219dd4df2fe5c","integrity":"sha256-UATca32QE51LHPMteIhFpI78cFWts6olmTIZ3U3y/lw="},"tinymce/plugins/emoticons/js/emojis-c6f728975b5c86aca22f396025edefe6107b0dd4d95f5ef80daef569b545bce8.js":{"logical_path":"tinymce/plugins/emoticons/js/emojis.js","mtime":"2019-05-14T13:13:17+02:00","size":193207,"digest":"c6f728975b5c86aca22f396025edefe6107b0dd4d95f5ef80daef569b545bce8","integrity":"sha256-xvcol1tchqyiLzlgJe3v5hB7DdTZX174Da71abVFvOg="},"tinymce/plugins/emoticons/plugin-f4db839825ea5c884c78a8c289494544ac0fd28a14506f0d3cbb7362a9e9db77.js":{"logical_path":"tinymce/plugins/emoticons/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":8141,"digest":"f4db839825ea5c884c78a8c289494544ac0fd28a14506f0d3cbb7362a9e9db77","integrity":"sha256-9NuDmCXqXIhMeKjCiUlFRKwP0ooUUG8NPLtzYqnp23c="},"tinymce/plugins/fullpage/plugin-7040866d45dd50402f2871efcfb289ec8ca80b8699f1461c721b0b20bca76051.js":{"logical_path":"tinymce/plugins/fullpage/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":8195,"digest":"7040866d45dd50402f2871efcfb289ec8ca80b8699f1461c721b0b20bca76051","integrity":"sha256-cECGbUXdUEAvKHHvz7KJ7IyoC4aZ8UYcchsLILynYFE="},"tinymce/plugins/fullscreen/plugin-f548bdf0cbc2fd41c3c32938629a1b021e19680bac7869c274be5f3615eccfe7.js":{"logical_path":"tinymce/plugins/fullscreen/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2668,"digest":"f548bdf0cbc2fd41c3c32938629a1b021e19680bac7869c274be5f3615eccfe7","integrity":"sha256-9Ui98MvC/UHDwyk4YpobAh4ZaAuseGnCdL5fNhXsz+c="},"tinymce/plugins/help/plugin-366b05965f3d6cfddaba02c6784e0f377497beda0f28cc8cd840510fd8b657f4.js":{"logical_path":"tinymce/plugins/help/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":9311,"digest":"366b05965f3d6cfddaba02c6784e0f377497beda0f28cc8cd840510fd8b657f4","integrity":"sha256-NmsFll89bP3augLGeE4PN3SXvtoPKMyM2EBRD9i2V/Q="},"tinymce/plugins/hr/plugin-0e5548067a2ab0ad967e296104249f6b5d24a16b80befcdd3888c17b1a0e5624.js":{"logical_path":"tinymce/plugins/hr/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":840,"digest":"0e5548067a2ab0ad967e296104249f6b5d24a16b80befcdd3888c17b1a0e5624","integrity":"sha256-DlVIBnoqsK2WfilhBCSfa10koWuAvvzdOIjBexoOViQ="},"tinymce/plugins/image/plugin-53dce3c317e386c1989a5d82ec151d440f9ffc32a643dc9fba76ae2b036300c9.js":{"logical_path":"tinymce/plugins/image/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":28452,"digest":"53dce3c317e386c1989a5d82ec151d440f9ffc32a643dc9fba76ae2b036300c9","integrity":"sha256-U9zjwxfjhsGYml2C7BUdRA+f/DKmQ9yfunauKwNjAMk="},"tinymce/plugins/imagetools/plugin-49936c4208b2d6fbb340d11c56fa2a146d14c770e4cb39760a11099fea5c7aaa.js":{"logical_path":"tinymce/plugins/imagetools/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":22508,"digest":"49936c4208b2d6fbb340d11c56fa2a146d14c770e4cb39760a11099fea5c7aaa","integrity":"sha256-SZNsQgiy1vuzQNEcVvoqFG0Ux3Dkyzl2ChEJn+pceqo="},"tinymce/plugins/importcss/plugin-30cba659cc747bccf69602963b3c2b83e00c26e65f2b63e23eba5be5f8af5452.js":{"logical_path":"tinymce/plugins/importcss/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":4870,"digest":"30cba659cc747bccf69602963b3c2b83e00c26e65f2b63e23eba5be5f8af5452","integrity":"sha256-MMumWcx0e8z2lgKWOzwrg+AMJuZfK2PiPrpb5fivVFI="},"tinymce/plugins/insertdatetime/plugin-8559e2bda84f040abc77afc6610c0b61567fe174dcf2079b5aff82513c5ebe96.js":{"logical_path":"tinymce/plugins/insertdatetime/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":3205,"digest":"8559e2bda84f040abc77afc6610c0b61567fe174dcf2079b5aff82513c5ebe96","integrity":"sha256-hVnivahPBAq8d6/GYQwLYVZ/4XTc8gebWv+CUTxevpY="},"tinymce/plugins/legacyoutput/plugin-acfac6647afd7c0a7c720aea06b9a74a6580840858fe00327a311a6418d3dae3.js":{"logical_path":"tinymce/plugins/legacyoutput/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2795,"digest":"acfac6647afd7c0a7c720aea06b9a74a6580840858fe00327a311a6418d3dae3","integrity":"sha256-rPrGZHr9fAp8cgrqBrmnSmWAhAhY/gAyejEaZBjT2uM="},"tinymce/plugins/link/plugin-93a36e0f077d895707d9885a76c26e5b08e5acfab9f3d52cdd1ccc5d89404f1e.js":{"logical_path":"tinymce/plugins/link/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":16484,"digest":"93a36e0f077d895707d9885a76c26e5b08e5acfab9f3d52cdd1ccc5d89404f1e","integrity":"sha256-k6NuDwd9iVcH2YhadsJuWwjlrPq589Us3RzMXYlATx4="},"tinymce/plugins/lists/plugin-354eba74c0107c7f347aaab0ac206e01b8e0503d00f28cc0cc55f6c04f901f9e.js":{"logical_path":"tinymce/plugins/lists/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":27854,"digest":"354eba74c0107c7f347aaab0ac206e01b8e0503d00f28cc0cc55f6c04f901f9e","integrity":"sha256-NU66dMAQfH80eqqwrCBuAbjgUD0A8ozAzFX2wE+QH54="},"tinymce/plugins/media/plugin-ab1015dd22dff3d1edcc2d04b54f39b3f7ff7f7d783c0880b5edf6de58d78937.js":{"logical_path":"tinymce/plugins/media/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":17440,"digest":"ab1015dd22dff3d1edcc2d04b54f39b3f7ff7f7d783c0880b5edf6de58d78937","integrity":"sha256-qxAV3SLf89HtzC0EtU85s/f/f314PAiAte323ljXiTc="},"tinymce/plugins/nonbreaking/plugin-6039d3b3f9c68a3b29a6bb476760fa62da1d941e38ef8cb91e61c4aaa9456f98.js":{"logical_path":"tinymce/plugins/nonbreaking/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1421,"digest":"6039d3b3f9c68a3b29a6bb476760fa62da1d941e38ef8cb91e61c4aaa9456f98","integrity":"sha256-YDnTs/nGijspprtHZ2D6YtodlB4474y5HmHEqqlFb5g="},"tinymce/plugins/noneditable/plugin-3cb8e1ac660348b0453dca0e8549a9325dca0cf259adb96802f37e83fb8d17be.js":{"logical_path":"tinymce/plugins/noneditable/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1841,"digest":"3cb8e1ac660348b0453dca0e8549a9325dca0cf259adb96802f37e83fb8d17be","integrity":"sha256-PLjhrGYDSLBFPcoOhUmpMl3KDPJZrbloAvN+g/uNF74="},"tinymce/plugins/pagebreak/plugin-9e005e9e9abb08da742141d002238561c30dcd15549168e17c690f2c7c7a9dd3.js":{"logical_path":"tinymce/plugins/pagebreak/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1843,"digest":"9e005e9e9abb08da742141d002238561c30dcd15549168e17c690f2c7c7a9dd3","integrity":"sha256-ngBenpq7CNp0IUHQAiOFYcMNzRVUkWjhfGkPLHx6ndM="},"tinymce/plugins/paste/plugin-437f540601d04f07cb4c2434fdf377be3ac9634b180a878c2f2987f3ad897afc.js":{"logical_path":"tinymce/plugins/paste/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":24156,"digest":"437f540601d04f07cb4c2434fdf377be3ac9634b180a878c2f2987f3ad897afc","integrity":"sha256-Q39UBgHQTwfLTCQ0/fN3vjrJY0sYCoeMLymH862Jevw="},"tinymce/plugins/preview/plugin-36ce30c549b23aed9dd151603a23aafab512529d586067e34974877992c79eed.js":{"logical_path":"tinymce/plugins/preview/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1971,"digest":"36ce30c549b23aed9dd151603a23aafab512529d586067e34974877992c79eed","integrity":"sha256-Ns4wxUmyOu2d0VFgOiOq+rUSUp1YYGfjSXSHeZLHnu0="},"tinymce/plugins/print/plugin-4a91981252ff653a07dd12936abfb0b0c4191e33d85f5c5d5f7e8e73581b6a57.js":{"logical_path":"tinymce/plugins/print/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":787,"digest":"4a91981252ff653a07dd12936abfb0b0c4191e33d85f5c5d5f7e8e73581b6a57","integrity":"sha256-SpGYElL/ZToH3RKTar+wsMQZHjPYX1xdX36Oc1gbalc="},"tinymce/plugins/quickbars/plugin-54bba909c7a5b3f9086cec22e918e378945dfb855e4041a85c9e0fb00faaa510.js":{"logical_path":"tinymce/plugins/quickbars/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":10934,"digest":"54bba909c7a5b3f9086cec22e918e378945dfb855e4041a85c9e0fb00faaa510","integrity":"sha256-VLupCcels/kIbOwi6RjjeJRd+4VeQEGoXJ4PsA+qpRA="},"tinymce/plugins/save/plugin-0fd05e2ed11aac190c5d2a0ac32aa675d0bea06b519301d89151aaaa7b124674.js":{"logical_path":"tinymce/plugins/save/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1829,"digest":"0fd05e2ed11aac190c5d2a0ac32aa675d0bea06b519301d89151aaaa7b124674","integrity":"sha256-D9BeLtEarBkMXSoKwyqmddC+oGtRkwHYkVGqqnsSRnQ="},"tinymce/plugins/searchreplace/plugin-4bb6490f6586b4c50a56757a69be8e6577544d5353881a02621e2200b54e8a18.js":{"logical_path":"tinymce/plugins/searchreplace/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":8871,"digest":"4bb6490f6586b4c50a56757a69be8e6577544d5353881a02621e2200b54e8a18","integrity":"sha256-S7ZJD2WGtMUKVnV6ab6OZXdUTVNTiBoCYh4iALVOihg="},"tinymce/plugins/spellchecker/plugin-8fcd863cbf64e3cc62fe3fc1a4bfe417f8401b1d204d91d1c9da880c29a52162.js":{"logical_path":"tinymce/plugins/spellchecker/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":10437,"digest":"8fcd863cbf64e3cc62fe3fc1a4bfe417f8401b1d204d91d1c9da880c29a52162","integrity":"sha256-j82GPL9k48xi/j/BpL/kF/hAGx0gTZHRydqIDCmlIWI="},"tinymce/plugins/tabfocus/plugin-cbc31c55658d581cc1e0130e5bae26fb27f10e7f0c53879845d6295ffb27fefa.js":{"logical_path":"tinymce/plugins/tabfocus/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1915,"digest":"cbc31c55658d581cc1e0130e5bae26fb27f10e7f0c53879845d6295ffb27fefa","integrity":"sha256-y8McVWWNWBzB4BMOW64m+yfxDn8MU4eYRdYpX/sn/vo="},"tinymce/plugins/table/plugin-b11c6cd37f6d5badf46a9d96e452118b81881beb07fe41d2c0a3f7b405902234.js":{"logical_path":"tinymce/plugins/table/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":120791,"digest":"b11c6cd37f6d5badf46a9d96e452118b81881beb07fe41d2c0a3f7b405902234","integrity":"sha256-sRxs039tW630ap2W5FIRi4GIG+sH/kHSwKP3tAWQIjQ="},"tinymce/plugins/template/plugin-62d74415b497183892c093351d57ee4fe36938be5b0a84360925501efede022a.js":{"logical_path":"tinymce/plugins/template/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":7975,"digest":"62d74415b497183892c093351d57ee4fe36938be5b0a84360925501efede022a","integrity":"sha256-YtdEFbSXGDiSwJM1HVfuT+NpOL5bCoQ2CSVQHv7eAio="},"tinymce/plugins/textcolor/plugin-77c1248e72fe32cf181c36a070147484ee4560710d5f617a4670d65d11202207.js":{"logical_path":"tinymce/plugins/textcolor/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":537,"digest":"77c1248e72fe32cf181c36a070147484ee4560710d5f617a4670d65d11202207","integrity":"sha256-d8EkjnL+Ms8YHDagcBR0hO5FYHENX2F6RnDWXREgIgc="},"tinymce/plugins/textpattern/plugin-14c80d034b4d08368543a88cfdd7a71fe044d76a511e087752420957fe192e66.js":{"logical_path":"tinymce/plugins/textpattern/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":16350,"digest":"14c80d034b4d08368543a88cfdd7a71fe044d76a511e087752420957fe192e66","integrity":"sha256-FMgNA0tNCDaFQ6iM/denH+BE12pRHgh3UkIJV/4ZLmY="},"tinymce/plugins/toc/plugin-e6c05b09e6066ce22300ca4942a530d621362f8a2d69d21d486bf5f57ce86c63.js":{"logical_path":"tinymce/plugins/toc/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":3522,"digest":"e6c05b09e6066ce22300ca4942a530d621362f8a2d69d21d486bf5f57ce86c63","integrity":"sha256-5sBbCeYGbOIjAMpJQqUw1iE2L4otadIdSGv19XzobGM="},"tinymce/plugins/visualblocks/plugin-dc48dde1907640cf2cc67ab99de28b69b7b7a04479c9a2d3284a21e190a2fc5b.js":{"logical_path":"tinymce/plugins/visualblocks/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1655,"digest":"dc48dde1907640cf2cc67ab99de28b69b7b7a04479c9a2d3284a21e190a2fc5b","integrity":"sha256-3Ejd4ZB2QM8sxnq5neKLabe3oER5yaLTKEoh4ZCi/Fs="},"tinymce/plugins/visualchars/plugin-7a67008641a389395f71289303344cf2f9e699970d8ac27f8be769281c56a157.js":{"logical_path":"tinymce/plugins/visualchars/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":5729,"digest":"7a67008641a389395f71289303344cf2f9e699970d8ac27f8be769281c56a157","integrity":"sha256-emcAhkGjiTlfcSiTAzRM8vnmmZcNisJ/i+dpKBxWoVc="},"tinymce/plugins/wordcount/plugin-adeca7c01633cf92382c63b9f99934fcc1f8f4034b84b8a653f800bc6deadf86.js":{"logical_path":"tinymce/plugins/wordcount/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":12489,"digest":"adeca7c01633cf92382c63b9f99934fcc1f8f4034b84b8a653f800bc6deadf86","integrity":"sha256-reynwBYzz5I4LGO5+Zk0/MH49ANLhLimU/gAvG3q34Y="},"tinymce/skins/content/default/content-59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178.css":{"logical_path":"tinymce/skins/content/default/content.css","mtime":"2019-05-14T13:13:17+02:00","size":569,"digest":"59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178","integrity":"sha256-Wa+OK9y4QwgkM+NaE+dEUrtxZ1tNCaECD7guwS+QUXg="},"tinymce/skins/content/default/content.min-59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178.css":{"logical_path":"tinymce/skins/content/default/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":569,"digest":"59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178","integrity":"sha256-Wa+OK9y4QwgkM+NaE+dEUrtxZ1tNCaECD7guwS+QUXg="},"tinymce/skins/content/document/content-1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943.css":{"logical_path":"tinymce/skins/content/document/content.css","mtime":"2019-05-14T13:13:17+02:00","size":653,"digest":"1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943","integrity":"sha256-HibMzvAFJSKv+4G/IUgxAjaxnN34Ey8COdjHVmci6UM="},"tinymce/skins/content/document/content.min-1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943.css":{"logical_path":"tinymce/skins/content/document/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":653,"digest":"1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943","integrity":"sha256-HibMzvAFJSKv+4G/IUgxAjaxnN34Ey8COdjHVmci6UM="},"tinymce/skins/content/writer/content-eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656.css":{"logical_path":"tinymce/skins/content/writer/content.css","mtime":"2019-05-14T13:13:17+02:00","size":590,"digest":"eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656","integrity":"sha256-7qXBU+4qEO0IZNhPod/7lept735XmXjNLdPY8JVsllY="},"tinymce/skins/content/writer/content.min-eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656.css":{"logical_path":"tinymce/skins/content/writer/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":590,"digest":"eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656","integrity":"sha256-7qXBU+4qEO0IZNhPod/7lept735XmXjNLdPY8JVsllY="},"tinymce/skins/ui/oxide/content-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css":{"logical_path":"tinymce/skins/ui/oxide/content.css","mtime":"2019-05-14T13:13:17+02:00","size":16213,"digest":"158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1","integrity":"sha256-FYp9nMLCIqQo9HqXBOyMuR2NiwpbGHJSV+a+jt6aBvE="},"tinymce/skins/ui/oxide/content.inline-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css":{"logical_path":"tinymce/skins/ui/oxide/content.inline.css","mtime":"2019-05-14T13:13:17+02:00","size":16417,"digest":"a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2","integrity":"sha256-oxmkuMLbJ7FXbiLZDtknrM7oh8ElQD+dQs5IFVxGcvI="},"tinymce/skins/ui/oxide/content.inline.min-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css":{"logical_path":"tinymce/skins/ui/oxide/content.inline.min.css","mtime":"2019-05-14T13:13:17+02:00","size":16417,"digest":"a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2","integrity":"sha256-oxmkuMLbJ7FXbiLZDtknrM7oh8ElQD+dQs5IFVxGcvI="},"tinymce/skins/ui/oxide/content.min-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css":{"logical_path":"tinymce/skins/ui/oxide/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":16213,"digest":"158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1","integrity":"sha256-FYp9nMLCIqQo9HqXBOyMuR2NiwpbGHJSV+a+jt6aBvE="},"tinymce/skins/ui/oxide/content.mobile-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css":{"logical_path":"tinymce/skins/ui/oxide/content.mobile.css","mtime":"2019-05-14T13:13:17+02:00","size":235,"digest":"230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346","integrity":"sha256-Iwwx9lNWx8sXmSRKNPenIskqbWFOBuWdSNsOvM1/I0Y="},"tinymce/skins/ui/oxide/content.mobile.min-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css":{"logical_path":"tinymce/skins/ui/oxide/content.mobile.min.css","mtime":"2019-05-14T13:13:17+02:00","size":235,"digest":"230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346","integrity":"sha256-Iwwx9lNWx8sXmSRKNPenIskqbWFOBuWdSNsOvM1/I0Y="},"tinymce/skins/ui/oxide/fonts/tinymce-mobile-e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213.woff":{"logical_path":"tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff","mtime":"2019-05-14T13:13:17+02:00","size":4624,"digest":"e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213","integrity":"sha256-5kvxVqQy1j9bNLRWe1E9wNNRtJFhx/YI+4JXS/3Z0hM="},"tinymce/skins/ui/oxide/skin-19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48.css":{"logical_path":"tinymce/skins/ui/oxide/skin.css","mtime":"2019-05-14T13:13:17+02:00","size":43226,"digest":"19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48","integrity":"sha256-GfXVi/AF0v96bWC7Pd+hdypVqOVW9yOjshNAvPEAP0g="},"tinymce/skins/ui/oxide/skin.min-19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48.css":{"logical_path":"tinymce/skins/ui/oxide/skin.min.css","mtime":"2019-05-14T13:13:17+02:00","size":43226,"digest":"19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48","integrity":"sha256-GfXVi/AF0v96bWC7Pd+hdypVqOVW9yOjshNAvPEAP0g="},"tinymce/skins/ui/oxide/skin.mobile-22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22.css":{"logical_path":"tinymce/skins/ui/oxide/skin.mobile.css","mtime":"2019-05-14T13:13:17+02:00","size":28233,"digest":"22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22","integrity":"sha256-InA8tCO+QysSWhn6lKKagSK3Ir5PfBswMQLOFu2DniI="},"tinymce/skins/ui/oxide/skin.mobile.min-22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22.css":{"logical_path":"tinymce/skins/ui/oxide/skin.mobile.min.css","mtime":"2019-05-14T13:13:17+02:00","size":28233,"digest":"22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22","integrity":"sha256-InA8tCO+QysSWhn6lKKagSK3Ir5PfBswMQLOFu2DniI="},"tinymce/skins/ui/oxide-dark/content-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.css","mtime":"2019-05-14T13:13:17+02:00","size":16213,"digest":"158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1","integrity":"sha256-FYp9nMLCIqQo9HqXBOyMuR2NiwpbGHJSV+a+jt6aBvE="},"tinymce/skins/ui/oxide-dark/content.inline-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.inline.css","mtime":"2019-05-14T13:13:17+02:00","size":16417,"digest":"a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2","integrity":"sha256-oxmkuMLbJ7FXbiLZDtknrM7oh8ElQD+dQs5IFVxGcvI="},"tinymce/skins/ui/oxide-dark/content.inline.min-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.inline.min.css","mtime":"2019-05-14T13:13:17+02:00","size":16417,"digest":"a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2","integrity":"sha256-oxmkuMLbJ7FXbiLZDtknrM7oh8ElQD+dQs5IFVxGcvI="},"tinymce/skins/ui/oxide-dark/content.min-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":16213,"digest":"158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1","integrity":"sha256-FYp9nMLCIqQo9HqXBOyMuR2NiwpbGHJSV+a+jt6aBvE="},"tinymce/skins/ui/oxide-dark/skin-5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.css","mtime":"2019-05-14T13:13:17+02:00","size":43207,"digest":"5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768","integrity":"sha256-XUQfjmzMFtouEJY6Ry/n5LWTs21HCpE6v/LBWSo3x2g="},"tinymce/skins/ui/oxide-dark/skin.min-5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.min.css","mtime":"2019-05-14T13:13:17+02:00","size":43207,"digest":"5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768","integrity":"sha256-XUQfjmzMFtouEJY6Ry/n5LWTs21HCpE6v/LBWSo3x2g="},"tinymce/themes/mobile/theme-3ebedb886fbcc21c3b79f250f398c0ff4a2d870dd7a737322aceef1f2479ccd2.js":{"logical_path":"tinymce/themes/mobile/theme.js","mtime":"2019-05-14T13:13:17+02:00","size":172439,"digest":"3ebedb886fbcc21c3b79f250f398c0ff4a2d870dd7a737322aceef1f2479ccd2","integrity":"sha256-Pr7biG+8whw7efJQ85jA/0othw3XpzcyKs7vHyR5zNI="},"tinymce/themes/silver/theme-02294426af3edeff56daa3e5fd3ef013944295525b150b8114eaca9de6201af7.js":{"logical_path":"tinymce/themes/silver/theme.js","mtime":"2019-05-14T13:13:17+02:00","size":357473,"digest":"02294426af3edeff56daa3e5fd3ef013944295525b150b8114eaca9de6201af7","integrity":"sha256-AilEJq8+3v9W2qPl/T7wE5RClVJbFQuBFOrKneYgGvc="},"application-e97f1694bd74fef5df4337d8faa6cde48d33f29e71594d3e3b40deef8fd34383.js":{"logical_path":"application.js","mtime":"2019-05-14T15:14:02+02:00","size":1965665,"digest":"e97f1694bd74fef5df4337d8faa6cde48d33f29e71594d3e3b40deef8fd34383","integrity":"sha256-6X8WlL10/vXfQzfY+qbN5I0z8p5xWU0+O0De74/TQ4M="},"application-665c7bdc2a85d2beeb41b3c165fec5272f5d00671d445bef7cd32341457f4051.js":{"logical_path":"application.js","mtime":"2019-05-14T22:58:40+02:00","size":1965802,"digest":"665c7bdc2a85d2beeb41b3c165fec5272f5d00671d445bef7cd32341457f4051","integrity":"sha256-Zlx73CqF0r7rQbPBZf7FJy9dAGcdRFvvfNMjQUV/QFE="},"application-3d5e23cf328582872a3d1bc4cbba74e4eff77c54728da6aee7f8473b5a2824dc.css":{"logical_path":"application.css","mtime":"2019-05-14T22:58:40+02:00","size":170796,"digest":"3d5e23cf328582872a3d1bc4cbba74e4eff77c54728da6aee7f8473b5a2824dc","integrity":"sha256-PV4jzzKFgocqPRvEy7p05O/3fFRyjaau5/hHO1ooJNw="},"active_admin-7af08a6e48da4e83664b81e446c23823296e4341041da5d930b7e0bc0c2b7be9.css":{"logical_path":"active_admin.css","mtime":"2019-05-21T21:41:04+02:00","size":105662,"digest":"7af08a6e48da4e83664b81e446c23823296e4341041da5d930b7e0bc0c2b7be9","integrity":"sha256-evCKbkjaToNmS4HkRsI4IyluQ0EEHaXZMLfgvAwre+k="},"application-870592844092d1ae784a86ed11f00302cb2aab752e76420235634a592b07cd40.js":{"logical_path":"application.js","mtime":"2019-05-21T22:19:54+02:00","size":1965802,"digest":"870592844092d1ae784a86ed11f00302cb2aab752e76420235634a592b07cd40","integrity":"sha256-hwWShECS0a54SobtEfADAssqq3UudkICNWNKWSsHzUA="},"application-7759ab5fd18acdafc46a921094dd497a51f5ed55c3d5fe10db48d1ff157f5460.css":{"logical_path":"application.css","mtime":"2019-05-21T22:19:54+02:00","size":170700,"digest":"7759ab5fd18acdafc46a921094dd497a51f5ed55c3d5fe10db48d1ff157f5460","integrity":"sha256-d1mrX9GKza/EapIQlN1JelH17VXD1f4Q20jR/xV/VGA="}},"assets":{"active_admin.css":"active_admin-7af08a6e48da4e83664b81e446c23823296e4341041da5d930b7e0bc0c2b7be9.css","active_admin/nested_menu_arrow.gif":"active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif","active_admin/nested_menu_arrow_dark.gif":"active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif","active_admin/orderable.png":"active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png","active_admin/print.css":"active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css","active_admin.js":"active_admin-71f5376a62a9260af4c6b4c0930c35cdf18e4e35221289beb36ba77fac8bb030.js","tinymce.js":"tinymce-1103c4904fc1df026a84e5ce890ce02b9a9fda036966b0fb34ad900ccb83c712.js","modernizr.js":"modernizr-654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97.js","font-awesome/fa-brands-400.eot":"font-awesome/fa-brands-400-bd4e21d8e25a889e979ac2367770c36863443b8e0f99feeaee09a62625b9cb13.eot","font-awesome/fa-regular-400.eot":"font-awesome/fa-regular-400-4aa44a07b71f47067872c8f177f31babc0c609af2b384511353c89b1ca804458.eot","font-awesome/fa-solid-900.eot":"font-awesome/fa-solid-900-e153efe317e731e59eb8d6d1a568a811b8f7dd5df3823c327103be8e4a0047e4.eot","font-awesome/fa-brands-400.svg":"font-awesome/fa-brands-400-e281f2a25598bf8b40a77f3c5228b51900788224e91dade3f4a0f8c383505f43.svg","font-awesome/fa-regular-400.svg":"font-awesome/fa-regular-400-934530d864b6f03fad8e87b66daf829d17f0e7afbd74baead32a6a4157d584c2.svg","font-awesome/fa-solid-900.svg":"font-awesome/fa-solid-900-d5b212510d72b66bdb7feb22c611456621c3dd1a2e88cc42983d7d4c9ab79563.svg","font-awesome/fa-brands-400.ttf":"font-awesome/fa-brands-400-70726f98e0d98f543d5fde05a3a74bb131c5c67f5fbffcf4d41b7f68bca2b56b.ttf","font-awesome/fa-regular-400.ttf":"font-awesome/fa-regular-400-112491dccca97bf50ec7adff8d430dcba6d0b71e0a0b20386f814f3bf5bb94b5.ttf","font-awesome/fa-solid-900.ttf":"font-awesome/fa-solid-900-7a58f741ff539af94798ff561c918e5841d7e6164e90cbe57befdec4a16f6a4e.ttf","font-awesome/fa-brands-400.woff":"font-awesome/fa-brands-400-17ce8b9d612897d1fefd5cd2096dbd83b82d05dd5d1f60421aca15c4ce2445ac.woff","font-awesome/fa-regular-400.woff":"font-awesome/fa-regular-400-2835b63ffc892d01aac2cc346969b501c845d9184f738589779ec176937e1f33.woff","font-awesome/fa-solid-900.woff":"font-awesome/fa-solid-900-20464aebbff54cc17776497ce4112c3374a54b38f7ba5f58eec12174149d6742.woff","font-awesome/fa-brands-400.woff2":"font-awesome/fa-brands-400-dc64d7192f84497cacad5c10aef682562c24aa6124270f85fe247e223607f3ed.woff2","font-awesome/fa-regular-400.woff2":"font-awesome/fa-regular-400-ccf4db1eeb68c96e05e74f8ebfa75cc60c3a0fed862dae6b0ad85d4e1b5b4e4f.woff2","font-awesome/fa-solid-900.woff2":"font-awesome/fa-solid-900-f18c486a80175cf02fee0e05c2b4acd86c04cdbaecec61c1ef91f920509b5efe.woff2","agendadescommuns.png":"agendadescommuns-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png","alert.png":"alert-762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906.png","baby_gnu_adl.png":"baby_gnu_adl-463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc.png","baby_gnu_adl.svg":"baby_gnu_adl-97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e.svg","communs.png":"communs-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png","lef-small.png":"lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png","lef.png":"lef-7e9152b909c78144ff44ca2254c06709333bef0b8d4985deb1361aba5c63c86d.png","linux-presentation-day.png":"linux-presentation-day-863b30562924505dd21841220861f83643d310e0b943a0e6a905462ddfac86f1.png","priorite-logiciel-libre-je-soutiens-april_2_m.png":"priorite-logiciel-libre-je-soutiens-april_2_m-6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc.png","regions/CA-QC.png":"regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png","team.png":"team-65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa.png","application.js":"application-870592844092d1ae784a86ed11f00302cb2aab752e76420235634a592b07cd40.js","application.css":"application-7759ab5fd18acdafc46a921094dd497a51f5ed55c3d5fe10db48d1ff157f5460.css","flags/4x3/ad.svg":"flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg","flags/1x1/ad.svg":"flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg","flags/4x3/ae.svg":"flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg","flags/1x1/ae.svg":"flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg","flags/4x3/af.svg":"flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg","flags/1x1/af.svg":"flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg","flags/4x3/ag.svg":"flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg","flags/1x1/ag.svg":"flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg","flags/4x3/ai.svg":"flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg","flags/1x1/ai.svg":"flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg","flags/4x3/al.svg":"flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg","flags/1x1/al.svg":"flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg","flags/4x3/am.svg":"flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg","flags/1x1/am.svg":"flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg","flags/4x3/ao.svg":"flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg","flags/1x1/ao.svg":"flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg","flags/4x3/aq.svg":"flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg","flags/1x1/aq.svg":"flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg","flags/4x3/ar.svg":"flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg","flags/1x1/ar.svg":"flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg","flags/4x3/as.svg":"flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg","flags/1x1/as.svg":"flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg","flags/4x3/at.svg":"flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg","flags/1x1/at.svg":"flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg","flags/4x3/au.svg":"flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg","flags/1x1/au.svg":"flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg","flags/4x3/aw.svg":"flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg","flags/1x1/aw.svg":"flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg","flags/4x3/ax.svg":"flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg","flags/1x1/ax.svg":"flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg","flags/4x3/az.svg":"flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg","flags/1x1/az.svg":"flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg","flags/4x3/ba.svg":"flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg","flags/1x1/ba.svg":"flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg","flags/4x3/bb.svg":"flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg","flags/1x1/bb.svg":"flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg","flags/4x3/bd.svg":"flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg","flags/1x1/bd.svg":"flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg","flags/4x3/be.svg":"flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg","flags/1x1/be.svg":"flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg","flags/4x3/bf.svg":"flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg","flags/1x1/bf.svg":"flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg","flags/4x3/bg.svg":"flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg","flags/1x1/bg.svg":"flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg","flags/4x3/bh.svg":"flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg","flags/1x1/bh.svg":"flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg","flags/4x3/bi.svg":"flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg","flags/1x1/bi.svg":"flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg","flags/4x3/bj.svg":"flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg","flags/1x1/bj.svg":"flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg","flags/4x3/bl.svg":"flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg","flags/1x1/bl.svg":"flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg","flags/4x3/bm.svg":"flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg","flags/1x1/bm.svg":"flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg","flags/4x3/bn.svg":"flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg","flags/1x1/bn.svg":"flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg","flags/4x3/bo.svg":"flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg","flags/1x1/bo.svg":"flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg","flags/4x3/bq.svg":"flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg","flags/1x1/bq.svg":"flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg","flags/4x3/br.svg":"flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg","flags/1x1/br.svg":"flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg","flags/4x3/bs.svg":"flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg","flags/1x1/bs.svg":"flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg","flags/4x3/bt.svg":"flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg","flags/1x1/bt.svg":"flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg","flags/4x3/bv.svg":"flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg","flags/1x1/bv.svg":"flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg","flags/4x3/bw.svg":"flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg","flags/1x1/bw.svg":"flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg","flags/4x3/by.svg":"flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg","flags/1x1/by.svg":"flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg","flags/4x3/bz.svg":"flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg","flags/1x1/bz.svg":"flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg","flags/4x3/ca.svg":"flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg","flags/1x1/ca.svg":"flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg","flags/4x3/cc.svg":"flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg","flags/1x1/cc.svg":"flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg","flags/4x3/cd.svg":"flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg","flags/1x1/cd.svg":"flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg","flags/4x3/cf.svg":"flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg","flags/1x1/cf.svg":"flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg","flags/4x3/cg.svg":"flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg","flags/1x1/cg.svg":"flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg","flags/4x3/ch.svg":"flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg","flags/1x1/ch.svg":"flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg","flags/4x3/ci.svg":"flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg","flags/1x1/ci.svg":"flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg","flags/4x3/ck.svg":"flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg","flags/1x1/ck.svg":"flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg","flags/4x3/cl.svg":"flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg","flags/1x1/cl.svg":"flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg","flags/4x3/cm.svg":"flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg","flags/1x1/cm.svg":"flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg","flags/4x3/cn.svg":"flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg","flags/1x1/cn.svg":"flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg","flags/4x3/co.svg":"flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg","flags/1x1/co.svg":"flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg","flags/4x3/cr.svg":"flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg","flags/1x1/cr.svg":"flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg","flags/4x3/cu.svg":"flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg","flags/1x1/cu.svg":"flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg","flags/4x3/cv.svg":"flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg","flags/1x1/cv.svg":"flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg","flags/4x3/cw.svg":"flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg","flags/1x1/cw.svg":"flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg","flags/4x3/cx.svg":"flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg","flags/1x1/cx.svg":"flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg","flags/4x3/cy.svg":"flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg","flags/1x1/cy.svg":"flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg","flags/4x3/cz.svg":"flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg","flags/1x1/cz.svg":"flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg","flags/4x3/de.svg":"flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg","flags/1x1/de.svg":"flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg","flags/4x3/dj.svg":"flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg","flags/1x1/dj.svg":"flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg","flags/4x3/dk.svg":"flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg","flags/1x1/dk.svg":"flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg","flags/4x3/dm.svg":"flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg","flags/1x1/dm.svg":"flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg","flags/4x3/do.svg":"flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg","flags/1x1/do.svg":"flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg","flags/4x3/dz.svg":"flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg","flags/1x1/dz.svg":"flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg","flags/4x3/ec.svg":"flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg","flags/1x1/ec.svg":"flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg","flags/4x3/ee.svg":"flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg","flags/1x1/ee.svg":"flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg","flags/4x3/eg.svg":"flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg","flags/1x1/eg.svg":"flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg","flags/4x3/eh.svg":"flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg","flags/1x1/eh.svg":"flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg","flags/4x3/er.svg":"flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg","flags/1x1/er.svg":"flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg","flags/4x3/es.svg":"flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg","flags/1x1/es.svg":"flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg","flags/4x3/et.svg":"flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg","flags/1x1/et.svg":"flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg","flags/4x3/fi.svg":"flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg","flags/1x1/fi.svg":"flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg","flags/4x3/fj.svg":"flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg","flags/1x1/fj.svg":"flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg","flags/4x3/fk.svg":"flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg","flags/1x1/fk.svg":"flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg","flags/4x3/fm.svg":"flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg","flags/1x1/fm.svg":"flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg","flags/4x3/fo.svg":"flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg","flags/1x1/fo.svg":"flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg","flags/4x3/fr.svg":"flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg","flags/1x1/fr.svg":"flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg","flags/4x3/ga.svg":"flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg","flags/1x1/ga.svg":"flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg","flags/4x3/gb.svg":"flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg","flags/1x1/gb.svg":"flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg","flags/4x3/gd.svg":"flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg","flags/1x1/gd.svg":"flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg","flags/4x3/ge.svg":"flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg","flags/1x1/ge.svg":"flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg","flags/4x3/gf.svg":"flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg","flags/1x1/gf.svg":"flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg","flags/4x3/gg.svg":"flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg","flags/1x1/gg.svg":"flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg","flags/4x3/gh.svg":"flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg","flags/1x1/gh.svg":"flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg","flags/4x3/gi.svg":"flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg","flags/1x1/gi.svg":"flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg","flags/4x3/gl.svg":"flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg","flags/1x1/gl.svg":"flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg","flags/4x3/gm.svg":"flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg","flags/1x1/gm.svg":"flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg","flags/4x3/gn.svg":"flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg","flags/1x1/gn.svg":"flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg","flags/4x3/gp.svg":"flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg","flags/1x1/gp.svg":"flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg","flags/4x3/gq.svg":"flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg","flags/1x1/gq.svg":"flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg","flags/4x3/gr.svg":"flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg","flags/1x1/gr.svg":"flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg","flags/4x3/gs.svg":"flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg","flags/1x1/gs.svg":"flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg","flags/4x3/gt.svg":"flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg","flags/1x1/gt.svg":"flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg","flags/4x3/gu.svg":"flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg","flags/1x1/gu.svg":"flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg","flags/4x3/gw.svg":"flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg","flags/1x1/gw.svg":"flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg","flags/4x3/gy.svg":"flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg","flags/1x1/gy.svg":"flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg","flags/4x3/hk.svg":"flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg","flags/1x1/hk.svg":"flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg","flags/4x3/hm.svg":"flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg","flags/1x1/hm.svg":"flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg","flags/4x3/hn.svg":"flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg","flags/1x1/hn.svg":"flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg","flags/4x3/hr.svg":"flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg","flags/1x1/hr.svg":"flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg","flags/4x3/ht.svg":"flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg","flags/1x1/ht.svg":"flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg","flags/4x3/hu.svg":"flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg","flags/1x1/hu.svg":"flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg","flags/4x3/id.svg":"flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg","flags/1x1/id.svg":"flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg","flags/4x3/ie.svg":"flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg","flags/1x1/ie.svg":"flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg","flags/4x3/il.svg":"flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg","flags/1x1/il.svg":"flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg","flags/4x3/im.svg":"flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg","flags/1x1/im.svg":"flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg","flags/4x3/in.svg":"flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg","flags/1x1/in.svg":"flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg","flags/4x3/io.svg":"flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg","flags/1x1/io.svg":"flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg","flags/4x3/iq.svg":"flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg","flags/1x1/iq.svg":"flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg","flags/4x3/ir.svg":"flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg","flags/1x1/ir.svg":"flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg","flags/4x3/is.svg":"flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg","flags/1x1/is.svg":"flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg","flags/4x3/it.svg":"flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg","flags/1x1/it.svg":"flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg","flags/4x3/je.svg":"flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg","flags/1x1/je.svg":"flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg","flags/4x3/jm.svg":"flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg","flags/1x1/jm.svg":"flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg","flags/4x3/jo.svg":"flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg","flags/1x1/jo.svg":"flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg","flags/4x3/jp.svg":"flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg","flags/1x1/jp.svg":"flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg","flags/4x3/ke.svg":"flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg","flags/1x1/ke.svg":"flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg","flags/4x3/kg.svg":"flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg","flags/1x1/kg.svg":"flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg","flags/4x3/kh.svg":"flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg","flags/1x1/kh.svg":"flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg","flags/4x3/ki.svg":"flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg","flags/1x1/ki.svg":"flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg","flags/4x3/km.svg":"flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg","flags/1x1/km.svg":"flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg","flags/4x3/kn.svg":"flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg","flags/1x1/kn.svg":"flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg","flags/4x3/kp.svg":"flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg","flags/1x1/kp.svg":"flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg","flags/4x3/kr.svg":"flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg","flags/1x1/kr.svg":"flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg","flags/4x3/kw.svg":"flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg","flags/1x1/kw.svg":"flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg","flags/4x3/ky.svg":"flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg","flags/1x1/ky.svg":"flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg","flags/4x3/kz.svg":"flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg","flags/1x1/kz.svg":"flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg","flags/4x3/la.svg":"flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg","flags/1x1/la.svg":"flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg","flags/4x3/lb.svg":"flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg","flags/1x1/lb.svg":"flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg","flags/4x3/lc.svg":"flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg","flags/1x1/lc.svg":"flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg","flags/4x3/li.svg":"flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg","flags/1x1/li.svg":"flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg","flags/4x3/lk.svg":"flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg","flags/1x1/lk.svg":"flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg","flags/4x3/lr.svg":"flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg","flags/1x1/lr.svg":"flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg","flags/4x3/ls.svg":"flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg","flags/1x1/ls.svg":"flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg","flags/4x3/lt.svg":"flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg","flags/1x1/lt.svg":"flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg","flags/4x3/lu.svg":"flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg","flags/1x1/lu.svg":"flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg","flags/4x3/lv.svg":"flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg","flags/1x1/lv.svg":"flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg","flags/4x3/ly.svg":"flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg","flags/1x1/ly.svg":"flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg","flags/4x3/ma.svg":"flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg","flags/1x1/ma.svg":"flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg","flags/4x3/mc.svg":"flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg","flags/1x1/mc.svg":"flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg","flags/4x3/md.svg":"flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg","flags/1x1/md.svg":"flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg","flags/4x3/me.svg":"flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg","flags/1x1/me.svg":"flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg","flags/4x3/mf.svg":"flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg","flags/1x1/mf.svg":"flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg","flags/4x3/mg.svg":"flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg","flags/1x1/mg.svg":"flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg","flags/4x3/mh.svg":"flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg","flags/1x1/mh.svg":"flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg","flags/4x3/mk.svg":"flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg","flags/1x1/mk.svg":"flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg","flags/4x3/ml.svg":"flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg","flags/1x1/ml.svg":"flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg","flags/4x3/mm.svg":"flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg","flags/1x1/mm.svg":"flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg","flags/4x3/mn.svg":"flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg","flags/1x1/mn.svg":"flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg","flags/4x3/mo.svg":"flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg","flags/1x1/mo.svg":"flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg","flags/4x3/mp.svg":"flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg","flags/1x1/mp.svg":"flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg","flags/4x3/mq.svg":"flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg","flags/1x1/mq.svg":"flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg","flags/4x3/mr.svg":"flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg","flags/1x1/mr.svg":"flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg","flags/4x3/ms.svg":"flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg","flags/1x1/ms.svg":"flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg","flags/4x3/mt.svg":"flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg","flags/1x1/mt.svg":"flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg","flags/4x3/mu.svg":"flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg","flags/1x1/mu.svg":"flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg","flags/4x3/mv.svg":"flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg","flags/1x1/mv.svg":"flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg","flags/4x3/mw.svg":"flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg","flags/1x1/mw.svg":"flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg","flags/4x3/mx.svg":"flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg","flags/1x1/mx.svg":"flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg","flags/4x3/my.svg":"flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg","flags/1x1/my.svg":"flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg","flags/4x3/mz.svg":"flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg","flags/1x1/mz.svg":"flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg","flags/4x3/na.svg":"flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg","flags/1x1/na.svg":"flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg","flags/4x3/nc.svg":"flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg","flags/1x1/nc.svg":"flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg","flags/4x3/ne.svg":"flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg","flags/1x1/ne.svg":"flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg","flags/4x3/nf.svg":"flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg","flags/1x1/nf.svg":"flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg","flags/4x3/ng.svg":"flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg","flags/1x1/ng.svg":"flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg","flags/4x3/ni.svg":"flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg","flags/1x1/ni.svg":"flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg","flags/4x3/nl.svg":"flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg","flags/1x1/nl.svg":"flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg","flags/4x3/no.svg":"flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg","flags/1x1/no.svg":"flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg","flags/4x3/np.svg":"flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg","flags/1x1/np.svg":"flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg","flags/4x3/nr.svg":"flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg","flags/1x1/nr.svg":"flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg","flags/4x3/nu.svg":"flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg","flags/1x1/nu.svg":"flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg","flags/4x3/nz.svg":"flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg","flags/1x1/nz.svg":"flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg","flags/4x3/om.svg":"flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg","flags/1x1/om.svg":"flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg","flags/4x3/pa.svg":"flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg","flags/1x1/pa.svg":"flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg","flags/4x3/pe.svg":"flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg","flags/1x1/pe.svg":"flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg","flags/4x3/pf.svg":"flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg","flags/1x1/pf.svg":"flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg","flags/4x3/pg.svg":"flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg","flags/1x1/pg.svg":"flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg","flags/4x3/ph.svg":"flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg","flags/1x1/ph.svg":"flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg","flags/4x3/pk.svg":"flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg","flags/1x1/pk.svg":"flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg","flags/4x3/pl.svg":"flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg","flags/1x1/pl.svg":"flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg","flags/4x3/pm.svg":"flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg","flags/1x1/pm.svg":"flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg","flags/4x3/pn.svg":"flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg","flags/1x1/pn.svg":"flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg","flags/4x3/pr.svg":"flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg","flags/1x1/pr.svg":"flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg","flags/4x3/ps.svg":"flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg","flags/1x1/ps.svg":"flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg","flags/4x3/pt.svg":"flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg","flags/1x1/pt.svg":"flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg","flags/4x3/pw.svg":"flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg","flags/1x1/pw.svg":"flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg","flags/4x3/py.svg":"flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg","flags/1x1/py.svg":"flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg","flags/4x3/qa.svg":"flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg","flags/1x1/qa.svg":"flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg","flags/4x3/re.svg":"flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg","flags/1x1/re.svg":"flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg","flags/4x3/ro.svg":"flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg","flags/1x1/ro.svg":"flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg","flags/4x3/rs.svg":"flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg","flags/1x1/rs.svg":"flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg","flags/4x3/ru.svg":"flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg","flags/1x1/ru.svg":"flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg","flags/4x3/rw.svg":"flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg","flags/1x1/rw.svg":"flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg","flags/4x3/sa.svg":"flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg","flags/1x1/sa.svg":"flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg","flags/4x3/sb.svg":"flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg","flags/1x1/sb.svg":"flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg","flags/4x3/sc.svg":"flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg","flags/1x1/sc.svg":"flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg","flags/4x3/sd.svg":"flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg","flags/1x1/sd.svg":"flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg","flags/4x3/se.svg":"flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg","flags/1x1/se.svg":"flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg","flags/4x3/sg.svg":"flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg","flags/1x1/sg.svg":"flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg","flags/4x3/sh.svg":"flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg","flags/1x1/sh.svg":"flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg","flags/4x3/si.svg":"flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg","flags/1x1/si.svg":"flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg","flags/4x3/sj.svg":"flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg","flags/1x1/sj.svg":"flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg","flags/4x3/sk.svg":"flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg","flags/1x1/sk.svg":"flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg","flags/4x3/sl.svg":"flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg","flags/1x1/sl.svg":"flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg","flags/4x3/sm.svg":"flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg","flags/1x1/sm.svg":"flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg","flags/4x3/sn.svg":"flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg","flags/1x1/sn.svg":"flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg","flags/4x3/so.svg":"flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg","flags/1x1/so.svg":"flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg","flags/4x3/sr.svg":"flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg","flags/1x1/sr.svg":"flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg","flags/4x3/ss.svg":"flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg","flags/1x1/ss.svg":"flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg","flags/4x3/st.svg":"flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg","flags/1x1/st.svg":"flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg","flags/4x3/sv.svg":"flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg","flags/1x1/sv.svg":"flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg","flags/4x3/sx.svg":"flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg","flags/1x1/sx.svg":"flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg","flags/4x3/sy.svg":"flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg","flags/1x1/sy.svg":"flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg","flags/4x3/sz.svg":"flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg","flags/1x1/sz.svg":"flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg","flags/4x3/tc.svg":"flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg","flags/1x1/tc.svg":"flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg","flags/4x3/td.svg":"flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg","flags/1x1/td.svg":"flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg","flags/4x3/tf.svg":"flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg","flags/1x1/tf.svg":"flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg","flags/4x3/tg.svg":"flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg","flags/1x1/tg.svg":"flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg","flags/4x3/th.svg":"flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg","flags/1x1/th.svg":"flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg","flags/4x3/tj.svg":"flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg","flags/1x1/tj.svg":"flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg","flags/4x3/tk.svg":"flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg","flags/1x1/tk.svg":"flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg","flags/4x3/tl.svg":"flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg","flags/1x1/tl.svg":"flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg","flags/4x3/tm.svg":"flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg","flags/1x1/tm.svg":"flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg","flags/4x3/tn.svg":"flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg","flags/1x1/tn.svg":"flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg","flags/4x3/to.svg":"flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg","flags/1x1/to.svg":"flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg","flags/4x3/tr.svg":"flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg","flags/1x1/tr.svg":"flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg","flags/4x3/tt.svg":"flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg","flags/1x1/tt.svg":"flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg","flags/4x3/tv.svg":"flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg","flags/1x1/tv.svg":"flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg","flags/4x3/tw.svg":"flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg","flags/1x1/tw.svg":"flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg","flags/4x3/tz.svg":"flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg","flags/1x1/tz.svg":"flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg","flags/4x3/ua.svg":"flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg","flags/1x1/ua.svg":"flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg","flags/4x3/ug.svg":"flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg","flags/1x1/ug.svg":"flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg","flags/4x3/um.svg":"flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg","flags/1x1/um.svg":"flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg","flags/4x3/us.svg":"flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg","flags/1x1/us.svg":"flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg","flags/4x3/uy.svg":"flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg","flags/1x1/uy.svg":"flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg","flags/4x3/uz.svg":"flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg","flags/1x1/uz.svg":"flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg","flags/4x3/va.svg":"flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg","flags/1x1/va.svg":"flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg","flags/4x3/vc.svg":"flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg","flags/1x1/vc.svg":"flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg","flags/4x3/ve.svg":"flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg","flags/1x1/ve.svg":"flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg","flags/4x3/vg.svg":"flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg","flags/1x1/vg.svg":"flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg","flags/4x3/vi.svg":"flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg","flags/1x1/vi.svg":"flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg","flags/4x3/vn.svg":"flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg","flags/1x1/vn.svg":"flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg","flags/4x3/vu.svg":"flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg","flags/1x1/vu.svg":"flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg","flags/4x3/wf.svg":"flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg","flags/1x1/wf.svg":"flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg","flags/4x3/ws.svg":"flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg","flags/1x1/ws.svg":"flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg","flags/4x3/ye.svg":"flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg","flags/1x1/ye.svg":"flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg","flags/4x3/yt.svg":"flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg","flags/1x1/yt.svg":"flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg","flags/4x3/za.svg":"flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg","flags/1x1/za.svg":"flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg","flags/4x3/zm.svg":"flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg","flags/1x1/zm.svg":"flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg","flags/4x3/zw.svg":"flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg","flags/1x1/zw.svg":"flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg","flags/4x3/es-ct.svg":"flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg","flags/1x1/es-ct.svg":"flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg","flags/4x3/eu.svg":"flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg","flags/1x1/eu.svg":"flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg","flags/4x3/gb-eng.svg":"flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg","flags/1x1/gb-eng.svg":"flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg","flags/4x3/gb-nir.svg":"flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg","flags/1x1/gb-nir.svg":"flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg","flags/4x3/gb-sct.svg":"flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg","flags/1x1/gb-sct.svg":"flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg","flags/4x3/gb-wls.svg":"flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg","flags/1x1/gb-wls.svg":"flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg","flags/4x3/un.svg":"flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg","flags/1x1/un.svg":"flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg","leaflet/dist/images/layers.png":"leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png","leaflet/dist/images/layers-2x.png":"leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png","leaflet/dist/images/marker-icon.png":"leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png","markers-soft.png":"markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png","markers-shadow.png":"markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png","markers-soft@2x.png":"markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png","markers-shadow@2x.png":"markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png","tinymce/langs/fr_FR.js":"tinymce/langs/fr_FR-6aba16704f73dd83662a78ca3360f3d98b1f1ed80a67560313554446915611a5.js","markers-matte.png":"markers-matte-497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9.png","markers-matte@2x.png":"markers-matte@2x-948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823.png","markers-plain.png":"markers-plain-cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff.png","leaflet/dist/images/marker-icon-2x.png":"leaflet/dist/images/marker-icon-2x-00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528.png","leaflet/dist/images/marker-shadow.png":"leaflet/dist/images/marker-shadow-264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da.png","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410.png","jquery-ui/ui-icons_444444_256x240.png":"jquery-ui/ui-icons_444444_256x240-31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d.png","jquery-ui/ui-icons_555555_256x240.png":"jquery-ui/ui-icons_555555_256x240-32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5.png","jquery-ui/ui-icons_777620_256x240.png":"jquery-ui/ui-icons_777620_256x240-0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b.png","jquery-ui/ui-icons_777777_256x240.png":"jquery-ui/ui-icons_777777_256x240-faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f.png","jquery-ui/ui-icons_cc0000_256x240.png":"jquery-ui/ui-icons_cc0000_256x240-40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69.png","jquery-ui/ui-icons_ffffff_256x240.png":"jquery-ui/ui-icons_ffffff_256x240-350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a.png","tinymce/preinit.js":"tinymce/preinit-84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89.js","tinymce/rails.js":"tinymce/rails-bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca.js","tinymce/tinymce.js":"tinymce/tinymce-56cf2f2424cb80d80288b9207d6d01dffdcf3b6849e1414c1f7df44b8c95db86.js","tinymce/jquery.tinymce.js":"tinymce/jquery.tinymce-05402ca7d9e16d0a48a6259f8c005507d800186c5187f8cab94e79803c657535.js","tinymce/langs/readme.md":"tinymce/langs/readme-5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de.md","tinymce/license.txt":"tinymce/license-47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66.txt","tinymce/plugins/advlist/plugin.js":"tinymce/plugins/advlist/plugin-b7c8cf80403d2ccef198eece952f4426ca2dbc41bd3797796a75f984a9382ade.js","tinymce/plugins/anchor/plugin.js":"tinymce/plugins/anchor/plugin-0e1e67988d427784f73513db28a206eb47a3ef546aa87882a80975a16111a33a.js","tinymce/plugins/autolink/plugin.js":"tinymce/plugins/autolink/plugin-2e8a38a913070f4b3fb0252a5b5625057b8ee9f6fc529d65d3003328d112d5d8.js","tinymce/plugins/autoresize/plugin.js":"tinymce/plugins/autoresize/plugin-2adac0d857ae16f93c7ca4f92e36e76f4bbf885cb9a72755af78889627ed8738.js","tinymce/plugins/autosave/plugin.js":"tinymce/plugins/autosave/plugin-a6960dd7eb9a053b0ce876b2eb946f8bf8fc429de45466e73d17129213229674.js","tinymce/plugins/bbcode/plugin.js":"tinymce/plugins/bbcode/plugin-1a9fd62a2514ce8e15e8a3a99473674c1042c23adb359b35523931407910c7aa.js","tinymce/plugins/charmap/plugin.js":"tinymce/plugins/charmap/plugin-e68609a6c6f050af409dc34cba1eaf97b45dc4219500de60bb3ed63ea49279a0.js","tinymce/plugins/code/plugin.js":"tinymce/plugins/code/plugin-32c177297fd26a1ceaa79d4b0c10ff5c3b332141dce46b97931e3228daa9bf1a.js","tinymce/plugins/codesample/plugin.js":"tinymce/plugins/codesample/plugin-d495c33177247da2e3845e4d849182792be7b0347e8707dd133db053727f86e9.js","tinymce/plugins/colorpicker/plugin.js":"tinymce/plugins/colorpicker/plugin-3270f40522357ea68191288332b98cbbdafe950a758b5f1514ad8890ba68619f.js","tinymce/plugins/contextmenu/plugin.js":"tinymce/plugins/contextmenu/plugin-b528042e89738439d9d4b9d008a3a75284ef5233cd15aaa29c7e1ce6d48fb12e.js","tinymce/plugins/directionality/plugin.js":"tinymce/plugins/directionality/plugin-5004dc6b7d90139d4b1cf32d788845a48efc7055adb3aa25993219dd4df2fe5c.js","tinymce/plugins/emoticons/js/emojis.js":"tinymce/plugins/emoticons/js/emojis-c6f728975b5c86aca22f396025edefe6107b0dd4d95f5ef80daef569b545bce8.js","tinymce/plugins/emoticons/plugin.js":"tinymce/plugins/emoticons/plugin-f4db839825ea5c884c78a8c289494544ac0fd28a14506f0d3cbb7362a9e9db77.js","tinymce/plugins/fullpage/plugin.js":"tinymce/plugins/fullpage/plugin-7040866d45dd50402f2871efcfb289ec8ca80b8699f1461c721b0b20bca76051.js","tinymce/plugins/fullscreen/plugin.js":"tinymce/plugins/fullscreen/plugin-f548bdf0cbc2fd41c3c32938629a1b021e19680bac7869c274be5f3615eccfe7.js","tinymce/plugins/help/plugin.js":"tinymce/plugins/help/plugin-366b05965f3d6cfddaba02c6784e0f377497beda0f28cc8cd840510fd8b657f4.js","tinymce/plugins/hr/plugin.js":"tinymce/plugins/hr/plugin-0e5548067a2ab0ad967e296104249f6b5d24a16b80befcdd3888c17b1a0e5624.js","tinymce/plugins/image/plugin.js":"tinymce/plugins/image/plugin-53dce3c317e386c1989a5d82ec151d440f9ffc32a643dc9fba76ae2b036300c9.js","tinymce/plugins/imagetools/plugin.js":"tinymce/plugins/imagetools/plugin-49936c4208b2d6fbb340d11c56fa2a146d14c770e4cb39760a11099fea5c7aaa.js","tinymce/plugins/importcss/plugin.js":"tinymce/plugins/importcss/plugin-30cba659cc747bccf69602963b3c2b83e00c26e65f2b63e23eba5be5f8af5452.js","tinymce/plugins/insertdatetime/plugin.js":"tinymce/plugins/insertdatetime/plugin-8559e2bda84f040abc77afc6610c0b61567fe174dcf2079b5aff82513c5ebe96.js","tinymce/plugins/legacyoutput/plugin.js":"tinymce/plugins/legacyoutput/plugin-acfac6647afd7c0a7c720aea06b9a74a6580840858fe00327a311a6418d3dae3.js","tinymce/plugins/link/plugin.js":"tinymce/plugins/link/plugin-93a36e0f077d895707d9885a76c26e5b08e5acfab9f3d52cdd1ccc5d89404f1e.js","tinymce/plugins/lists/plugin.js":"tinymce/plugins/lists/plugin-354eba74c0107c7f347aaab0ac206e01b8e0503d00f28cc0cc55f6c04f901f9e.js","tinymce/plugins/media/plugin.js":"tinymce/plugins/media/plugin-ab1015dd22dff3d1edcc2d04b54f39b3f7ff7f7d783c0880b5edf6de58d78937.js","tinymce/plugins/nonbreaking/plugin.js":"tinymce/plugins/nonbreaking/plugin-6039d3b3f9c68a3b29a6bb476760fa62da1d941e38ef8cb91e61c4aaa9456f98.js","tinymce/plugins/noneditable/plugin.js":"tinymce/plugins/noneditable/plugin-3cb8e1ac660348b0453dca0e8549a9325dca0cf259adb96802f37e83fb8d17be.js","tinymce/plugins/pagebreak/plugin.js":"tinymce/plugins/pagebreak/plugin-9e005e9e9abb08da742141d002238561c30dcd15549168e17c690f2c7c7a9dd3.js","tinymce/plugins/paste/plugin.js":"tinymce/plugins/paste/plugin-437f540601d04f07cb4c2434fdf377be3ac9634b180a878c2f2987f3ad897afc.js","tinymce/plugins/preview/plugin.js":"tinymce/plugins/preview/plugin-36ce30c549b23aed9dd151603a23aafab512529d586067e34974877992c79eed.js","tinymce/plugins/print/plugin.js":"tinymce/plugins/print/plugin-4a91981252ff653a07dd12936abfb0b0c4191e33d85f5c5d5f7e8e73581b6a57.js","tinymce/plugins/quickbars/plugin.js":"tinymce/plugins/quickbars/plugin-54bba909c7a5b3f9086cec22e918e378945dfb855e4041a85c9e0fb00faaa510.js","tinymce/plugins/save/plugin.js":"tinymce/plugins/save/plugin-0fd05e2ed11aac190c5d2a0ac32aa675d0bea06b519301d89151aaaa7b124674.js","tinymce/plugins/searchreplace/plugin.js":"tinymce/plugins/searchreplace/plugin-4bb6490f6586b4c50a56757a69be8e6577544d5353881a02621e2200b54e8a18.js","tinymce/plugins/spellchecker/plugin.js":"tinymce/plugins/spellchecker/plugin-8fcd863cbf64e3cc62fe3fc1a4bfe417f8401b1d204d91d1c9da880c29a52162.js","tinymce/plugins/tabfocus/plugin.js":"tinymce/plugins/tabfocus/plugin-cbc31c55658d581cc1e0130e5bae26fb27f10e7f0c53879845d6295ffb27fefa.js","tinymce/plugins/table/plugin.js":"tinymce/plugins/table/plugin-b11c6cd37f6d5badf46a9d96e452118b81881beb07fe41d2c0a3f7b405902234.js","tinymce/plugins/template/plugin.js":"tinymce/plugins/template/plugin-62d74415b497183892c093351d57ee4fe36938be5b0a84360925501efede022a.js","tinymce/plugins/textcolor/plugin.js":"tinymce/plugins/textcolor/plugin-77c1248e72fe32cf181c36a070147484ee4560710d5f617a4670d65d11202207.js","tinymce/plugins/textpattern/plugin.js":"tinymce/plugins/textpattern/plugin-14c80d034b4d08368543a88cfdd7a71fe044d76a511e087752420957fe192e66.js","tinymce/plugins/toc/plugin.js":"tinymce/plugins/toc/plugin-e6c05b09e6066ce22300ca4942a530d621362f8a2d69d21d486bf5f57ce86c63.js","tinymce/plugins/visualblocks/plugin.js":"tinymce/plugins/visualblocks/plugin-dc48dde1907640cf2cc67ab99de28b69b7b7a04479c9a2d3284a21e190a2fc5b.js","tinymce/plugins/visualchars/plugin.js":"tinymce/plugins/visualchars/plugin-7a67008641a389395f71289303344cf2f9e699970d8ac27f8be769281c56a157.js","tinymce/plugins/wordcount/plugin.js":"tinymce/plugins/wordcount/plugin-adeca7c01633cf92382c63b9f99934fcc1f8f4034b84b8a653f800bc6deadf86.js","tinymce/skins/content/default/content.css":"tinymce/skins/content/default/content-59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178.css","tinymce/skins/content/default/content.min.css":"tinymce/skins/content/default/content.min-59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178.css","tinymce/skins/content/document/content.css":"tinymce/skins/content/document/content-1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943.css","tinymce/skins/content/document/content.min.css":"tinymce/skins/content/document/content.min-1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943.css","tinymce/skins/content/writer/content.css":"tinymce/skins/content/writer/content-eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656.css","tinymce/skins/content/writer/content.min.css":"tinymce/skins/content/writer/content.min-eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656.css","tinymce/skins/ui/oxide/content.css":"tinymce/skins/ui/oxide/content-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css","tinymce/skins/ui/oxide/content.inline.css":"tinymce/skins/ui/oxide/content.inline-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css","tinymce/skins/ui/oxide/content.inline.min.css":"tinymce/skins/ui/oxide/content.inline.min-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css","tinymce/skins/ui/oxide/content.min.css":"tinymce/skins/ui/oxide/content.min-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css","tinymce/skins/ui/oxide/content.mobile.css":"tinymce/skins/ui/oxide/content.mobile-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css","tinymce/skins/ui/oxide/content.mobile.min.css":"tinymce/skins/ui/oxide/content.mobile.min-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css","tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff":"tinymce/skins/ui/oxide/fonts/tinymce-mobile-e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213.woff","tinymce/skins/ui/oxide/skin.css":"tinymce/skins/ui/oxide/skin-19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48.css","tinymce/skins/ui/oxide/skin.min.css":"tinymce/skins/ui/oxide/skin.min-19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48.css","tinymce/skins/ui/oxide/skin.mobile.css":"tinymce/skins/ui/oxide/skin.mobile-22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22.css","tinymce/skins/ui/oxide/skin.mobile.min.css":"tinymce/skins/ui/oxide/skin.mobile.min-22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22.css","tinymce/skins/ui/oxide-dark/content.css":"tinymce/skins/ui/oxide-dark/content-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css","tinymce/skins/ui/oxide-dark/content.inline.css":"tinymce/skins/ui/oxide-dark/content.inline-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css","tinymce/skins/ui/oxide-dark/content.inline.min.css":"tinymce/skins/ui/oxide-dark/content.inline.min-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css","tinymce/skins/ui/oxide-dark/content.min.css":"tinymce/skins/ui/oxide-dark/content.min-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css","tinymce/skins/ui/oxide-dark/skin.css":"tinymce/skins/ui/oxide-dark/skin-5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768.css","tinymce/skins/ui/oxide-dark/skin.min.css":"tinymce/skins/ui/oxide-dark/skin.min-5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768.css","tinymce/themes/mobile/theme.js":"tinymce/themes/mobile/theme-3ebedb886fbcc21c3b79f250f398c0ff4a2d870dd7a737322aceef1f2479ccd2.js","tinymce/themes/silver/theme.js":"tinymce/themes/silver/theme-02294426af3edeff56daa3e5fd3ef013944295525b150b8114eaca9de6201af7.js"}} \ No newline at end of file +{"files":{"active_admin-877e761ceb08240deef11c0e8cf64c89f98cc542a77364f1402ff4afd6449509.css":{"logical_path":"active_admin.css","mtime":"2019-05-14T13:12:35+02:00","size":105676,"digest":"877e761ceb08240deef11c0e8cf64c89f98cc542a77364f1402ff4afd6449509","integrity":"sha256-h352HOsIJA3u8RwOjPZMifmMxUKnc2TxQC/0r9ZElQk="},"active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif":{"logical_path":"active_admin/nested_menu_arrow.gif","mtime":"2019-05-14T13:10:54+02:00","size":70,"digest":"15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442","integrity":"sha256-FQhNk8ZcGWTXB3cA6nSL0tcM+i1MGXB8WKnGTiMt1EI="},"active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif":{"logical_path":"active_admin/nested_menu_arrow_dark.gif","mtime":"2019-05-14T13:10:54+02:00","size":70,"digest":"7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034","integrity":"sha256-fEO44KX4gjh19JoJPJ16azdPiFtvnMJIrpzX5umykDQ="},"active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png":{"logical_path":"active_admin/orderable.png","mtime":"2019-05-14T13:10:54+02:00","size":220,"digest":"29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617","integrity":"sha256-KTdNu1WwAS14o3xhTVc7s0dPB3mEm0eKFH0PGEXKZhc="},"active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css":{"logical_path":"active_admin/print.css","mtime":"2019-05-14T13:10:54+02:00","size":7086,"digest":"cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6","integrity":"sha256-z5nL8n+5IGWp6s0o5vrUj6csra9uCRh5Do01sR2PmfY="},"active_admin-71f5376a62a9260af4c6b4c0930c35cdf18e4e35221289beb36ba77fac8bb030.js":{"logical_path":"active_admin.js","mtime":"2019-05-21T22:19:54+02:00","size":961773,"digest":"71f5376a62a9260af4c6b4c0930c35cdf18e4e35221289beb36ba77fac8bb030","integrity":"sha256-cfU3amKpJgr0xrTAkww1zfGOTjUiEom+s2unf6yLsDA="},"tinymce-1103c4904fc1df026a84e5ce890ce02b9a9fda036966b0fb34ad900ccb83c712.js":{"logical_path":"tinymce.js","mtime":"2019-05-14T13:13:17+02:00","size":1043848,"digest":"1103c4904fc1df026a84e5ce890ce02b9a9fda036966b0fb34ad900ccb83c712","integrity":"sha256-EQPEkE/B3wJqhOXOiQzgK5qf2gNpZrD7NK2QDMuDxxI="},"modernizr-654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97.js":{"logical_path":"modernizr.js","mtime":"2019-05-14T13:12:49+02:00","size":51365,"digest":"654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97","integrity":"sha256-ZUIi3r6AGLEvGZPO3f8w3BY6fVAI15hpw5nW0WcyH5c="},"font-awesome/fa-brands-400-bd4e21d8e25a889e979ac2367770c36863443b8e0f99feeaee09a62625b9cb13.eot":{"logical_path":"font-awesome/fa-brands-400.eot","mtime":"2019-05-14T13:12:35+02:00","size":129916,"digest":"bd4e21d8e25a889e979ac2367770c36863443b8e0f99feeaee09a62625b9cb13","integrity":"sha256-vU4h2OJaiJ6XmsI2d3DDaGNEO44Pmf7q7gmmJiW5yxM="},"font-awesome/fa-regular-400-4aa44a07b71f47067872c8f177f31babc0c609af2b384511353c89b1ca804458.eot":{"logical_path":"font-awesome/fa-regular-400.eot","mtime":"2019-05-14T13:12:35+02:00","size":34388,"digest":"4aa44a07b71f47067872c8f177f31babc0c609af2b384511353c89b1ca804458","integrity":"sha256-SqRKB7cfRwZ4csjxd/Mbq8DGCa8rOEURNTyJscqARFg="},"font-awesome/fa-solid-900-e153efe317e731e59eb8d6d1a568a811b8f7dd5df3823c327103be8e4a0047e4.eot":{"logical_path":"font-awesome/fa-solid-900.eot","mtime":"2019-05-14T13:12:35+02:00","size":186728,"digest":"e153efe317e731e59eb8d6d1a568a811b8f7dd5df3823c327103be8e4a0047e4","integrity":"sha256-4VPv4xfnMeWeuNbRpWioEbj33V3zgjwycQO+jkoAR+Q="},"font-awesome/fa-brands-400-e281f2a25598bf8b40a77f3c5228b51900788224e91dade3f4a0f8c383505f43.svg":{"logical_path":"font-awesome/fa-brands-400.svg","mtime":"2019-05-14T13:12:35+02:00","size":694583,"digest":"e281f2a25598bf8b40a77f3c5228b51900788224e91dade3f4a0f8c383505f43","integrity":"sha256-4oHyolWYv4tAp388Uii1GQB4giTpHa3j9KD4w4NQX0M="},"font-awesome/fa-regular-400-934530d864b6f03fad8e87b66daf829d17f0e7afbd74baead32a6a4157d584c2.svg":{"logical_path":"font-awesome/fa-regular-400.svg","mtime":"2019-05-14T13:12:35+02:00","size":144451,"digest":"934530d864b6f03fad8e87b66daf829d17f0e7afbd74baead32a6a4157d584c2","integrity":"sha256-k0Uw2GS28D+tjoe2ba+CnRfw56+9dLrq0ypqQVfVhMI="},"font-awesome/fa-solid-900-d5b212510d72b66bdb7feb22c611456621c3dd1a2e88cc42983d7d4c9ab79563.svg":{"logical_path":"font-awesome/fa-solid-900.svg","mtime":"2019-05-14T13:12:35+02:00","size":816926,"digest":"d5b212510d72b66bdb7feb22c611456621c3dd1a2e88cc42983d7d4c9ab79563","integrity":"sha256-1bISUQ1ytmvbf+sixhFFZiHD3RouiMxCmD19TJq3lWM="},"font-awesome/fa-brands-400-70726f98e0d98f543d5fde05a3a74bb131c5c67f5fbffcf4d41b7f68bca2b56b.ttf":{"logical_path":"font-awesome/fa-brands-400.ttf","mtime":"2019-05-14T13:12:35+02:00","size":129612,"digest":"70726f98e0d98f543d5fde05a3a74bb131c5c67f5fbffcf4d41b7f68bca2b56b","integrity":"sha256-cHJvmODZj1Q9X94Fo6dLsTHFxn9fv/z01Bt/aLyitWs="},"font-awesome/fa-regular-400-112491dccca97bf50ec7adff8d430dcba6d0b71e0a0b20386f814f3bf5bb94b5.ttf":{"logical_path":"font-awesome/fa-regular-400.ttf","mtime":"2019-05-14T13:12:35+02:00","size":34092,"digest":"112491dccca97bf50ec7adff8d430dcba6d0b71e0a0b20386f814f3bf5bb94b5","integrity":"sha256-ESSR3Mype/UOx63/jUMNy6bQtx4KCyA4b4FPO/W7lLU="},"font-awesome/fa-solid-900-7a58f741ff539af94798ff561c918e5841d7e6164e90cbe57befdec4a16f6a4e.ttf":{"logical_path":"font-awesome/fa-solid-900.ttf","mtime":"2019-05-14T13:12:35+02:00","size":186444,"digest":"7a58f741ff539af94798ff561c918e5841d7e6164e90cbe57befdec4a16f6a4e","integrity":"sha256-elj3Qf9TmvlHmP9WHJGOWEHX5hZOkMvle+/exKFvak4="},"font-awesome/fa-brands-400-17ce8b9d612897d1fefd5cd2096dbd83b82d05dd5d1f60421aca15c4ce2445ac.woff":{"logical_path":"font-awesome/fa-brands-400.woff","mtime":"2019-05-14T13:12:35+02:00","size":87688,"digest":"17ce8b9d612897d1fefd5cd2096dbd83b82d05dd5d1f60421aca15c4ce2445ac","integrity":"sha256-F86LnWEol9H+/VzSCW29g7gtBd1dH2BCGsoVxM4kRaw="},"font-awesome/fa-regular-400-2835b63ffc892d01aac2cc346969b501c845d9184f738589779ec176937e1f33.woff":{"logical_path":"font-awesome/fa-regular-400.woff","mtime":"2019-05-14T13:12:35+02:00","size":16804,"digest":"2835b63ffc892d01aac2cc346969b501c845d9184f738589779ec176937e1f33","integrity":"sha256-KDW2P/yJLQGqwsw0aWm1AchF2RhPc4WJd57BdpN+HzM="},"font-awesome/fa-solid-900-20464aebbff54cc17776497ce4112c3374a54b38f7ba5f58eec12174149d6742.woff":{"logical_path":"font-awesome/fa-solid-900.woff","mtime":"2019-05-14T13:12:35+02:00","size":96256,"digest":"20464aebbff54cc17776497ce4112c3374a54b38f7ba5f58eec12174149d6742","integrity":"sha256-IEZK67/1TMF3dkl85BEsM3SlSzj3ul9Y7sEhdBSdZ0I="},"font-awesome/fa-brands-400-dc64d7192f84497cacad5c10aef682562c24aa6124270f85fe247e223607f3ed.woff2":{"logical_path":"font-awesome/fa-brands-400.woff2","mtime":"2019-05-14T13:12:35+02:00","size":74768,"digest":"dc64d7192f84497cacad5c10aef682562c24aa6124270f85fe247e223607f3ed","integrity":"sha256-3GTXGS+ESXysrVwQrvaCViwkqmEkJw+F/iR+IjYH8+0="},"font-awesome/fa-regular-400-ccf4db1eeb68c96e05e74f8ebfa75cc60c3a0fed862dae6b0ad85d4e1b5b4e4f.woff2":{"logical_path":"font-awesome/fa-regular-400.woff2","mtime":"2019-05-14T13:12:35+02:00","size":13552,"digest":"ccf4db1eeb68c96e05e74f8ebfa75cc60c3a0fed862dae6b0ad85d4e1b5b4e4f","integrity":"sha256-zPTbHutoyW4F50+Ov6dcxgw6D+2GLa5rCthdThtbTk8="},"font-awesome/fa-solid-900-f18c486a80175cf02fee0e05c2b4acd86c04cdbaecec61c1ef91f920509b5efe.woff2":{"logical_path":"font-awesome/fa-solid-900.woff2","mtime":"2019-05-14T13:12:35+02:00","size":74256,"digest":"f18c486a80175cf02fee0e05c2b4acd86c04cdbaecec61c1ef91f920509b5efe","integrity":"sha256-8YxIaoAXXPAv7g4FwrSs2GwEzbrs7GHB75H5IFCbXv4="},"agendadescommuns-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png":{"logical_path":"agendadescommuns.png","mtime":"2018-03-01T22:17:10+01:00","size":2760,"digest":"0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33","integrity":"sha256-ABe+9T9iYcs7+VLUt4DGQwc2lxSy4eLU659p39mGqzM="},"alert-762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906.png":{"logical_path":"alert.png","mtime":"2014-07-04T14:08:56+02:00","size":47876,"digest":"762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906","integrity":"sha256-dirOlHkygkOkQGE0a2TE1rmX6WPGjfxr3dnk0kEZKQY="},"baby_gnu_adl-463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc.png":{"logical_path":"baby_gnu_adl.png","mtime":"2018-03-01T22:17:10+01:00","size":7411,"digest":"463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc","integrity":"sha256-RjqBggqi1P/Y5yENvOGhn/ysZ+82KqewkigMb5XJA/w="},"baby_gnu_adl-97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e.svg":{"logical_path":"baby_gnu_adl.svg","mtime":"2016-09-11T17:42:49+02:00","size":109635,"digest":"97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e","integrity":"sha256-lyUQBdMiXPHVi4xJfWt5BdvJVgzIrNUBGPzOYNCiZ54="},"communs-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png":{"logical_path":"communs.png","mtime":"2018-03-01T22:17:10+01:00","size":2760,"digest":"0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33","integrity":"sha256-ABe+9T9iYcs7+VLUt4DGQwc2lxSy4eLU659p39mGqzM="},"lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png":{"logical_path":"lef-small.png","mtime":"2018-03-01T22:17:10+01:00","size":1059,"digest":"93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e","integrity":"sha256-kyhdUxr0Y/h3lR1j/oRKbpYAt4LCyB94cjtzAHL6lC4="},"lef-7e9152b909c78144ff44ca2254c06709333bef0b8d4985deb1361aba5c63c86d.png":{"logical_path":"lef.png","mtime":"2018-12-20T12:28:10+01:00","size":15783,"digest":"7e9152b909c78144ff44ca2254c06709333bef0b8d4985deb1361aba5c63c86d","integrity":"sha256-fpFSuQnHgUT/RMoiVMBnCTM77wuNSYXesTYaulxjyG0="},"linux-presentation-day-863b30562924505dd21841220861f83643d310e0b943a0e6a905462ddfac86f1.png":{"logical_path":"linux-presentation-day.png","mtime":"2019-04-19T16:45:03+02:00","size":9358,"digest":"863b30562924505dd21841220861f83643d310e0b943a0e6a905462ddfac86f1","integrity":"sha256-hjswVikkUF3SGEEiCGH4NkPTEOC5Q6DmqQVGLd+shvE="},"priorite-logiciel-libre-je-soutiens-april_2_m-6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc.png":{"logical_path":"priorite-logiciel-libre-je-soutiens-april_2_m.png","mtime":"2018-07-15T15:58:42+02:00","size":16952,"digest":"6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc","integrity":"sha256-ZELkVOlu1FzB68QGc6bFC9KGucKOpqi1hXLpT31kWfw="},"regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png":{"logical_path":"regions/CA-QC.png","mtime":"2018-03-01T22:18:39+01:00","size":469,"digest":"70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174","integrity":"sha256-cGmeam4lxpBAo/FUiwr9gpxJA8zKJ2C2wQ9JzIfV0XQ="},"team-65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa.png":{"logical_path":"team.png","mtime":"2018-03-01T22:17:10+01:00","size":3586,"digest":"65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa","integrity":"sha256-ZchgIc+KEVRJNmQJSur8vj5aoT3GdbuO80siBIHbmPo="},"application-b28f5a42dc6b5de7d77e7b9ef9351c708f2153532290127f06ff78c9f4d978f2.js":{"logical_path":"application.js","mtime":"2019-05-11T17:00:57+02:00","size":1964749,"digest":"b28f5a42dc6b5de7d77e7b9ef9351c708f2153532290127f06ff78c9f4d978f2","integrity":"sha256-so9aQtxrXefXfnue+TUccI8hU1MikBJ/Bv94yfTZePI="},"application-8d9e6b02a80528a80ba3b8b8ee333f1a34e130575fb088490c2bc9403fb04597.css":{"logical_path":"application.css","mtime":"2019-05-14T15:14:02+02:00","size":170794,"digest":"8d9e6b02a80528a80ba3b8b8ee333f1a34e130575fb088490c2bc9403fb04597","integrity":"sha256-jZ5rAqgFKKgLo7i47jM/GjThMFdfsIhJDCvJQD+wRZc="},"flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg":{"logical_path":"flags/4x3/ad.svg","mtime":"2019-05-14T13:11:18+02:00","size":33972,"digest":"f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497","integrity":"sha256-9nxOWj9wnq1TwE2f81YU5sZ1F8PTKJFw96MXOQ9mFJc="},"flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg":{"logical_path":"flags/1x1/ad.svg","mtime":"2019-05-14T13:11:18+02:00","size":32745,"digest":"a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c","integrity":"sha256-oxWDbsLJ3MEe+b/YsYqnzPwtMUNcv0aiwxkwg2B24Jw="},"flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg":{"logical_path":"flags/4x3/ae.svg","mtime":"2019-05-14T13:11:18+02:00","size":257,"digest":"7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e","integrity":"sha256-ejs9wPULUxABTPvMggCl8c5WgSe/Q0UuQOgVjgz/LS4="},"flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg":{"logical_path":"flags/1x1/ae.svg","mtime":"2019-05-14T13:11:18+02:00","size":265,"digest":"bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5","integrity":"sha256-vN2aTaCVmHhfPjHbT/Qx4iaHsurRggmj5hVgBlUGjNU="},"flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg":{"logical_path":"flags/4x3/af.svg","mtime":"2019-05-14T13:11:18+02:00","size":21279,"digest":"01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260","integrity":"sha256-AWAbUh+oZYLjLDnu2MiEgK/sH4AbbekptS7X5J2kcmA="},"flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg":{"logical_path":"flags/1x1/af.svg","mtime":"2019-05-14T13:11:18+02:00","size":21145,"digest":"6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d","integrity":"sha256-YzLPdUpeKGbbYxkj4ffPxSoKVU0yuXvPGfgmOBnkyn0="},"flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg":{"logical_path":"flags/4x3/ag.svg","mtime":"2019-05-14T13:11:18+02:00","size":748,"digest":"cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b","integrity":"sha256-y2lS2CG6x4VSMcLLTRxE98cw9rNiFRirIPMNK5r+YEs="},"flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg":{"logical_path":"flags/1x1/ag.svg","mtime":"2019-05-14T13:11:18+02:00","size":764,"digest":"14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4","integrity":"sha256-FPfZl4SHqvREa1UWfoWnEcSKE/8H7awXXBcpaaOGUMQ="},"flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg":{"logical_path":"flags/4x3/ai.svg","mtime":"2019-05-14T13:11:18+02:00","size":42208,"digest":"f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc","integrity":"sha256-8HxswGRv36RBuaUG4dRujc4Nl7NyIikunGczyZXcibw="},"flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg":{"logical_path":"flags/1x1/ai.svg","mtime":"2019-05-14T13:11:18+02:00","size":47975,"digest":"95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810","integrity":"sha256-lQmeVE3im86junNd5TWCPy4ZrrQEPoLbwdmGL5JiuBA="},"flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg":{"logical_path":"flags/4x3/al.svg","mtime":"2019-05-14T13:11:18+02:00","size":3221,"digest":"9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03","integrity":"sha256-m5l/JyDehh4bDM7I3fQqKJB5Xr9QgX+SI+HOunEsmwM="},"flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg":{"logical_path":"flags/1x1/al.svg","mtime":"2019-05-14T13:11:18+02:00","size":3228,"digest":"94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09","integrity":"sha256-lIUtJxH8I6vzQjU0ue25UKDGqr8dLZi/JkPzx9rfrAk="},"flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg":{"logical_path":"flags/4x3/am.svg","mtime":"2019-05-14T13:11:18+02:00","size":226,"digest":"85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6","integrity":"sha256-haGZ7CHRr3SiVjNerQweOFkrtgPY2oH+2kZ4lF6eAOY="},"flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg":{"logical_path":"flags/1x1/am.svg","mtime":"2019-05-14T13:11:18+02:00","size":234,"digest":"869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7","integrity":"sha256-hpORsBSsKZkk0wd31ypKukMHUhdykKkKH8MlWnrXnuc="},"flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg":{"logical_path":"flags/4x3/ao.svg","mtime":"2019-05-14T13:11:18+02:00","size":1608,"digest":"29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75","integrity":"sha256-KSJKYb9jKCbVMM2lXYfCYViEvSwsOjIgNu1GjjTYXHU="},"flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg":{"logical_path":"flags/1x1/ao.svg","mtime":"2019-05-14T13:11:18+02:00","size":1608,"digest":"048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e","integrity":"sha256-BI6svIYv4YaM8OxzRXtwqLSaWYyA3qBJhW8OH9b+yD4="},"flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg":{"logical_path":"flags/4x3/aq.svg","mtime":"2019-05-14T13:11:18+02:00","size":2974,"digest":"b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd","integrity":"sha256-tAGndtLxp5RBcBFPCu7Oq14dli3z3n7R7/R9loJLc/0="},"flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg":{"logical_path":"flags/1x1/aq.svg","mtime":"2019-05-14T13:11:18+02:00","size":3183,"digest":"a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531","integrity":"sha256-qNfOm/uGC24rWGCLUL8sr8UiDHf20Emrd3CJH2QzRTE="},"flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg":{"logical_path":"flags/4x3/ar.svg","mtime":"2019-05-14T13:11:18+02:00","size":3430,"digest":"bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826","integrity":"sha256-v3NHW7cHEAh03sU4zkt+G1r8TtZ9xQqKgA7lGeUcyCY="},"flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg":{"logical_path":"flags/1x1/ar.svg","mtime":"2019-05-14T13:11:18+02:00","size":3503,"digest":"fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60","integrity":"sha256-/GWCzG0+8HgoBdhJfud6stg2xTQi6RAH5I+BpKn6LmA="},"flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg":{"logical_path":"flags/4x3/as.svg","mtime":"2019-05-14T13:11:18+02:00","size":8098,"digest":"79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1","integrity":"sha256-edOVGQNFIG6gNHW2e0RjjhERViQRUEtgZGSDycCw99E="},"flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg":{"logical_path":"flags/1x1/as.svg","mtime":"2019-05-14T13:11:18+02:00","size":7845,"digest":"04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183","integrity":"sha256-BPDbd8XYYQpVxpUIsianwziST4z31ld9XWWQ6F7lcYM="},"flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg":{"logical_path":"flags/4x3/at.svg","mtime":"2019-05-14T13:11:18+02:00","size":243,"digest":"3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f","integrity":"sha256-PRl96PHwCWorDUQLb8fYCCFYWmY35kbAVIeodxi/a18="},"flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg":{"logical_path":"flags/1x1/at.svg","mtime":"2019-05-14T13:11:18+02:00","size":245,"digest":"ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8","integrity":"sha256-7E25rqx5OCesfI5AwHKnb3Z1AQBYzIyN/TqGu1rPprg="},"flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg":{"logical_path":"flags/4x3/au.svg","mtime":"2019-05-14T13:11:18+02:00","size":1335,"digest":"126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12","integrity":"sha256-Em+iUAoxUoel+Ef02Vi7kp8R2ps581kSzEQMD8/7ixI="},"flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg":{"logical_path":"flags/1x1/au.svg","mtime":"2019-05-14T13:11:18+02:00","size":1320,"digest":"bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b","integrity":"sha256-v5kNzJV8n3TrkI6P+nM/FzEne/bsi3MBpuoe2StZzEs="},"flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg":{"logical_path":"flags/4x3/aw.svg","mtime":"2019-05-14T13:11:18+02:00","size":9948,"digest":"4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6","integrity":"sha256-RSRkNFJCPpXzsNvmIWsFmp5SEms0xzrks8F7aC+JOqY="},"flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg":{"logical_path":"flags/1x1/aw.svg","mtime":"2019-05-14T13:11:18+02:00","size":12088,"digest":"f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8","integrity":"sha256-9wArzu9VSGpEK/a/Qzvgxg0LFbKqVIuBxSTGfM8FZag="},"flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg":{"logical_path":"flags/4x3/ax.svg","mtime":"2019-05-14T13:11:18+02:00","size":556,"digest":"c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90","integrity":"sha256-wpfg62VMpi5Y9es6u3DfnyReSRlJDym9Dx1JxP4FLZA="},"flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg":{"logical_path":"flags/1x1/ax.svg","mtime":"2019-05-14T13:11:18+02:00","size":544,"digest":"a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880","integrity":"sha256-oSRWiey/MhwKnlVruhfzyfKuuLH2PRT8tZHXaofxKIA="},"flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg":{"logical_path":"flags/4x3/az.svg","mtime":"2019-05-14T13:11:18+02:00","size":515,"digest":"132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c","integrity":"sha256-Ey5o1eA4bTufoFtCiKD9ZvFBTivHr2udQ3tpNaffoAw="},"flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg":{"logical_path":"flags/1x1/az.svg","mtime":"2019-05-14T13:11:18+02:00","size":501,"digest":"3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d","integrity":"sha256-OZDAUmuTO9ZQKF2CHyuT5DKnO6cJhpVJuO91sFHTvS0="},"flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg":{"logical_path":"flags/4x3/ba.svg","mtime":"2019-05-14T13:11:18+02:00","size":1306,"digest":"89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5","integrity":"sha256-id0MFgDZR0HefWZ6SHMQGToMSMTPGlFZw7+d031l0rU="},"flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg":{"logical_path":"flags/1x1/ba.svg","mtime":"2019-05-14T13:11:18+02:00","size":1247,"digest":"2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a","integrity":"sha256-Lb6Q6xK5N/Spro25V2CTCj4xj0zlgprAXikurWmLrlo="},"flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg":{"logical_path":"flags/4x3/bb.svg","mtime":"2019-05-14T13:11:18+02:00","size":613,"digest":"16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6","integrity":"sha256-Fvgkn/lYv7wY+x8jpSggADR7/9tXaaxiCWYYWx3LV/Y="},"flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg":{"logical_path":"flags/1x1/bb.svg","mtime":"2019-05-14T13:11:18+02:00","size":616,"digest":"fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060","integrity":"sha256-+ukthCYZauJP+lYaynJhP65lGl6cC82mPsyHet0FsGA="},"flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg":{"logical_path":"flags/4x3/bd.svg","mtime":"2019-05-14T13:11:18+02:00","size":193,"digest":"8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6","integrity":"sha256-jawFR+c+4loEFIo/D9AmqQ5Wwjt+kpIVZdQmMFC6d6Y="},"flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg":{"logical_path":"flags/1x1/bd.svg","mtime":"2019-05-14T13:11:18+02:00","size":195,"digest":"ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1","integrity":"sha256-7MPD6H1MxZyDUPK019yo9c9GvbJjGdsO6At0RIKvUME="},"flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg":{"logical_path":"flags/4x3/be.svg","mtime":"2019-05-14T13:11:18+02:00","size":293,"digest":"a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae","integrity":"sha256-oYDKaFIRiAF7tTZ/GeUD2VmdbL7NYb8FTlmlf1jmSK4="},"flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg":{"logical_path":"flags/1x1/be.svg","mtime":"2019-05-14T13:11:18+02:00","size":293,"digest":"c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e","integrity":"sha256-yNQZQTe9AZVShbMp39+ZZJDRbDEWqSzi8yLjVLbXSU4="},"flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg":{"logical_path":"flags/4x3/bf.svg","mtime":"2019-05-14T13:11:18+02:00","size":360,"digest":"6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313","integrity":"sha256-ayFJNu+J8ZEz1KhOmc3wz9uZ1kCfLzc/bRhpRCMBMxM="},"flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg":{"logical_path":"flags/1x1/bf.svg","mtime":"2019-05-14T13:11:18+02:00","size":386,"digest":"04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee","integrity":"sha256-BMfWGqMUrataQb1513qngMEBNrtrj0xiQj5h4j44Ue4="},"flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg":{"logical_path":"flags/4x3/bg.svg","mtime":"2019-05-14T13:11:18+02:00","size":289,"digest":"dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4","integrity":"sha256-3TmFunRpQrDmW8UqKAzE0o+yT9LH2eIqya/S117nv8Q="},"flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg":{"logical_path":"flags/1x1/bg.svg","mtime":"2019-05-14T13:11:18+02:00","size":297,"digest":"f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746","integrity":"sha256-9ZKUpzbVvcDxArWNcNvkXQK9kt+CKCC/lTNoQPdaB0Y="},"flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg":{"logical_path":"flags/4x3/bh.svg","mtime":"2019-05-14T13:11:18+02:00","size":546,"digest":"7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c","integrity":"sha256-fILEprqWMXLGwbRCPzmg6+nJmUScx92HAYkXlD20c1w="},"flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg":{"logical_path":"flags/1x1/bh.svg","mtime":"2019-05-14T13:11:18+02:00","size":572,"digest":"6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88","integrity":"sha256-aJOqw+VcZIDp2sDAI+whefbBKg2oKgvCcXE0OEwJfog="},"flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg":{"logical_path":"flags/4x3/bi.svg","mtime":"2019-05-14T13:11:18+02:00","size":1074,"digest":"4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c","integrity":"sha256-T80BFvf5PAVkxpVYBvPDVj0OpzNK5AbymolyVYRckjw="},"flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg":{"logical_path":"flags/1x1/bi.svg","mtime":"2019-05-14T13:11:18+02:00","size":1048,"digest":"91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a","integrity":"sha256-kcNOtDGya+Z4UngqC5Ph19V3qSVFTWyM6gCg2HLS3oo="},"flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg":{"logical_path":"flags/4x3/bj.svg","mtime":"2019-05-14T13:11:18+02:00","size":499,"digest":"63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f","integrity":"sha256-Y73bQmj1+MLthnBBvPBY+xj82dHgeZ4BKG/KLV6WHH8="},"flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg":{"logical_path":"flags/1x1/bj.svg","mtime":"2019-05-14T13:11:18+02:00","size":502,"digest":"e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc","integrity":"sha256-4mBsWoSYxHSmtnCGJriBCPy3OEA0R2ZWbcVvgEJ5zfw="},"flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg":{"logical_path":"flags/4x3/bl.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74","integrity":"sha256-gkpyZfSHidXhrVxbAEKhOn0tQ1chDlvYEk/KGZMejHQ="},"flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg":{"logical_path":"flags/1x1/bl.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6","integrity":"sha256-ump4gbDKcqxXruTYI65hGrStJKk47p4Bp6TVrgTPzPY="},"flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg":{"logical_path":"flags/4x3/bm.svg","mtime":"2019-05-14T13:11:18+02:00","size":22650,"digest":"2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc","integrity":"sha256-Li8J5aTt9LGK//WBZW9QsLTDd4PbKVkf8AynaPf3Vbw="},"flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg":{"logical_path":"flags/1x1/bm.svg","mtime":"2019-05-14T13:11:18+02:00","size":22337,"digest":"f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6","integrity":"sha256-9VP5U/h4TqTWelGX9dgIpndH64octWmQ1oOOaQCQ0tY="},"flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg":{"logical_path":"flags/4x3/bn.svg","mtime":"2019-05-14T13:11:18+02:00","size":14387,"digest":"bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180","integrity":"sha256-vPmWfBLrY5c0bLW5YK6S76QfMU94DQmj18gfXaysQYA="},"flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg":{"logical_path":"flags/1x1/bn.svg","mtime":"2019-05-14T13:11:18+02:00","size":14521,"digest":"1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043","integrity":"sha256-HRqtP+n9M86SLrozya5gR6VkY0kjnCDRvHMH7G0ZoEM="},"flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg":{"logical_path":"flags/4x3/bo.svg","mtime":"2019-05-14T13:11:18+02:00","size":118272,"digest":"fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e","integrity":"sha256-+kI/K7Srbo6d05mtc3geqNnLr9MPG37gvOz7nnt1WB4="},"flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg":{"logical_path":"flags/1x1/bo.svg","mtime":"2019-05-14T13:11:18+02:00","size":119850,"digest":"f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e","integrity":"sha256-9fqinkAZHgx2BwrBodKh8rGOnNNYuKd8767Y78SaJl4="},"flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg":{"logical_path":"flags/4x3/bq.svg","mtime":"2019-05-14T13:11:18+02:00","size":227,"digest":"493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e","integrity":"sha256-STySqxkgTDrTGebKugId8FATK5m9V6j5t0Ext4Ipwp4="},"flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg":{"logical_path":"flags/1x1/bq.svg","mtime":"2019-05-14T13:11:18+02:00","size":231,"digest":"6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33","integrity":"sha256-bjC76rwqoJf2V6QRmEs8IyeKj8zi/AFrHNbSJi9nLTM="},"flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg":{"logical_path":"flags/4x3/br.svg","mtime":"2019-05-14T13:11:18+02:00","size":8244,"digest":"cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01","integrity":"sha256-zzuoDsLJ/U08hFw6PEOiudgc+QcHopGHieix9ZaDPgE="},"flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg":{"logical_path":"flags/1x1/br.svg","mtime":"2019-05-14T13:11:18+02:00","size":7852,"digest":"7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6","integrity":"sha256-e/TksxZQrCXwvGyG64dJGn5ajqwTrMz8veRDRsiHKPY="},"flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg":{"logical_path":"flags/4x3/bs.svg","mtime":"2019-05-14T13:11:18+02:00","size":549,"digest":"69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836","integrity":"sha256-afYLX+qWtn3ZOeWXCZmUkhuz3DvPMbje58xFviiFyDY="},"flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg":{"logical_path":"flags/1x1/bs.svg","mtime":"2019-05-14T13:11:18+02:00","size":571,"digest":"f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262","integrity":"sha256-9das9+96JA3AmsiHEP13/TSUUBEEOS23TVxUDUgvImI="},"flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg":{"logical_path":"flags/4x3/bt.svg","mtime":"2019-05-14T13:11:18+02:00","size":25345,"digest":"6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e","integrity":"sha256-bCCwwA4S1YmL4COaDGbOd13r0L1TbeVqJxhZoChaA54="},"flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg":{"logical_path":"flags/1x1/bt.svg","mtime":"2019-05-14T13:11:18+02:00","size":25172,"digest":"58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85","integrity":"sha256-WN48qUOIEe8ZIOL4TEukzjLQEGn00ZerXVd95qy+DIU="},"flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg":{"logical_path":"flags/4x3/bv.svg","mtime":"2019-05-14T13:11:18+02:00","size":582,"digest":"ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586","integrity":"sha256-/xcxkPwzmzy4tugjW8Xjc4U9cSf9lMvDKsc36DmutYY="},"flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg":{"logical_path":"flags/1x1/bv.svg","mtime":"2019-05-14T13:11:18+02:00","size":585,"digest":"59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43","integrity":"sha256-WWFv8acilZBkyDknyi5JwfzkKpsY6Ruey7dPYlJ6/0M="},"flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg":{"logical_path":"flags/4x3/bw.svg","mtime":"2019-05-14T13:11:18+02:00","size":255,"digest":"4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850","integrity":"sha256-S7HTExuIxltd7MZ/e0SQPpMbyi/KyEGUJZHFmfDLuFA="},"flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg":{"logical_path":"flags/1x1/bw.svg","mtime":"2019-05-14T13:11:18+02:00","size":257,"digest":"e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6","integrity":"sha256-4I9QwINspYWK7XsFJq7W+2MNqNxra5a9mkdq9ZncidY="},"flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg":{"logical_path":"flags/4x3/by.svg","mtime":"2019-05-14T13:11:18+02:00","size":5998,"digest":"324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4","integrity":"sha256-MkrJa/vgdXgcZkvjueKsa00qRt0rQYygkgKE9kOUx9Q="},"flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg":{"logical_path":"flags/1x1/by.svg","mtime":"2019-05-14T13:11:18+02:00","size":6105,"digest":"37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a","integrity":"sha256-N7gOi/flH++ZqDB9bf+wTuFkeQzur+9gbVFsozPpSIo="},"flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg":{"logical_path":"flags/4x3/bz.svg","mtime":"2019-05-14T13:11:18+02:00","size":46916,"digest":"156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d","integrity":"sha256-FW/cRfjBXJUgoeqfwPOV8pTwIHdAjqGTjCIqN8+7fx0="},"flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg":{"logical_path":"flags/1x1/bz.svg","mtime":"2019-05-14T13:11:18+02:00","size":47160,"digest":"24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a","integrity":"sha256-JFd9TnspszqzsdN5FMhHmIm6p+jIOZxtHJn67TGrBTo="},"flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg":{"logical_path":"flags/4x3/ca.svg","mtime":"2019-05-14T13:11:18+02:00","size":731,"digest":"0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f","integrity":"sha256-DVfKtG1duwASpeSuCp7+47rukNXRV5UKbF1n7fLapY8="},"flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg":{"logical_path":"flags/1x1/ca.svg","mtime":"2019-05-14T13:11:18+02:00","size":712,"digest":"192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90","integrity":"sha256-GSpvsFROWm8zoyFJ1i8eesCh1hxcWvpX86QjRsqOjJA="},"flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg":{"logical_path":"flags/4x3/cc.svg","mtime":"2019-05-14T13:11:18+02:00","size":3144,"digest":"a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843","integrity":"sha256-o18qnhCijWkYztZeBiOwO7L78fIGcLWBvApAnTO06EM="},"flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg":{"logical_path":"flags/1x1/cc.svg","mtime":"2019-05-14T13:11:18+02:00","size":3092,"digest":"d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6","integrity":"sha256-0gJe78nTD3JPP82VwP2feTiTDssBr34M1u5lU9c1jrY="},"flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg":{"logical_path":"flags/4x3/cd.svg","mtime":"2019-05-14T13:11:18+02:00","size":352,"digest":"5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c","integrity":"sha256-XSEnyZGzBSKuCinQX6y8iHKMBQ1+Mzpg1hSvFUVFnFw="},"flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg":{"logical_path":"flags/1x1/cd.svg","mtime":"2019-05-14T13:11:18+02:00","size":510,"digest":"59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3","integrity":"sha256-WdrPQk0cjHedtmxbfyqTo8jxSXbCl1zPsHY5Z2oWAuM="},"flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg":{"logical_path":"flags/4x3/cf.svg","mtime":"2019-05-14T13:11:18+02:00","size":689,"digest":"ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e","integrity":"sha256-rAqv+6NU2EjrolAaQC7oHclqVq0KzTdB7JkF52w3Lh4="},"flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg":{"logical_path":"flags/1x1/cf.svg","mtime":"2019-05-14T13:11:18+02:00","size":635,"digest":"e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d","integrity":"sha256-5jdnT69+3NrTcYIZLQOESMFXQhqwxpN32bjlarLAJJ0="},"flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg":{"logical_path":"flags/4x3/cg.svg","mtime":"2019-05-14T13:11:18+02:00","size":484,"digest":"3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538","integrity":"sha256-Nyn3F8g8nffQVDoaXUpQbv4YS9/rOfkmC0tj7fGdJTg="},"flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg":{"logical_path":"flags/1x1/cg.svg","mtime":"2019-05-14T13:11:18+02:00","size":472,"digest":"8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf","integrity":"sha256-g1P/HyUXFLG4kF7sFyI3hCZxmVXQY30gbTXR3Ppo3c8="},"flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg":{"logical_path":"flags/4x3/ch.svg","mtime":"2019-05-14T13:11:18+02:00","size":300,"digest":"6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf","integrity":"sha256-Zznt7m0e9yxO2Xz+cj07t/F+TfU5DzpK4jTx/97s4M8="},"flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg":{"logical_path":"flags/1x1/ch.svg","mtime":"2019-05-14T13:11:18+02:00","size":298,"digest":"7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208","integrity":"sha256-fD3sRlIomBxXqQo6ezpsQt0+aZIwZj53C1UAjObRQgg="},"flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg":{"logical_path":"flags/4x3/ci.svg","mtime":"2019-05-14T13:11:18+02:00","size":283,"digest":"3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e","integrity":"sha256-PgdtE8lSQUlQjEQvj3J0JGYBJONZEoDYrpvd+dgnKh4="},"flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg":{"logical_path":"flags/1x1/ci.svg","mtime":"2019-05-14T13:11:18+02:00","size":286,"digest":"691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91","integrity":"sha256-aRoKhXe31VX8kNxxcK3J7HVxGRyzUHxGwOhRb9F3ipE="},"flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg":{"logical_path":"flags/4x3/ck.svg","mtime":"2019-05-14T13:11:18+02:00","size":1887,"digest":"9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6","integrity":"sha256-nP8JjlBa/em/UWbLewxAkXhXVjO5E84IwccA0IxHfbY="},"flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg":{"logical_path":"flags/1x1/ck.svg","mtime":"2019-05-14T13:11:18+02:00","size":1846,"digest":"9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88","integrity":"sha256-nI3/o71ZU9ihIXgIMfJbWHOOZ/O+cZYYlMVt/SWEjIg="},"flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg":{"logical_path":"flags/4x3/cl.svg","mtime":"2019-05-14T13:11:18+02:00","size":560,"digest":"a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b","integrity":"sha256-pMV+wrua3LZ+GFAlblFlInt2QYfWlBo42V0N71FEaZs="},"flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg":{"logical_path":"flags/1x1/cl.svg","mtime":"2019-05-14T13:11:18+02:00","size":577,"digest":"5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c","integrity":"sha256-Wj6Vz2M1jjkRyXQEgYws3f1GQU2EReR9aXbuFmxIkmw="},"flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg":{"logical_path":"flags/4x3/cm.svg","mtime":"2019-05-14T13:11:18+02:00","size":827,"digest":"5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722","integrity":"sha256-Xc6fNtkqYb3AxIIUG9tPVb/OwKLsx0XbZDp5U+LlpyI="},"flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg":{"logical_path":"flags/1x1/cm.svg","mtime":"2019-05-14T13:11:18+02:00","size":827,"digest":"d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd","integrity":"sha256-2NIfVMRN9d+e3vInaROEpK03wV/1fIqg3q1oTRnqyM0="},"flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg":{"logical_path":"flags/4x3/cn.svg","mtime":"2019-05-14T13:11:18+02:00","size":804,"digest":"48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f","integrity":"sha256-SM4cKDe7gGpqr4t6mHi20EDA0Gmg/8qaiknnoxqjDn8="},"flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg":{"logical_path":"flags/1x1/cn.svg","mtime":"2019-05-14T13:11:18+02:00","size":746,"digest":"e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc","integrity":"sha256-5r5kxsSpduZNOb/opq5KWx04pqobE43crPNKlC3/ULw="},"flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg":{"logical_path":"flags/4x3/co.svg","mtime":"2019-05-14T13:11:18+02:00","size":292,"digest":"648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7","integrity":"sha256-ZI0/9Zag7PPoWsF8U6vh18pHWWiOEKejqLVvCWumtvc="},"flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg":{"logical_path":"flags/1x1/co.svg","mtime":"2019-05-14T13:11:18+02:00","size":292,"digest":"d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1","integrity":"sha256-08FhgMa85jD3Yq/3iRBNEOnbyUnnQFNaYTls0Ow0waE="},"flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg":{"logical_path":"flags/4x3/cr.svg","mtime":"2019-05-14T13:11:18+02:00","size":296,"digest":"84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d","integrity":"sha256-hK7GDxm9M+GsGiCRVf7I03LhfLWdwTRruRJOXMhnN10="},"flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg":{"logical_path":"flags/1x1/cr.svg","mtime":"2019-05-14T13:11:18+02:00","size":296,"digest":"5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35","integrity":"sha256-U3HPi8WtGoBRVcGzBl5CCgpBjI1jtHK8VFiQKJo2WzU="},"flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg":{"logical_path":"flags/4x3/cu.svg","mtime":"2019-05-14T13:11:18+02:00","size":619,"digest":"bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0","integrity":"sha256-uz+FfgKuq2BhINnxZCg/B6RLIn8SqtfW00THV597P/A="},"flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg":{"logical_path":"flags/1x1/cu.svg","mtime":"2019-05-14T13:11:18+02:00","size":576,"digest":"02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d","integrity":"sha256-AsAFQWm4dKjSMd4fRbLQiE3kiEgVdzTg3c0PaEwFwY0="},"flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg":{"logical_path":"flags/4x3/cv.svg","mtime":"2019-05-14T13:11:18+02:00","size":1414,"digest":"90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f","integrity":"sha256-kO6Qq1lxNFSiGNjDAMcROeYmVd6Av76oHfkxQqUpuB8="},"flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg":{"logical_path":"flags/1x1/cv.svg","mtime":"2019-05-14T13:11:18+02:00","size":1362,"digest":"2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308","integrity":"sha256-LPPu3pekaNKEWczCJxwou1tgKa8jiLAwH2IDvlXkkwg="},"flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg":{"logical_path":"flags/4x3/cw.svg","mtime":"2019-05-14T13:11:18+02:00","size":678,"digest":"d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad","integrity":"sha256-1GvrexC0D6gs/UDrhqOzh59Z9doqL175HRIaubFsCq0="},"flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg":{"logical_path":"flags/1x1/cw.svg","mtime":"2019-05-14T13:11:18+02:00","size":685,"digest":"ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5","integrity":"sha256-unjINOYbJKiitrx8gKufFOQsPGlBWUHdt8jB9lLM2LU="},"flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg":{"logical_path":"flags/4x3/cx.svg","mtime":"2019-05-14T13:11:18+02:00","size":2469,"digest":"28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2","integrity":"sha256-KBh/udkb7cbyObEH0m627BzCoMdzCBAwbFprMTwU8rI="},"flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg":{"logical_path":"flags/1x1/cx.svg","mtime":"2019-05-14T13:11:18+02:00","size":2508,"digest":"8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6","integrity":"sha256-jr4HPZl/k9CSpJMwDqHSNMka74DG6PQx6Iqn+Ock+aY="},"flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg":{"logical_path":"flags/4x3/cy.svg","mtime":"2019-05-14T13:11:18+02:00","size":5949,"digest":"8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be","integrity":"sha256-jWM+yrx5aLuKhpxiVF8SKqy7w+EIwlzrQhu4vIc0ub4="},"flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg":{"logical_path":"flags/1x1/cy.svg","mtime":"2019-05-14T13:11:18+02:00","size":6053,"digest":"6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790","integrity":"sha256-bvN/3XUY8YcnvsHtl0G7TR+FTd5+8afp/S9Lpikad5A="},"flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg":{"logical_path":"flags/4x3/cz.svg","mtime":"2019-05-14T13:11:18+02:00","size":481,"digest":"6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56","integrity":"sha256-bJTj1T/BrlmC2OsFi3bYbwfT+0zTJWmP6jKR+jVQTFY="},"flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg":{"logical_path":"flags/1x1/cz.svg","mtime":"2019-05-14T13:11:18+02:00","size":483,"digest":"af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e","integrity":"sha256-r5iY69MlWc2+ov0Xs1Hl7tr8ytpvvGoreVLK14NpgX4="},"flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg":{"logical_path":"flags/4x3/de.svg","mtime":"2019-05-14T13:11:18+02:00","size":216,"digest":"e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1","integrity":"sha256-5zIwg2ddJRB8hfDOplNL0h0h535tUk2S4bLQpOIRF6E="},"flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg":{"logical_path":"flags/1x1/de.svg","mtime":"2019-05-14T13:11:18+02:00","size":224,"digest":"fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266","integrity":"sha256-/bYBRpUtOy0QQxCyiIKg7N5E2AgkDDurLNbDAqU4smY="},"flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg":{"logical_path":"flags/4x3/dj.svg","mtime":"2019-05-14T13:11:18+02:00","size":588,"digest":"546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03","integrity":"sha256-VG2koNrpsat03GrGB20McG837yoNeZNC3QNF4R93DwM="},"flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg":{"logical_path":"flags/1x1/dj.svg","mtime":"2019-05-14T13:11:18+02:00","size":588,"digest":"c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900","integrity":"sha256-wEgbZn8APZ1aPJOGECOpepgiQiesGap+B7W27dNf6QA="},"flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg":{"logical_path":"flags/4x3/dk.svg","mtime":"2019-05-14T13:11:18+02:00","size":242,"digest":"a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5","integrity":"sha256-oTc1wDN6tGec2GeVCL9egGdjerYRylxUFyxiHXQEIOU="},"flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg":{"logical_path":"flags/1x1/dk.svg","mtime":"2019-05-14T13:11:18+02:00","size":238,"digest":"822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c","integrity":"sha256-gio7i2lI9JqoH+diC9FzRT2aRUBqloDyS61+cU5Yy3w="},"flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg":{"logical_path":"flags/4x3/dm.svg","mtime":"2019-05-14T13:11:18+02:00","size":16026,"digest":"7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940","integrity":"sha256-dxP6vTzzQWlLTB710TeYIHc3IrYcGQI0rHQW8ocuOUA="},"flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg":{"logical_path":"flags/1x1/dm.svg","mtime":"2019-05-14T13:11:18+02:00","size":16514,"digest":"33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46","integrity":"sha256-M9mE/JiXuyo70Wxmcrh27/waitwMV60SKhbbVAYeTkY="},"flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg":{"logical_path":"flags/4x3/do.svg","mtime":"2019-05-14T13:11:18+02:00","size":394146,"digest":"714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a","integrity":"sha256-cUtvMH6jqcPTA0hoS4V06Lf1B49RZJ36l64qaacQi0o="},"flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg":{"logical_path":"flags/1x1/do.svg","mtime":"2019-05-14T13:11:18+02:00","size":391714,"digest":"d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857","integrity":"sha256-03MGxLNG+J6hRzkUQ3TKrWllK+MejOjiUEyaDUIqSFc="},"flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg":{"logical_path":"flags/4x3/dz.svg","mtime":"2019-05-14T13:11:18+02:00","size":301,"digest":"a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1","integrity":"sha256-qW6UPIMFWP6YIwRKrCv7P2pMrzvTxXlDNSKAp/a2jLE="},"flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg":{"logical_path":"flags/1x1/dz.svg","mtime":"2019-05-14T13:11:18+02:00","size":312,"digest":"09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4","integrity":"sha256-CUANOyxY5kGhZBpoe4FHZ2HQX50P9lhhrqozx/UIzaQ="},"flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg":{"logical_path":"flags/4x3/ec.svg","mtime":"2019-05-14T13:11:18+02:00","size":29417,"digest":"6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e","integrity":"sha256-Z2K6heoPe7KJsKpiGceX5SQxA9KBsUYsYbYQMPoynV4="},"flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg":{"logical_path":"flags/1x1/ec.svg","mtime":"2019-05-14T13:11:18+02:00","size":29972,"digest":"7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f","integrity":"sha256-dBCnWgE3OPu4y9dW2Wc4DgKuVMp06e+aQcS1g8LCeU8="},"flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg":{"logical_path":"flags/4x3/ee.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0","integrity":"sha256-zjtiIhS9nu+0M3PK4oEeqM9u9qFrtq+6pbyq6jQCTaA="},"flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg":{"logical_path":"flags/1x1/ee.svg","mtime":"2019-05-14T13:11:18+02:00","size":355,"digest":"a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8","integrity":"sha256-ogeoNjtN3kT1mVFQHCy1OUGekrCBSyXWRIcQztUiJvg="},"flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg":{"logical_path":"flags/4x3/eg.svg","mtime":"2019-05-14T13:11:18+02:00","size":9978,"digest":"16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c","integrity":"sha256-FqEfqThW3cX9RviBGt/JNmAXVySyDqq1X/BGhVo1LSw="},"flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg":{"logical_path":"flags/1x1/eg.svg","mtime":"2019-05-14T13:11:18+02:00","size":9992,"digest":"9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2","integrity":"sha256-n00JjGBDJrvDaS+eLzNdvJs0vfJwZWW/RIOA8KiJ0eI="},"flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg":{"logical_path":"flags/4x3/eh.svg","mtime":"2019-05-14T13:11:18+02:00","size":878,"digest":"9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97","integrity":"sha256-nPSnTSnBoa/EE33utbZ41VyPvfjRgSFyZ/OlzOanapc="},"flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg":{"logical_path":"flags/1x1/eh.svg","mtime":"2019-05-14T13:11:18+02:00","size":828,"digest":"16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f","integrity":"sha256-FsMyfbzzSD5jSzU2sFYyS1R4IS2ubQYPL/suyWHNOC8="},"flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg":{"logical_path":"flags/4x3/er.svg","mtime":"2019-05-14T13:11:18+02:00","size":3207,"digest":"69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e","integrity":"sha256-aaHh5FKJ0Sgt9LHlzl5xLWn74xSr0MkiNT/OkIFMVD4="},"flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg":{"logical_path":"flags/1x1/er.svg","mtime":"2019-05-14T13:11:18+02:00","size":3395,"digest":"90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a","integrity":"sha256-kNSUCOWJVc8c8xhbAZPgPEoQcELUfvXpddu+EMbvf0o="},"flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg":{"logical_path":"flags/4x3/es.svg","mtime":"2019-05-14T13:11:18+02:00","size":92574,"digest":"50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499","integrity":"sha256-UOWWgca2QSSYvZy/xHOr7ccT23XFTFOLg52zw5TWRJk="},"flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg":{"logical_path":"flags/1x1/es.svg","mtime":"2019-05-14T13:11:18+02:00","size":94269,"digest":"29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d","integrity":"sha256-KcaPo8nIwq2s3C6wFi6cL6mY+qQIg2kA7GKFAAR2gA0="},"flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg":{"logical_path":"flags/4x3/et.svg","mtime":"2019-05-14T13:11:18+02:00","size":1243,"digest":"14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df","integrity":"sha256-FCY7p+qJD9Ck2JonkTQ+y3rMiaqx/CWT4Apgk7IiUd8="},"flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg":{"logical_path":"flags/1x1/et.svg","mtime":"2019-05-14T13:11:18+02:00","size":1242,"digest":"086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6","integrity":"sha256-CG7vtw6a2tU3zBxkCnLMD6hD7HqbBrJ3iqmLLbBVv+Y="},"flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg":{"logical_path":"flags/4x3/fi.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e","integrity":"sha256-pMQcqgKk9oA+oNbDbeS+6/INFQ4990KxNppAmcL/ZI4="},"flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg":{"logical_path":"flags/1x1/fi.svg","mtime":"2019-05-14T13:11:18+02:00","size":243,"digest":"c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a","integrity":"sha256-xf3zGPrF/fyU/lQmhhjliivFkzYX6tCZkpAPkMwl3po="},"flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg":{"logical_path":"flags/4x3/fj.svg","mtime":"2019-05-14T13:11:18+02:00","size":27388,"digest":"cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79","integrity":"sha256-ywzEs7XCAvB0h+5Rn0iz6ttHA19fLV0/mdIPgeSNa3k="},"flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg":{"logical_path":"flags/1x1/fj.svg","mtime":"2019-05-14T13:11:18+02:00","size":27519,"digest":"c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f","integrity":"sha256-wsf9U2hBkl52R7LVENagxYcA4qje0OQgCPuT/6zeEB8="},"flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg":{"logical_path":"flags/4x3/fk.svg","mtime":"2019-05-14T13:11:18+02:00","size":30453,"digest":"cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968","integrity":"sha256-y2HqoNciGCP30X3lnqiO0WtQb5WFqwxykc+DlEnYKWg="},"flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg":{"logical_path":"flags/1x1/fk.svg","mtime":"2019-05-14T13:11:18+02:00","size":30648,"digest":"a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf","integrity":"sha256-qHF0I4CuFX0SEaY8w1zTYhsb9t5tZ+So41Za0gCx2M8="},"flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg":{"logical_path":"flags/4x3/fm.svg","mtime":"2019-05-14T13:11:18+02:00","size":773,"digest":"079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153","integrity":"sha256-B5uTdWKppBKq6Pt2K1cd20m/I2J5Q8lyR7apu9t2gVM="},"flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg":{"logical_path":"flags/1x1/fm.svg","mtime":"2019-05-14T13:11:18+02:00","size":763,"digest":"dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8","integrity":"sha256-2+xzYz7NimxQ9W1U3za75qL4+1NKx2WEd8gsrRSoBqg="},"flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg":{"logical_path":"flags/4x3/fo.svg","mtime":"2019-05-14T13:11:18+02:00","size":567,"digest":"27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413","integrity":"sha256-JyecJIG7HLPkSFCpSJh9aoQRrP+ncMOuzRt21MWFNBM="},"flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg":{"logical_path":"flags/1x1/fo.svg","mtime":"2019-05-14T13:11:18+02:00","size":537,"digest":"7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f","integrity":"sha256-fLT9u6HHIjcC2EPLBwndx5n4n5Cd/hAePjbWvzbD5n8="},"flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg":{"logical_path":"flags/4x3/fr.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e","integrity":"sha256-MO0vaNyaF5J2Q2QPSPPSqFi9BBdwVHA1NJxueXE82E4="},"flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg":{"logical_path":"flags/1x1/fr.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc","integrity":"sha256-a4SRUSBMZvpmHDCzTmKRmhO55mt803pPyJYujguvm9w="},"flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg":{"logical_path":"flags/4x3/ga.svg","mtime":"2019-05-14T13:11:18+02:00","size":277,"digest":"e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63","integrity":"sha256-44QPnVvW7gjbdI03pTRQC4N77g+M5lmHsvCZpq/SzGM="},"flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg":{"logical_path":"flags/1x1/ga.svg","mtime":"2019-05-14T13:11:18+02:00","size":281,"digest":"9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9","integrity":"sha256-nq/VOIBCs9IlisYiMHW3JkJiEBNrmFG2N5cxBXIbZNk="},"flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg":{"logical_path":"flags/4x3/gb.svg","mtime":"2019-05-14T13:11:18+02:00","size":834,"digest":"ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d","integrity":"sha256-zpPIprl01jmY4mP20l+Jj8IFgKKEZEV/L0Rjtofk/o0="},"flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg":{"logical_path":"flags/1x1/gb.svg","mtime":"2019-05-14T13:11:18+02:00","size":792,"digest":"1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457","integrity":"sha256-HZPhzi4uEMFwnk3FCslWwAeywaY6S8It39ZDVPea1Fc="},"flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg":{"logical_path":"flags/4x3/gd.svg","mtime":"2019-05-14T13:11:18+02:00","size":1694,"digest":"7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2","integrity":"sha256-fDprYGi72aaryYwil91KzV4xAi5aQhD8DhIF7ChJj6I="},"flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg":{"logical_path":"flags/1x1/gd.svg","mtime":"2019-05-14T13:11:18+02:00","size":1834,"digest":"2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8","integrity":"sha256-IxC8A9no3chZm0CJG/sQuBKwcCOIFZmn4C4wKNG8nKg="},"flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg":{"logical_path":"flags/4x3/ge.svg","mtime":"2019-05-14T13:11:18+02:00","size":1400,"digest":"501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f","integrity":"sha256-UBwBNfuMN329KFn/YpC0fvSQeo4qsq4eORFrcW22eV8="},"flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg":{"logical_path":"flags/1x1/ge.svg","mtime":"2019-05-14T13:11:18+02:00","size":1544,"digest":"ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114","integrity":"sha256-yp7jaIPsEgSPu3+7+vIxwNSEiuCwfat0pG1Tt7NNgRQ="},"flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg":{"logical_path":"flags/4x3/gf.svg","mtime":"2019-05-14T13:11:18+02:00","size":261,"digest":"7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2","integrity":"sha256-fBZfkL/mrDZ0kDYyGCIhqZLwF/9wY1SxdhACOC6JwsI="},"flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg":{"logical_path":"flags/1x1/gf.svg","mtime":"2019-05-14T13:11:18+02:00","size":264,"digest":"8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c","integrity":"sha256-iDgzexXNzxQ/rBbHFOjb8tiT0uqPHI7wba3LZS3+xBw="},"flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg":{"logical_path":"flags/4x3/gg.svg","mtime":"2019-05-14T13:11:18+02:00","size":598,"digest":"2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778","integrity":"sha256-LHv8UNW803S19hB5dNBq8k5w7boxrXGiJeDC7MLW53g="},"flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg":{"logical_path":"flags/1x1/gg.svg","mtime":"2019-05-14T13:11:18+02:00","size":628,"digest":"509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359","integrity":"sha256-UJSJsXkoMbsn1pdcdqoKKsL6LDkGvPhE9hbeXg+7w1k="},"flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg":{"logical_path":"flags/4x3/gh.svg","mtime":"2019-05-14T13:11:18+02:00","size":286,"digest":"79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf","integrity":"sha256-ecGHdW6T3yL65XGtlBlinFJHwBbjKnRHHg1GEEj99c8="},"flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg":{"logical_path":"flags/1x1/gh.svg","mtime":"2019-05-14T13:11:18+02:00","size":299,"digest":"e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b","integrity":"sha256-578Y5jN5gu4x42c6uT5yKzQQt6TCAmVqS8OIfYZWKGs="},"flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg":{"logical_path":"flags/4x3/gi.svg","mtime":"2019-05-14T13:11:18+02:00","size":2972,"digest":"ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087","integrity":"sha256-7ZmzacjHfmSr1Z+rHygVXXG0N4tJYlxmqwq23/T4gIc="},"flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg":{"logical_path":"flags/1x1/gi.svg","mtime":"2019-05-14T13:11:18+02:00","size":2964,"digest":"2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a","integrity":"sha256-LlY+ludm4TwKnFo6NyBZpEc5u2luhT1xpvawjEkd+5o="},"flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg":{"logical_path":"flags/4x3/gl.svg","mtime":"2019-05-14T13:11:18+02:00","size":229,"digest":"612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260","integrity":"sha256-YS5WDbrWjVQL5nK4DiLFTbQ9biBwUj6BwVbM1rP8QmA="},"flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg":{"logical_path":"flags/1x1/gl.svg","mtime":"2019-05-14T13:11:18+02:00","size":243,"digest":"a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e","integrity":"sha256-qbs10rn/J2OGWNmta54sT0UgcrmoC1CNMudtN79iz24="},"flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg":{"logical_path":"flags/4x3/gm.svg","mtime":"2019-05-14T13:11:18+02:00","size":543,"digest":"4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045","integrity":"sha256-Sm+WcKQVSMzqztK3KOS8Vqy8SjulVE56CX99rnqLsEU="},"flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg":{"logical_path":"flags/1x1/gm.svg","mtime":"2019-05-14T13:11:18+02:00","size":385,"digest":"b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c","integrity":"sha256-tn+fa84vjIcAwZjei/r6xy0BuKHlW3f3Hoyv3Fj4r1w="},"flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg":{"logical_path":"flags/4x3/gn.svg","mtime":"2019-05-14T13:11:18+02:00","size":298,"digest":"873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28","integrity":"sha256-hztOtS80x1WL75PP0bghF7XDLJ+8BhD4ghzNIvKKvig="},"flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg":{"logical_path":"flags/1x1/gn.svg","mtime":"2019-05-14T13:11:18+02:00","size":298,"digest":"72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504","integrity":"sha256-cvUdwwzw7VRZrQ8jnPMEPqwF7OdZRbyvTqZlOvhoxQQ="},"flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg":{"logical_path":"flags/4x3/gp.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923","integrity":"sha256-RVnK0+stFzIUFh0WsCN8aPXIF3SaOchi+nsj37Su6SM="},"flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg":{"logical_path":"flags/1x1/gp.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416","integrity":"sha256-1maVMgVNtbfkQfSFjCiSAkamXKPooVUYxkx7u0+cZBY="},"flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg":{"logical_path":"flags/4x3/gq.svg","mtime":"2019-05-14T13:11:18+02:00","size":5188,"digest":"0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9","integrity":"sha256-DI3+f5VDMHBWu+bW5EoWwXIBIo5TRNWv7BzPG5pesvk="},"flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg":{"logical_path":"flags/1x1/gq.svg","mtime":"2019-05-14T13:11:18+02:00","size":5280,"digest":"ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8","integrity":"sha256-7Ldh5ttZub+Lo3Uz6vDGC3/MfA36L88oHuhMlw3LEPg="},"flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg":{"logical_path":"flags/4x3/gr.svg","mtime":"2019-05-14T13:11:18+02:00","size":818,"digest":"4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80","integrity":"sha256-SkCGMQOXv/poLUOb6GUKnijZTjKWO2QRthQ1KSrEz4A="},"flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg":{"logical_path":"flags/1x1/gr.svg","mtime":"2019-05-14T13:11:18+02:00","size":875,"digest":"0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f","integrity":"sha256-DL0XGJLAVosFXTtlhdWKwT3WDfvPrRbtofT56tEd0W8="},"flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg":{"logical_path":"flags/4x3/gs.svg","mtime":"2019-05-14T13:11:18+02:00","size":34658,"digest":"e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486","integrity":"sha256-5FFpqTqelMFfXLdlpshjMZFx+5tNzlYJRBGCnNaI1IY="},"flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg":{"logical_path":"flags/1x1/gs.svg","mtime":"2019-05-14T13:11:18+02:00","size":35151,"digest":"3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a","integrity":"sha256-PvyeGzKWH5qp1/qiYm5ZYoK2PQSfZxfCN4so4/UI55o="},"flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg":{"logical_path":"flags/4x3/gt.svg","mtime":"2019-05-14T13:11:18+02:00","size":37857,"digest":"64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5","integrity":"sha256-ZKc0XPZvrPfzI9IUKuu0FyGREIp4rHSTsaYHe3isjsU="},"flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg":{"logical_path":"flags/1x1/gt.svg","mtime":"2019-05-14T13:11:18+02:00","size":37857,"digest":"436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911","integrity":"sha256-Q2oq89lc88sT3tiX8xnP1uLAh9Z4rQ6XHBmLDSwCmRE="},"flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg":{"logical_path":"flags/4x3/gu.svg","mtime":"2019-05-14T13:11:18+02:00","size":4859,"digest":"f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53","integrity":"sha256-9WCCLuI35Sd4KeY2E6YVou49jMYZbf//4PDVakmxHFM="},"flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg":{"logical_path":"flags/1x1/gu.svg","mtime":"2019-05-14T13:11:18+02:00","size":4644,"digest":"a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450","integrity":"sha256-pxydKQxmwaCSmwVDbcaoIpsRR9fMYjNuBMmt9pcDBFA="},"flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg":{"logical_path":"flags/4x3/gw.svg","mtime":"2019-05-14T13:11:18+02:00","size":816,"digest":"0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219","integrity":"sha256-DcnsF3Ne1gW2hnKUfOVcSaTsFVFJHM0SH0gsGHXN8hk="},"flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg":{"logical_path":"flags/1x1/gw.svg","mtime":"2019-05-14T13:11:18+02:00","size":892,"digest":"7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674","integrity":"sha256-eGjDBeSmSw2Ov9P3y4yIGEHXGn4MPq0mg/5QPIDeBnQ="},"flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg":{"logical_path":"flags/4x3/gy.svg","mtime":"2019-05-14T13:11:18+02:00","size":491,"digest":"c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85","integrity":"sha256-yRJuVExiUIq/uJjwrwvXnEb0x2fJ7W+ShBiiSw8kbYU="},"flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg":{"logical_path":"flags/1x1/gy.svg","mtime":"2019-05-14T13:11:18+02:00","size":484,"digest":"0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972","integrity":"sha256-DjuEnORg+Ksex89molvhupHom3LYsKpnmgVTRk83qXI="},"flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg":{"logical_path":"flags/4x3/hk.svg","mtime":"2019-05-14T13:11:18+02:00","size":3511,"digest":"cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7","integrity":"sha256-zs6RJsy/kVH+rf7XV5Hr8y1KFr6rEvGCQEUZ0Mwk7sc="},"flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg":{"logical_path":"flags/1x1/hk.svg","mtime":"2019-05-14T13:11:18+02:00","size":3561,"digest":"9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d","integrity":"sha256-n60A4G+QNIdxSTlJFLqivDKSIjsOMt8rH5OZ1N5uFn0="},"flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg":{"logical_path":"flags/4x3/hm.svg","mtime":"2019-05-14T13:11:18+02:00","size":1328,"digest":"4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9","integrity":"sha256-S0kjuB2iTWLr8xqbwK3fdr7vhFkzdLHL0DuhnzsS4+k="},"flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg":{"logical_path":"flags/1x1/hm.svg","mtime":"2019-05-14T13:11:18+02:00","size":1312,"digest":"776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61","integrity":"sha256-d2yCIROiLoNYEjTQX0C/wO04tgZI2H9RPz2j//lv+2E="},"flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg":{"logical_path":"flags/4x3/hn.svg","mtime":"2019-05-14T13:11:18+02:00","size":1115,"digest":"855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9","integrity":"sha256-hVyDB4YoOGKl85ng1p3/5StiI7kbMuMbVdVcgvL6Msk="},"flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg":{"logical_path":"flags/1x1/hn.svg","mtime":"2019-05-14T13:11:18+02:00","size":1119,"digest":"64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd","integrity":"sha256-ZMOLrJQDQXxOJ2v1U20oT8VBD8BLgKzTmpYdKY9DDb0="},"flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg":{"logical_path":"flags/4x3/hr.svg","mtime":"2019-05-14T13:11:18+02:00","size":41617,"digest":"c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af","integrity":"sha256-yMrYYfc5iiK50n6mgtJ3jfDd6OFG0wFCtSlNr5iIVK8="},"flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg":{"logical_path":"flags/1x1/hr.svg","mtime":"2019-05-14T13:11:18+02:00","size":41808,"digest":"60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489","integrity":"sha256-YMCT32dg5MxqvibDelK+O1FFjwJxLxjhHwiwfcYjtIk="},"flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg":{"logical_path":"flags/4x3/ht.svg","mtime":"2019-05-14T13:11:18+02:00","size":15231,"digest":"fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16","integrity":"sha256-/oHaBiKPo25/IRvsDZ8MAg9bnH+BU0tMsiUYSKonaxY="},"flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg":{"logical_path":"flags/1x1/ht.svg","mtime":"2019-05-14T13:11:18+02:00","size":15317,"digest":"dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9","integrity":"sha256-3QGXwHiFnFpm/zpR06P5KAl2jja/q97A/Aq2DQaK/Nk="},"flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg":{"logical_path":"flags/4x3/hu.svg","mtime":"2019-05-14T13:11:18+02:00","size":277,"digest":"9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344","integrity":"sha256-mqmY5jZoeu3kkeMH89Bo2+WPLZC/367A560DuqWzY0Q="},"flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg":{"logical_path":"flags/1x1/hu.svg","mtime":"2019-05-14T13:11:18+02:00","size":279,"digest":"06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23","integrity":"sha256-BoWND71DIEluhJAQ41yP6C62GBiM9uwymu+T9eevHCM="},"flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg":{"logical_path":"flags/4x3/id.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293","integrity":"sha256-d12/7dZTOv31vQF8zBrU+PQjjL6HOT2cg3pmkZbxcpM="},"flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg":{"logical_path":"flags/1x1/id.svg","mtime":"2019-05-14T13:11:18+02:00","size":242,"digest":"3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29","integrity":"sha256-OSDOZip+qTeywRcH2OH1PbUmEd0ATt91OwOJ7UkNnSk="},"flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg":{"logical_path":"flags/4x3/ie.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0","integrity":"sha256-Y2ihySRA/PgNPDVgdUO8qi1GYtbgvHrPZ0ndvEGKcsA="},"flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg":{"logical_path":"flags/1x1/ie.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3","integrity":"sha256-GZfp3mQPp2Rneqj11S94iLskoCkWDo9nsG29BDtPEbM="},"flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg":{"logical_path":"flags/4x3/il.svg","mtime":"2019-05-14T13:11:18+02:00","size":898,"digest":"d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178","integrity":"sha256-12iDojMPmgWkpkmQupVfwb6Qu0a8sZrlSMIYFufnQXg="},"flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg":{"logical_path":"flags/1x1/il.svg","mtime":"2019-05-14T13:11:18+02:00","size":851,"digest":"f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8","integrity":"sha256-9eZD0OEBaaQ4EZ3EQeoxALUqL/Vpu7OjrW0RMbR2Atg="},"flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg":{"logical_path":"flags/4x3/im.svg","mtime":"2019-05-14T13:11:18+02:00","size":9948,"digest":"bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf","integrity":"sha256-u66Kqd0Sn4RGVWr+SQQZStQzd9iC+acF/PHaK9v6vM8="},"flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg":{"logical_path":"flags/1x1/im.svg","mtime":"2019-05-14T13:11:18+02:00","size":10295,"digest":"767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3","integrity":"sha256-dn1ywuctcy1lybAWra2YN3jfu7K1tS5xgw9OQSl3KNM="},"flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg":{"logical_path":"flags/4x3/in.svg","mtime":"2019-05-14T13:11:18+02:00","size":1077,"digest":"519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29","integrity":"sha256-UZ4zMhuLK6cKC3VX1mxi1+/clyOJbEn4JSixBwKP/ik="},"flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg":{"logical_path":"flags/1x1/in.svg","mtime":"2019-05-14T13:11:18+02:00","size":1091,"digest":"27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361","integrity":"sha256-J4MfdtxqIYpSm25dDq/EwZyZlGEye3wBP1kibAYBo2E="},"flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg":{"logical_path":"flags/4x3/io.svg","mtime":"2019-05-14T13:11:18+02:00","size":27446,"digest":"8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6","integrity":"sha256-jSWo6Y9oIZm0E637y2iYw3BYybrgheQn+6sD1W6MDeY="},"flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg":{"logical_path":"flags/1x1/io.svg","mtime":"2019-05-14T13:11:18+02:00","size":27497,"digest":"627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde","integrity":"sha256-Yn87DO9y/ZH/Qm10oAfcMtdMn+Z3zyyDVcuoQ1nhb94="},"flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg":{"logical_path":"flags/4x3/iq.svg","mtime":"2019-05-14T13:11:18+02:00","size":1479,"digest":"96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6","integrity":"sha256-lrJNFDkYTQpMNcp86mXl8gRpoOjIQ4ljqtAW5Zw5nMY="},"flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg":{"logical_path":"flags/1x1/iq.svg","mtime":"2019-05-14T13:11:18+02:00","size":1484,"digest":"af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669","integrity":"sha256-rwTbE5+MRM/gxhLiwF6EjM+tiPu/y1jojNt8gNs2Vmk="},"flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg":{"logical_path":"flags/4x3/ir.svg","mtime":"2019-05-14T13:11:18+02:00","size":15484,"digest":"db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019","integrity":"sha256-2ywjDTVa3isawjXsZHuxU15HA8Y5pE+c4RJHMnLuEBk="},"flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg":{"logical_path":"flags/1x1/ir.svg","mtime":"2019-05-14T13:11:18+02:00","size":15387,"digest":"c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63","integrity":"sha256-xkjL9W/I8yT9pHfqgWeDyd+KfTmPRfX5SswcFsiHe2M="},"flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg":{"logical_path":"flags/4x3/is.svg","mtime":"2019-05-14T13:11:18+02:00","size":521,"digest":"29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7","integrity":"sha256-KVCGkxOJdyKXWLDzIro06Q2816inToggcpkz0kBR2ac="},"flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg":{"logical_path":"flags/1x1/is.svg","mtime":"2019-05-14T13:11:18+02:00","size":529,"digest":"b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01","integrity":"sha256-scXbHUtIU7gUTx2Iq6u/FPyIdSNARXuj4slKtdVMnAE="},"flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg":{"logical_path":"flags/4x3/it.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562","integrity":"sha256-0sFoBQ/FCa2sEWOwl7DtQJIXVgc1sngCrpJZWHwUZWI="},"flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg":{"logical_path":"flags/1x1/it.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea","integrity":"sha256-WS00+2ZkMPoA+Y0zNiPV76PI4OZaxO7ga7xMHefOS+o="},"flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg":{"logical_path":"flags/4x3/je.svg","mtime":"2019-05-14T13:11:18+02:00","size":4776,"digest":"b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35","integrity":"sha256-s2Ok46IWMPEHkcLr63+RgyCBbvh8FV1P0pzjeYL03zU="},"flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg":{"logical_path":"flags/1x1/je.svg","mtime":"2019-05-14T13:11:18+02:00","size":4757,"digest":"6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9","integrity":"sha256-bUP3TjDgmbwFbakl7DTAIAcI8KbpDaNNseWdVM4Qz9k="},"flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg":{"logical_path":"flags/4x3/jm.svg","mtime":"2019-05-14T13:11:18+02:00","size":392,"digest":"3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823","integrity":"sha256-PRM/vCVk8p4DaFXoviJNFXn+Zv5J4PWiugvc88snKCM="},"flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg":{"logical_path":"flags/1x1/jm.svg","mtime":"2019-05-14T13:11:18+02:00","size":392,"digest":"1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467","integrity":"sha256-GuqOpdjLxxf6PvMx2MqpoUIciKe9B25A+CdqW2+NBGc="},"flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg":{"logical_path":"flags/4x3/jo.svg","mtime":"2019-05-14T13:11:18+02:00","size":717,"digest":"eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6","integrity":"sha256-7uQyM5+OpnUJh+ESEYfrS1PsU33XzLJAwBjeY/epLbY="},"flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg":{"logical_path":"flags/1x1/jo.svg","mtime":"2019-05-14T13:11:18+02:00","size":694,"digest":"7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa","integrity":"sha256-eWmyCDxTXIW35xS3VUWaZgaUDgtd2xtx4k2vChgNFKo="},"flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg":{"logical_path":"flags/4x3/jp.svg","mtime":"2019-05-14T13:11:18+02:00","size":484,"digest":"2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe","integrity":"sha256-Lq3PxnuozVDB2obgjmd44BAsMHKGXauMMSzIgAbaCr4="},"flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg":{"logical_path":"flags/1x1/jp.svg","mtime":"2019-05-14T13:11:18+02:00","size":500,"digest":"551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5","integrity":"sha256-VRKBp15sb9ZOtls59WECtSwYL2w47gRclCL2WS8PZcU="},"flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg":{"logical_path":"flags/4x3/ke.svg","mtime":"2019-05-14T13:11:18+02:00","size":1383,"digest":"45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b","integrity":"sha256-RXkLw+we2O0BJHd6fJ4JFjNTta9P9wrmYEphtTcS30s="},"flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg":{"logical_path":"flags/1x1/ke.svg","mtime":"2019-05-14T13:11:18+02:00","size":1495,"digest":"2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b","integrity":"sha256-LMok7PAkuAFUPAVy78mWn/2vJc7DE+IUnGSWGDm8MBs="},"flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg":{"logical_path":"flags/4x3/kg.svg","mtime":"2019-05-14T13:11:18+02:00","size":3387,"digest":"3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49","integrity":"sha256-OHn4kx10zJxZJyYfQJWyu3hvPWLIA7KpbsVQoj+un0k="},"flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg":{"logical_path":"flags/1x1/kg.svg","mtime":"2019-05-14T13:11:18+02:00","size":3337,"digest":"74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140","integrity":"sha256-dDGJMoCPhbct8wg1jy8mmasMt6tPetPITEvkAk8PsUA="},"flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg":{"logical_path":"flags/4x3/kh.svg","mtime":"2019-05-14T13:11:18+02:00","size":7295,"digest":"7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e","integrity":"sha256-dAn6tLpOZ223tcYQILl4k7FzX+C4456bT5YQhAC+cE4="},"flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg":{"logical_path":"flags/1x1/kh.svg","mtime":"2019-05-14T13:11:18+02:00","size":7296,"digest":"2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042","integrity":"sha256-JgP2phtADLErhzl+66YK4XB1EUZ9XgxDDAWAm/ieUEI="},"flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg":{"logical_path":"flags/4x3/ki.svg","mtime":"2019-05-14T13:11:18+02:00","size":5818,"digest":"617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5","integrity":"sha256-YXwbUvPZrumdCU7b0Xdcrneq3iZqExjrRnGyuxYg3tU="},"flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg":{"logical_path":"flags/1x1/ki.svg","mtime":"2019-05-14T13:11:18+02:00","size":5955,"digest":"74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad","integrity":"sha256-dGFSZrRAok8Jq96uOFPX4REfDrp333HM0XbYP70f2a0="},"flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg":{"logical_path":"flags/4x3/km.svg","mtime":"2019-05-14T13:11:18+02:00","size":1061,"digest":"0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698","integrity":"sha256-DJvL9+Z3pUH8jf9vhIydkraYKsKTSudfqlaiuEa7Vpg="},"flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg":{"logical_path":"flags/1x1/km.svg","mtime":"2019-05-14T13:11:18+02:00","size":1044,"digest":"81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8","integrity":"sha256-gbD75T0JGUJw6O1Mvpvo6xrnJ+d5VwBTaa2L3GUd0cg="},"flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg":{"logical_path":"flags/4x3/kn.svg","mtime":"2019-05-14T13:11:18+02:00","size":816,"digest":"0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03","integrity":"sha256-BEL1X4HNOxBXxgkwHwrytQPYmolalUr4yXDfmX6SvQM="},"flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg":{"logical_path":"flags/1x1/kn.svg","mtime":"2019-05-14T13:11:18+02:00","size":820,"digest":"897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a","integrity":"sha256-iXw071S+5Ibw0k0hkeJAD0mhnZjvsZ+MPxon+wuXExo="},"flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg":{"logical_path":"flags/4x3/kp.svg","mtime":"2019-05-14T13:11:18+02:00","size":792,"digest":"a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e","integrity":"sha256-pU9yAZgrKVMDgbcaXioRwRU4YPIsBMCi2Ruw0g/t944="},"flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg":{"logical_path":"flags/1x1/kp.svg","mtime":"2019-05-14T13:11:18+02:00","size":855,"digest":"758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6","integrity":"sha256-dY7M2J7zcHgI+2jZMfCG5JMzkE9MxnyIRo88lvtDt7Y="},"flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg":{"logical_path":"flags/4x3/kr.svg","mtime":"2019-05-14T13:11:18+02:00","size":1827,"digest":"c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06","integrity":"sha256-wLmyyFQTNBDArZytvBCx4LrPAwVRmIMSbVW/oyFPnQY="},"flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg":{"logical_path":"flags/1x1/kr.svg","mtime":"2019-05-14T13:11:18+02:00","size":1733,"digest":"7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b","integrity":"sha256-fARXrF0oSyi3QuouBhoaoqNfYxceRks6frUBpIdWzns="},"flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg":{"logical_path":"flags/4x3/kw.svg","mtime":"2019-05-14T13:11:18+02:00","size":506,"digest":"81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb","integrity":"sha256-gcPV0lx7hA7xR4O1HRjGt8/GH5STLGZLvJ5Yef7wIOs="},"flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg":{"logical_path":"flags/1x1/kw.svg","mtime":"2019-05-14T13:11:18+02:00","size":510,"digest":"66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c","integrity":"sha256-ZmcCEaZ6TmHUZSoZ2CHcUZXwGiijqbKLfkxgSM2GsZw="},"flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg":{"logical_path":"flags/4x3/ky.svg","mtime":"2019-05-14T13:11:18+02:00","size":21886,"digest":"0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3","integrity":"sha256-D0q2bZUa4z+ADWgKqlcEgEupyIRNTYDlvuLj+g4QCvM="},"flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg":{"logical_path":"flags/1x1/ky.svg","mtime":"2019-05-14T13:11:18+02:00","size":22495,"digest":"fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e","integrity":"sha256-+19Xu1i3TSM3e62ZVKdauI0Vh69oVGzhN6aueoincB4="},"flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg":{"logical_path":"flags/4x3/kz.svg","mtime":"2019-05-14T13:11:18+02:00","size":11339,"digest":"39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb","integrity":"sha256-Oe3JUsWYxxviyVEJRKj69wjY5LNnta14pojRzTf1Ius="},"flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg":{"logical_path":"flags/1x1/kz.svg","mtime":"2019-05-14T13:11:18+02:00","size":11433,"digest":"924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c","integrity":"sha256-kkwE3BkmewSfNSE68OKwxUCTPAY4lDPLSqzY3aM7KGw="},"flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg":{"logical_path":"flags/4x3/la.svg","mtime":"2019-05-14T13:11:18+02:00","size":457,"digest":"e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3","integrity":"sha256-46NqO9AANELDoh06GSmV+m+zs8CKLarcjzj2Jza1seM="},"flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg":{"logical_path":"flags/1x1/la.svg","mtime":"2019-05-14T13:11:18+02:00","size":507,"digest":"c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5","integrity":"sha256-ydQiOol+Xik4pIkrvFk9OCgJO5Q5/D9t4hUg5AE928U="},"flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg":{"logical_path":"flags/4x3/lb.svg","mtime":"2019-05-14T13:11:18+02:00","size":2814,"digest":"508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f","integrity":"sha256-UIwqWptQ1gSJVnW58cHlkUw5Sn9Gj12CPrBHasqsvH8="},"flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg":{"logical_path":"flags/1x1/lb.svg","mtime":"2019-05-14T13:11:18+02:00","size":2754,"digest":"10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f","integrity":"sha256-EMm6jqeqMYnxanJzyDeYKoh/xN38nVFNj1pmDXI1b38="},"flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg":{"logical_path":"flags/4x3/lc.svg","mtime":"2019-05-14T13:11:18+02:00","size":373,"digest":"04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c","integrity":"sha256-BMzZL7FXhlQYH+uuow69a2Yg9WEVcwsqLWc8cSMHv1w="},"flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg":{"logical_path":"flags/1x1/lc.svg","mtime":"2019-05-14T13:11:18+02:00","size":373,"digest":"4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a","integrity":"sha256-T/tTr7i9KW1SasJv2AB6/HSFXpKDOok9PJNKXRLrFSo="},"flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg":{"logical_path":"flags/4x3/li.svg","mtime":"2019-05-14T13:11:18+02:00","size":8327,"digest":"3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40","integrity":"sha256-MFjcSuryvS2oy5EIkhN9cytW5enTQuVlpAWd4ajkDkA="},"flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg":{"logical_path":"flags/1x1/li.svg","mtime":"2019-05-14T13:11:18+02:00","size":8350,"digest":"0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f","integrity":"sha256-B4Ck8hi57kZuM9FCdLigFXWoazeHs0fjJpo7MBwiDV8="},"flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg":{"logical_path":"flags/4x3/lk.svg","mtime":"2019-05-14T13:11:18+02:00","size":11333,"digest":"a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe","integrity":"sha256-oT1qsdpRvjsdLFuA9NhmySPUKwF+GXRp4b/A3QIcS/4="},"flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg":{"logical_path":"flags/1x1/lk.svg","mtime":"2019-05-14T13:11:18+02:00","size":11345,"digest":"99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02","integrity":"sha256-mXWTY/Dfa4aP0TmL8FZmxoC6/h7uyLhZtk1FCTAhPgI="},"flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg":{"logical_path":"flags/4x3/lr.svg","mtime":"2019-05-14T13:11:18+02:00","size":724,"digest":"b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf","integrity":"sha256-sGodcImYJrMFzjh/ox4foL2zvLF8E5LxX5lc4dunI88="},"flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg":{"logical_path":"flags/1x1/lr.svg","mtime":"2019-05-14T13:11:18+02:00","size":697,"digest":"820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd","integrity":"sha256-ggqdAj5bHmjtZAv6uo+ErUN5xCpsXJgst2sDkN0ry90="},"flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg":{"logical_path":"flags/4x3/ls.svg","mtime":"2019-05-14T13:11:18+02:00","size":1222,"digest":"d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e","integrity":"sha256-0CvO/nwpjBU2ZfNcM+7bCOLis0U1DkvxcUqHq/hrLQ4="},"flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg":{"logical_path":"flags/1x1/ls.svg","mtime":"2019-05-14T13:11:18+02:00","size":1245,"digest":"85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb","integrity":"sha256-hccxwxOkbbEr2yf+Ip6ffQUrRHxiRmO3P/odurl/A/s="},"flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg":{"logical_path":"flags/4x3/lt.svg","mtime":"2019-05-14T13:11:18+02:00","size":445,"digest":"c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51","integrity":"sha256-wI6xihXSADy1REMrEcUIHT1XQTcGabTfMG0ca84Uy1E="},"flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg":{"logical_path":"flags/1x1/lt.svg","mtime":"2019-05-14T13:11:18+02:00","size":445,"digest":"c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5","integrity":"sha256-wb1+PSiaybDfBtRyN3gOr00w8BKB7VCn35oivDokicU="},"flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg":{"logical_path":"flags/4x3/lu.svg","mtime":"2019-05-14T13:11:18+02:00","size":231,"digest":"99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f","integrity":"sha256-mee2rbOp4PhnsX6zsfDzPbkv0nz9e2UfYkU/NZus4i8="},"flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg":{"logical_path":"flags/1x1/lu.svg","mtime":"2019-05-14T13:11:18+02:00","size":235,"digest":"ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7","integrity":"sha256-q1RERfFq+kUFSSiKyGwsyaRYqdd0ezqJ1ezvfbnIPOc="},"flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg":{"logical_path":"flags/4x3/lv.svg","mtime":"2019-05-14T13:11:18+02:00","size":236,"digest":"f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886","integrity":"sha256-+IRNULifA2n3PVgNNnZVPn5V3YqyRg5ZKimlMNm+2IY="},"flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg":{"logical_path":"flags/1x1/lv.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4","integrity":"sha256-uuztSd1CSeNqJbDyOlxgGmnp3uMTdifNRFAZS4WpndQ="},"flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg":{"logical_path":"flags/4x3/ly.svg","mtime":"2019-05-14T13:11:18+02:00","size":534,"digest":"03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae","integrity":"sha256-AyCRIUg5Z/nXSEn7kmHeI+n/LgLE5Asp8c2gYxuKX64="},"flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg":{"logical_path":"flags/1x1/ly.svg","mtime":"2019-05-14T13:11:18+02:00","size":533,"digest":"1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe","integrity":"sha256-Hm4HCqpL/JelpEajm/dGqzxMgdn2LJdcqxZOFt46P/4="},"flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg":{"logical_path":"flags/4x3/ma.svg","mtime":"2019-05-14T13:11:18+02:00","size":253,"digest":"9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63","integrity":"sha256-miXMfCho+kWyUd0bmaC+O1g99pcyFGFCAg/pxsDJW2M="},"flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg":{"logical_path":"flags/1x1/ma.svg","mtime":"2019-05-14T13:11:18+02:00","size":253,"digest":"4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3","integrity":"sha256-Txi5w1W4uL8NtputsjWhg9vVWN62Q5vwO08Y5Wg3p/M="},"flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg":{"logical_path":"flags/4x3/mc.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2","integrity":"sha256-sMUFmeoqVQaApqhnV5kw4LR9PgUZOnKUomt4SaetNeI="},"flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg":{"logical_path":"flags/1x1/mc.svg","mtime":"2019-05-14T13:11:18+02:00","size":240,"digest":"8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28","integrity":"sha256-jx/mIQM4OZ2HkdkfOSNLGgms8qpeA4dpYEjccGhTSig="},"flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg":{"logical_path":"flags/4x3/md.svg","mtime":"2019-05-14T13:11:18+02:00","size":11283,"digest":"8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643","integrity":"sha256-iEnu9735Fuli97sxr4fI1HrvM/n0ogF7LOVcQWbnlkM="},"flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg":{"logical_path":"flags/1x1/md.svg","mtime":"2019-05-14T13:11:18+02:00","size":11387,"digest":"43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4","integrity":"sha256-Q/G7QVdUWr5ueSFUWe+1SNkTu+eSIHjNQMtyKk4Z2bQ="},"flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg":{"logical_path":"flags/4x3/me.svg","mtime":"2019-05-14T13:11:18+02:00","size":63177,"digest":"983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d","integrity":"sha256-mD1FLUPPuNYov8XAz0mRwro88OOecKpTU8/U6ew9pi0="},"flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg":{"logical_path":"flags/1x1/me.svg","mtime":"2019-05-14T13:11:18+02:00","size":64191,"digest":"104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f","integrity":"sha256-EE1qlgOO8G09i4nJIhmW82SbW4IRObEbLgdpWw9v2i8="},"flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg":{"logical_path":"flags/4x3/mf.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086","integrity":"sha256-MfuFG/zCNA0vpD6GoJnMe+z8jn+Zak0spWvQUOZTcIY="},"flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg":{"logical_path":"flags/1x1/mf.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55","integrity":"sha256-/iDOm/kRYx1uee3yHIz/Bxby3B/97TlRVzVETZpm+lU="},"flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg":{"logical_path":"flags/4x3/mg.svg","mtime":"2019-05-14T13:11:18+02:00","size":305,"digest":"5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701","integrity":"sha256-Xv/pY+KfgEom+V27yVGa3UVKD9nrkY3f61Xh6ZoaJwE="},"flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg":{"logical_path":"flags/1x1/mg.svg","mtime":"2019-05-14T13:11:18+02:00","size":305,"digest":"9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91","integrity":"sha256-nlRs+3iBDZslyBSoSq3WkHiAuODN0uTjBzi1GefBrJE="},"flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg":{"logical_path":"flags/4x3/mh.svg","mtime":"2019-05-14T13:11:18+02:00","size":744,"digest":"d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782","integrity":"sha256-2M/RIwB9u5mqcAwzWVeSam1eh3q0loDHlimjJxbXp4I="},"flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg":{"logical_path":"flags/1x1/mh.svg","mtime":"2019-05-14T13:11:18+02:00","size":767,"digest":"3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45","integrity":"sha256-P+A9TQY6Ryn8i2j9Xp19Lu9uZcToKVTIP3axOM6i60U="},"flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg":{"logical_path":"flags/4x3/mk.svg","mtime":"2019-05-14T13:11:18+02:00","size":385,"digest":"6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c","integrity":"sha256-boBx0V8v8SXTC/idAA3LR9uVRc+bf/BPFHRlDsL00lw="},"flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg":{"logical_path":"flags/1x1/mk.svg","mtime":"2019-05-14T13:11:18+02:00","size":413,"digest":"fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5","integrity":"sha256-/ckhL58xHL+s5Wtlh0aKLoRREbaX7cEbft2p/PEAwdU="},"flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg":{"logical_path":"flags/4x3/ml.svg","mtime":"2019-05-14T13:11:18+02:00","size":279,"digest":"a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd","integrity":"sha256-pzAQLgxvY2LenBDvjabPexI0ZdAaKX56iYCLAfpHcc0="},"flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg":{"logical_path":"flags/1x1/ml.svg","mtime":"2019-05-14T13:11:18+02:00","size":282,"digest":"a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192","integrity":"sha256-pmE1XaIGsMt6xMhLbN9+QR+8qPyyca6Zn6YNXGdXgZI="},"flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg":{"logical_path":"flags/4x3/mm.svg","mtime":"2019-05-14T13:11:18+02:00","size":851,"digest":"6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16","integrity":"sha256-bQ0gfWYkdxEPK4Y0iAiIGNhAA4Y1jcvGaaLYxU0brhY="},"flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg":{"logical_path":"flags/1x1/mm.svg","mtime":"2019-05-14T13:11:18+02:00","size":868,"digest":"de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99","integrity":"sha256-3n1GtlQzQ69huplwRctBpwe9DbHnpYeZccqP3cvfnpk="},"flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg":{"logical_path":"flags/4x3/mn.svg","mtime":"2019-05-14T13:11:18+02:00","size":1256,"digest":"656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65","integrity":"sha256-ZW61Hoi/zoJAHkCA63kd3xbVccu6ECzdQxbF3kcRrGU="},"flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg":{"logical_path":"flags/1x1/mn.svg","mtime":"2019-05-14T13:11:18+02:00","size":1263,"digest":"ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123","integrity":"sha256-rSLLLBlafYyo5BdNsBHV9YI47iUDm1stomSdjKiwASM="},"flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg":{"logical_path":"flags/4x3/mo.svg","mtime":"2019-05-14T13:11:18+02:00","size":1516,"digest":"37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792","integrity":"sha256-N6EIiqaHrxOVG8k4huPlHLJG7M/eG1ZSjxiTJ+opF5I="},"flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg":{"logical_path":"flags/1x1/mo.svg","mtime":"2019-05-14T13:11:18+02:00","size":1550,"digest":"b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1","integrity":"sha256-tGOhw3tpEx1mLj+yrpN1g0WIJKCbz2j8ftLX/XKRONE="},"flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg":{"logical_path":"flags/4x3/mp.svg","mtime":"2019-05-14T13:11:18+02:00","size":23425,"digest":"ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14","integrity":"sha256-7NEsrcNY/fKT6FbAo//AlAkSPKvTxyASJbLSG1lVHhQ="},"flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg":{"logical_path":"flags/1x1/mp.svg","mtime":"2019-05-14T13:11:18+02:00","size":23663,"digest":"d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835","integrity":"sha256-0fS6EMFAnnEyU/H7sQfuzL1Owaj5A2Zj8awZka7lODU="},"flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg":{"logical_path":"flags/4x3/mq.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f","integrity":"sha256-tOGwipPBNkx55tYflbFvyluITabneDW8Dgrf/47MLX8="},"flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg":{"logical_path":"flags/1x1/mq.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8","integrity":"sha256-GctvfLc1TD/UDph8k6LXYynTSy7Thzw/Jf5WgC8lHqg="},"flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg":{"logical_path":"flags/4x3/mr.svg","mtime":"2019-05-14T13:11:18+02:00","size":450,"digest":"9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a","integrity":"sha256-n2SvPtXG2NH2i1ywn9GqnSjDyVEH4GP2Sg75Xwy5Qpo="},"flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg":{"logical_path":"flags/1x1/mr.svg","mtime":"2019-05-14T13:11:18+02:00","size":438,"digest":"0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576","integrity":"sha256-Dnm3vMZpu4cdlAIdsreLFiuYZ8fq+TTY96MCX9WQNXY="},"flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg":{"logical_path":"flags/4x3/ms.svg","mtime":"2019-05-14T13:11:18+02:00","size":6792,"digest":"32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc","integrity":"sha256-MmIN1wNTd3su5ilRVWl285jNOK41m1qMlzEaHcYeuLw="},"flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg":{"logical_path":"flags/1x1/ms.svg","mtime":"2019-05-14T13:11:18+02:00","size":6700,"digest":"4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c","integrity":"sha256-QQTU82y1zxxt545S6QvDxbi/omJhexanN2c/64wwoAw="},"flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg":{"logical_path":"flags/4x3/mt.svg","mtime":"2019-05-14T13:11:18+02:00","size":8807,"digest":"0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64","integrity":"sha256-DJgZqmmzS4TB7kNiCSJzcSLrOPEHvphkoGkKxm74qmQ="},"flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg":{"logical_path":"flags/1x1/mt.svg","mtime":"2019-05-14T13:11:18+02:00","size":10519,"digest":"3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106","integrity":"sha256-PD/nHyor8Nlh/RRa1+SMoenToFzOUUNUcUukVoUD0QY="},"flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg":{"logical_path":"flags/4x3/mu.svg","mtime":"2019-05-14T13:11:18+02:00","size":322,"digest":"c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059","integrity":"sha256-x4wj8UmXVrnbdirkNMo1TRSBRH+pTGa8EKypRDs5kFk="},"flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg":{"logical_path":"flags/1x1/mu.svg","mtime":"2019-05-14T13:11:18+02:00","size":322,"digest":"91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69","integrity":"sha256-kevHnQ+jBhJ+qLejP3fVso81xRbqkf8EaMc0Tcg422k="},"flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg":{"logical_path":"flags/4x3/mv.svg","mtime":"2019-05-14T13:11:18+02:00","size":292,"digest":"a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb","integrity":"sha256-oXyUfhetrmqs7wGj4THEFQqglJEbU/uurUF4NoPgCOs="},"flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg":{"logical_path":"flags/1x1/mv.svg","mtime":"2019-05-14T13:11:18+02:00","size":310,"digest":"d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01","integrity":"sha256-0TjpTZ0u0JPvFCXBFkSTt4AgL5p/eTckGnsIG3n/iwE="},"flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg":{"logical_path":"flags/4x3/mw.svg","mtime":"2019-05-14T13:11:18+02:00","size":3721,"digest":"21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632","integrity":"sha256-IfEWr99x34DjxZCExrpkCBT6U4lDAyj/VclAO1wjljI="},"flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg":{"logical_path":"flags/1x1/mw.svg","mtime":"2019-05-14T13:11:18+02:00","size":3930,"digest":"5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788","integrity":"sha256-XCIo0/HPH5z4yxWOgTICmBgowR6MrxF4NvxX+mvBx4g="},"flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg":{"logical_path":"flags/4x3/mx.svg","mtime":"2019-05-14T13:11:18+02:00","size":95864,"digest":"a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6","integrity":"sha256-ojX5sWkhWQt+eMqm92M5NhNWlG6vAEa63RBzK0ZHwLY="},"flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg":{"logical_path":"flags/1x1/mx.svg","mtime":"2019-05-14T13:11:18+02:00","size":91341,"digest":"cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292","integrity":"sha256-zasB683MwCDKFuE1XvH9GMoAQ7UB85nKjtxIrfqMcpI="},"flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg":{"logical_path":"flags/4x3/my.svg","mtime":"2019-05-14T13:11:18+02:00","size":1284,"digest":"0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59","integrity":"sha256-DtY1dM9fIMBmOrjNH3AOFQ+2Qf0Lk2AroBOrv6rl7lk="},"flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg":{"logical_path":"flags/1x1/my.svg","mtime":"2019-05-14T13:11:18+02:00","size":1275,"digest":"5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628","integrity":"sha256-Xo0x7wb/yK8zpWFtdgWS7NAixSr8i6M8ch8eSYnaBig="},"flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg":{"logical_path":"flags/4x3/mz.svg","mtime":"2019-05-14T13:11:18+02:00","size":2623,"digest":"752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a","integrity":"sha256-dS4ik5F7HS7OPwlxBMrq32pnkFSneenTvo5J3DJLuIo="},"flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg":{"logical_path":"flags/1x1/mz.svg","mtime":"2019-05-14T13:11:18+02:00","size":2604,"digest":"300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964","integrity":"sha256-MAy6l1rUPJYs7KDSZt7R/j0h1rTXAdZX+0KycmjqKWQ="},"flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg":{"logical_path":"flags/4x3/na.svg","mtime":"2019-05-14T13:11:18+02:00","size":1005,"digest":"a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8","integrity":"sha256-oGVaLnB1Enjmpg0x6Bj2coZKbmjos9M2Gy+7cPqb/vg="},"flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg":{"logical_path":"flags/1x1/na.svg","mtime":"2019-05-14T13:11:18+02:00","size":983,"digest":"1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d","integrity":"sha256-HOCJoYnbW+FesF34FV+b0Be2H8Gkl+WzAh/yymZOEi0="},"flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg":{"logical_path":"flags/4x3/nc.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305","integrity":"sha256-DHFx2RxEQU7WmAhhHbWI8Sg+5+NOqKdKmlEBukscswU="},"flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg":{"logical_path":"flags/1x1/nc.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c","integrity":"sha256-06FinwbcMgCvdmny2JX84ZCNLBygLXHlML36ZkapUWw="},"flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg":{"logical_path":"flags/4x3/ne.svg","mtime":"2019-05-14T13:11:18+02:00","size":279,"digest":"2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4","integrity":"sha256-K2HTCmy0VUU1U447dTkmhT6MYppJSjRyhrlzHIA1SOQ="},"flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg":{"logical_path":"flags/1x1/ne.svg","mtime":"2019-05-14T13:11:18+02:00","size":285,"digest":"9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1","integrity":"sha256-nF95jM19PdN3GuYotKOd+ypFeP79LgBvPOicPklNDLE="},"flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg":{"logical_path":"flags/4x3/nf.svg","mtime":"2019-05-14T13:11:18+02:00","size":5845,"digest":"4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3","integrity":"sha256-TmFbqoOotNs+Of4dJRq5E5Q9ZODNMg8lHWGatU51EtM="},"flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg":{"logical_path":"flags/1x1/nf.svg","mtime":"2019-05-14T13:11:18+02:00","size":5598,"digest":"45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103","integrity":"sha256-RUAyR8kAUEhIE6zyPFD1Q3eVKONGMXJ0Nzw8JP2DAQM="},"flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg":{"logical_path":"flags/4x3/ng.svg","mtime":"2019-05-14T13:11:18+02:00","size":263,"digest":"d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641","integrity":"sha256-1S/RiL6XPzHdNOWgs/7Q3mj+c2yKQcYCjZwkjAOMhkE="},"flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg":{"logical_path":"flags/1x1/ng.svg","mtime":"2019-05-14T13:11:18+02:00","size":263,"digest":"f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5","integrity":"sha256-8i7cxYZ1VNaey+Fa3Q+7sTiWMfPO0HpPggBlx3cMZfU="},"flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg":{"logical_path":"flags/4x3/ni.svg","mtime":"2019-05-14T13:11:18+02:00","size":18584,"digest":"2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610","integrity":"sha256-L7uIPkb747Ls/tnawATOtUbyXHeoSllm7qIkZ0rrxhA="},"flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg":{"logical_path":"flags/1x1/ni.svg","mtime":"2019-05-14T13:11:18+02:00","size":18664,"digest":"214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680","integrity":"sha256-IUrtFIthXEhG+EK0f5nPF4rGKpbPGMXdayNGcYS1ZoA="},"flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg":{"logical_path":"flags/4x3/nl.svg","mtime":"2019-05-14T13:11:18+02:00","size":367,"digest":"4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774","integrity":"sha256-Tw7OpSndTACZ3UGngB+lrESqBM2HLKMeEe/Vi1qBN3Q="},"flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg":{"logical_path":"flags/1x1/nl.svg","mtime":"2019-05-14T13:11:18+02:00","size":375,"digest":"9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68","integrity":"sha256-nI9g5jiHnWQkh4GJdeWMYc0xAvDmjDYHCCQ8B2Q2/2g="},"flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg":{"logical_path":"flags/4x3/no.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce","integrity":"sha256-Jw9+6dHS76ar8W9pP6uoWGra6ELXnYqtnj836Wwny84="},"flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg":{"logical_path":"flags/1x1/no.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979","integrity":"sha256-fTdzJejF7E3gN26fTBNGPxg69jfmxENxbyICDHoxOXk="},"flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg":{"logical_path":"flags/4x3/np.svg","mtime":"2019-05-14T13:11:18+02:00","size":1061,"digest":"69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8","integrity":"sha256-aWN92zoXPEUipxWYJ4qjJGLhdi403ZnJ3JmlFUM6bPg="},"flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg":{"logical_path":"flags/1x1/np.svg","mtime":"2019-05-14T13:11:18+02:00","size":1199,"digest":"44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2","integrity":"sha256-ROrRGMzjofy7cgzI1uq27La2IpIxX2GuWWOkAmLuEdI="},"flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg":{"logical_path":"flags/4x3/nr.svg","mtime":"2019-05-14T13:11:18+02:00","size":648,"digest":"0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d","integrity":"sha256-C9PAunu6xL1Zhbg4CW7uvWdxHTkGVhnvCS+ku1WyKm0="},"flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg":{"logical_path":"flags/1x1/nr.svg","mtime":"2019-05-14T13:11:18+02:00","size":671,"digest":"63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c","integrity":"sha256-Y7nETl3WalmJX1JwfcJNtb0eq25TUpjSTkFMDy2vyzw="},"flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg":{"logical_path":"flags/4x3/nu.svg","mtime":"2019-05-14T13:11:18+02:00","size":1748,"digest":"259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc","integrity":"sha256-JZmJ4e6gy/a0GjMXakycHqoueuZXGtgKMkxjCb1apfw="},"flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg":{"logical_path":"flags/1x1/nu.svg","mtime":"2019-05-14T13:11:18+02:00","size":1736,"digest":"1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53","integrity":"sha256-HLU1cI9k7Ys4aiReVx5nfpNQCa+S8rIUdgooMsHuG1M="},"flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg":{"logical_path":"flags/4x3/nz.svg","mtime":"2019-05-14T13:11:18+02:00","size":3019,"digest":"90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e","integrity":"sha256-kM7KKmg/vsOVqRt3sIgM6pnDssvbJMqlR0kly9zDZ14="},"flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg":{"logical_path":"flags/1x1/nz.svg","mtime":"2019-05-14T13:11:18+02:00","size":3045,"digest":"b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac","integrity":"sha256-sNePFlpy7dRlmSIqLqX2qRqCUpdcsD4zxMoI44mFmqw="},"flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg":{"logical_path":"flags/4x3/om.svg","mtime":"2019-05-14T13:11:18+02:00","size":22891,"digest":"aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965","integrity":"sha256-qtzKe8etMYQACXuEhJ3WTEdEMGzZtPFS+6NPLoQRaWU="},"flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg":{"logical_path":"flags/1x1/om.svg","mtime":"2019-05-14T13:11:18+02:00","size":22875,"digest":"705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed","integrity":"sha256-cF4r0rL8fRPBUqoGv7nm7krYspn4wGyhatrQsYsrGO0="},"flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg":{"logical_path":"flags/4x3/pa.svg","mtime":"2019-05-14T13:11:18+02:00","size":746,"digest":"027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38","integrity":"sha256-An5nm9ZdyqLFMUWhRmnB5nSkZ6iJ73AsviomD3yorTg="},"flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg":{"logical_path":"flags/1x1/pa.svg","mtime":"2019-05-14T13:11:18+02:00","size":662,"digest":"edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb","integrity":"sha256-7etPrq2qKG3n/cZn4l04rQzbzK7FAjGC/tajx06LCes="},"flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg":{"logical_path":"flags/4x3/pe.svg","mtime":"2019-05-14T13:11:18+02:00","size":74343,"digest":"7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611","integrity":"sha256-fsWYQnN8kNb/VD8YMf1ptR4efuGwaMOsYlnL8sIU1hE="},"flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg":{"logical_path":"flags/1x1/pe.svg","mtime":"2019-05-14T13:11:18+02:00","size":73629,"digest":"97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3","integrity":"sha256-l9G47R1O1eXwNIpzHKSjpLmrx9RARH3IelIfIp83XtM="},"flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg":{"logical_path":"flags/4x3/pf.svg","mtime":"2019-05-14T13:11:18+02:00","size":4292,"digest":"27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1","integrity":"sha256-J5Vcc8W+QEPFt932TI9G0RxmSOOx/A7+AouK/qIaQOE="},"flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg":{"logical_path":"flags/1x1/pf.svg","mtime":"2019-05-14T13:11:18+02:00","size":4235,"digest":"83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a","integrity":"sha256-g+Ph02+6ReAVxi+Tjm0YICntwF6/3FC8szhg82+W1zo="},"flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg":{"logical_path":"flags/4x3/pg.svg","mtime":"2019-05-14T13:11:18+02:00","size":1671,"digest":"c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897","integrity":"sha256-wv3SVR+QRMRh7M+uLXugo0epkUP2ACtxpCmUKvAheJc="},"flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg":{"logical_path":"flags/1x1/pg.svg","mtime":"2019-05-14T13:11:18+02:00","size":2111,"digest":"cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09","integrity":"sha256-z2Alf6hfknCx6ZgOcDQ1GGEQFn92wVO8RgwQ7ostSwk="},"flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg":{"logical_path":"flags/4x3/ph.svg","mtime":"2019-05-14T13:11:18+02:00","size":1303,"digest":"bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b","integrity":"sha256-vzOUhQps7GpTVCDqvOJj5/gZNBPkrx+zF8dtoCU4jBs="},"flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg":{"logical_path":"flags/1x1/ph.svg","mtime":"2019-05-14T13:11:18+02:00","size":1303,"digest":"006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169","integrity":"sha256-AGwyGO/+QmklLLljjeguoznrKJSVFwXGMFM87/qEIWk="},"flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg":{"logical_path":"flags/4x3/pk.svg","mtime":"2019-05-14T13:11:18+02:00","size":743,"digest":"b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500","integrity":"sha256-tk9qMuW7WY9Xz+ScSJnCAh8tFTZT89khAebhGyFY5QA="},"flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg":{"logical_path":"flags/1x1/pk.svg","mtime":"2019-05-14T13:11:18+02:00","size":694,"digest":"d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60","integrity":"sha256-0tWN75E8kIHF7u2l8LaJUGjsE8lVaU41lTHiNCIUXmA="},"flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg":{"logical_path":"flags/4x3/pl.svg","mtime":"2019-05-14T13:11:18+02:00","size":228,"digest":"f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f","integrity":"sha256-9VpxCZGpTC5sL58aeko267hLJLfJ2d9OH/6G1hMh+m8="},"flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg":{"logical_path":"flags/1x1/pl.svg","mtime":"2019-05-14T13:11:18+02:00","size":228,"digest":"fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7","integrity":"sha256-+vtTklk4XyuZ35EM/whXEKm02XBrdOTg+KbvYnYVxOc="},"flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg":{"logical_path":"flags/4x3/pm.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5","integrity":"sha256-j2M40q4+DkKtyXVHIMohrUl5CVz210Z6jbWlocPgsqU="},"flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg":{"logical_path":"flags/1x1/pm.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b","integrity":"sha256-YwKcYZjcQsQE7DmAeplSix0Zju7qb5oeMJVIJCSAFAs="},"flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg":{"logical_path":"flags/4x3/pn.svg","mtime":"2019-05-14T13:11:18+02:00","size":10953,"digest":"4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8","integrity":"sha256-QAbBHKgwEcDdYKE6wwsn2gV4ufE2i9jG3lqrQj9mYtg="},"flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg":{"logical_path":"flags/1x1/pn.svg","mtime":"2019-05-14T13:11:18+02:00","size":8624,"digest":"6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd","integrity":"sha256-bEM/f5y3nG1e17vq3opJXjsmyiYE9P05lQlhCWhKxd0="},"flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg":{"logical_path":"flags/4x3/pr.svg","mtime":"2019-05-14T13:11:18+02:00","size":634,"digest":"6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132","integrity":"sha256-YofhUV+oDi0FEz7ZPxTKA6G+aQmp72xzb9YPnJ/nMTI="},"flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg":{"logical_path":"flags/1x1/pr.svg","mtime":"2019-05-14T13:11:18+02:00","size":622,"digest":"526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd","integrity":"sha256-UmmFs6bS1t5XftDtktC0nOhUZn4/9jAwSBP9WvFVJ80="},"flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg":{"logical_path":"flags/4x3/ps.svg","mtime":"2019-05-14T13:11:18+02:00","size":558,"digest":"31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b","integrity":"sha256-MfUOH8tEuapunORHPDCF90TnDqD6H9jYV4f057DEpps="},"flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg":{"logical_path":"flags/1x1/ps.svg","mtime":"2019-05-14T13:11:18+02:00","size":544,"digest":"c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04","integrity":"sha256-xDkYvHG+9xsk3UboysxT4N9T4C3M5hmdBtEaRjfwigQ="},"flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg":{"logical_path":"flags/4x3/pt.svg","mtime":"2019-05-14T13:11:18+02:00","size":8393,"digest":"9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92","integrity":"sha256-mqsgyu1xTuR/xAjwFwN66pSmSbO6TYfi2jeHDuMeT5I="},"flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg":{"logical_path":"flags/1x1/pt.svg","mtime":"2019-05-14T13:11:18+02:00","size":8775,"digest":"a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966","integrity":"sha256-owmGnlAYyWkKZevfii1p1h+CdyBop5IPloDtBYGuWWY="},"flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg":{"logical_path":"flags/4x3/pw.svg","mtime":"2019-05-14T13:11:18+02:00","size":467,"digest":"9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a","integrity":"sha256-kmIDfRFND2FXHHT5pUVYCXCbQ+ZWVEOuJmeYHuy18So="},"flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg":{"logical_path":"flags/1x1/pw.svg","mtime":"2019-05-14T13:11:18+02:00","size":511,"digest":"a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6","integrity":"sha256-pvQgGWU64m1Dxum3vvg/yYz/jsXo0MUK18sKF9XlZaY="},"flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg":{"logical_path":"flags/4x3/py.svg","mtime":"2019-05-14T13:11:18+02:00","size":17312,"digest":"5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74","integrity":"sha256-W8np8N7pSuPZvYCub7GqwpfcgaHFktCnO8M4O85zr3Q="},"flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg":{"logical_path":"flags/1x1/py.svg","mtime":"2019-05-14T13:11:18+02:00","size":17478,"digest":"182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de","integrity":"sha256-GC7/MA9FB/2TmftjENHNO0WtrdeSStKBQAPHER7FwN4="},"flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg":{"logical_path":"flags/4x3/qa.svg","mtime":"2019-05-14T13:11:18+02:00","size":362,"digest":"32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e","integrity":"sha256-Msk5cPjlIYUO3fryqJ3/+YfwrjsLc6JTwwG2HPVHz54="},"flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg":{"logical_path":"flags/1x1/qa.svg","mtime":"2019-05-14T13:11:18+02:00","size":359,"digest":"182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c","integrity":"sha256-GC5Nis4mB9DALTwp1l6whK9xCSNXAGvEHNYBmB7DuBw="},"flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg":{"logical_path":"flags/4x3/re.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92","integrity":"sha256-iy6h8nJ8JmorgMsSqbcZX2tlb1IVUrZ4k7Z2Ggf5vJI="},"flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg":{"logical_path":"flags/1x1/re.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1","integrity":"sha256-B+t9hVAivGeLR7DOX9BdpQRNbd6GrTaX1K5Vxo/0R8E="},"flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg":{"logical_path":"flags/4x3/ro.svg","mtime":"2019-05-14T13:11:18+02:00","size":308,"digest":"4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f","integrity":"sha256-SreXVx4dnrMmSG91ZUpFkP0z8gRE+Ft3ugmX62E4wh8="},"flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg":{"logical_path":"flags/1x1/ro.svg","mtime":"2019-05-14T13:11:18+02:00","size":308,"digest":"ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75","integrity":"sha256-3fy67ATRG/f5Wr69HTpCsoYrGvj8qbAnZKbtDkCaHXU="},"flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg":{"logical_path":"flags/4x3/rs.svg","mtime":"2019-05-14T13:11:18+02:00","size":187640,"digest":"dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585","integrity":"sha256-3YpSRz6kDiOzk7X0ow0e3ZGGWqsWfwwYNa6EsV3M5YU="},"flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg":{"logical_path":"flags/1x1/rs.svg","mtime":"2019-05-14T13:11:18+02:00","size":187503,"digest":"42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865","integrity":"sha256-Qr9AIJyS5OcWna8p+8tyU7KATu56RjBRUpMn84hR+GU="},"flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg":{"logical_path":"flags/4x3/ru.svg","mtime":"2019-05-14T13:11:18+02:00","size":289,"digest":"13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d","integrity":"sha256-E/RSWkyq1uMa+lI9K8SgweY3fAvvG/2HJoITDT8ZnR0="},"flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg":{"logical_path":"flags/1x1/ru.svg","mtime":"2019-05-14T13:11:18+02:00","size":293,"digest":"b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe","integrity":"sha256-uXkqlj+vZnRH4EVtulvoCjs3wZekKE0VOaNDNyHZ4v4="},"flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg":{"logical_path":"flags/4x3/rw.svg","mtime":"2019-05-14T13:11:18+02:00","size":750,"digest":"bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422","integrity":"sha256-vDi81uGdKUGDmyU69uhjsTM4zeEXSHT5Z0RxAmwV5CI="},"flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg":{"logical_path":"flags/1x1/rw.svg","mtime":"2019-05-14T13:11:18+02:00","size":751,"digest":"456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c","integrity":"sha256-RWaYEjd1uD0rD6G5/gc/nM26C2vzmnA7iXnczhWOsyw="},"flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg":{"logical_path":"flags/4x3/sa.svg","mtime":"2019-05-14T13:11:18+02:00","size":10303,"digest":"2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d","integrity":"sha256-Ky/Wq7SEFdVAfFdsJKJPvYCvWHfvBs8tAmRS9sZ/X00="},"flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg":{"logical_path":"flags/1x1/sa.svg","mtime":"2019-05-14T13:11:18+02:00","size":10233,"digest":"d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae","integrity":"sha256-2evHPnlX+GYEFk3VBU+zJgGtFNff1L/nPaW90Quy+K4="},"flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg":{"logical_path":"flags/4x3/sb.svg","mtime":"2019-05-14T13:11:18+02:00","size":950,"digest":"37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf","integrity":"sha256-N3YZJwOdCje6CZXFn9MbvjbIoMoWHltyuBMeNln43d8="},"flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg":{"logical_path":"flags/1x1/sb.svg","mtime":"2019-05-14T13:11:18+02:00","size":956,"digest":"bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79","integrity":"sha256-vtv4RkzYLzkb/mF4xjBVtlDQzzruYMN/p5pYb5V4O3k="},"flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg":{"logical_path":"flags/4x3/sc.svg","mtime":"2019-05-14T13:11:18+02:00","size":568,"digest":"f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345","integrity":"sha256-9qL483vpPwdgC0kbUstY2A10uS2KzgrzE/TOCBsNE0U="},"flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg":{"logical_path":"flags/1x1/sc.svg","mtime":"2019-05-14T13:11:18+02:00","size":573,"digest":"5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60","integrity":"sha256-Xc0BuYw0RgyWJCgPtQR4EfuufZdmIM0KcK1CY6kIW2A="},"flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg":{"logical_path":"flags/4x3/sd.svg","mtime":"2019-05-14T13:11:18+02:00","size":494,"digest":"cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b","integrity":"sha256-zJz5foo3YiueG60ogR1GxEcVla+kSNwFXg46rnaH/ks="},"flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg":{"logical_path":"flags/1x1/sd.svg","mtime":"2019-05-14T13:11:18+02:00","size":496,"digest":"1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c","integrity":"sha256-H10T+XgAhay6rRPZWbGRjHlrp7BFCVSxXRReh86+BFw="},"flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg":{"logical_path":"flags/4x3/se.svg","mtime":"2019-05-14T13:11:18+02:00","size":688,"digest":"84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286","integrity":"sha256-hLBrzVvZDqjdbRw8jSeZqEPEewJWzgmK73VBSWRhgoY="},"flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg":{"logical_path":"flags/1x1/se.svg","mtime":"2019-05-14T13:11:18+02:00","size":701,"digest":"39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc","integrity":"sha256-OfEoaGZSz5FPhgERD8yayHm8ogRAcBO5Ov9MpPsu2bw="},"flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg":{"logical_path":"flags/4x3/sg.svg","mtime":"2019-05-14T13:11:18+02:00","size":890,"digest":"a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc","integrity":"sha256-qCrNkAd+djGN2wvpaZnZaVuan0Yn6KDzQdOYemJ0fcw="},"flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg":{"logical_path":"flags/1x1/sg.svg","mtime":"2019-05-14T13:11:18+02:00","size":954,"digest":"c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4","integrity":"sha256-wi4JNjRWiq4km/NfndyqZ5a18n12w5/1M2q/fxuKR9Q="},"flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg":{"logical_path":"flags/4x3/sh.svg","mtime":"2019-05-14T13:11:18+02:00","size":29702,"digest":"57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f","integrity":"sha256-V0cNmnWVXw+sYFqU6FO6tSTHRhpMAl6An7Cdt2Lr5G8="},"flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg":{"logical_path":"flags/1x1/sh.svg","mtime":"2019-05-14T13:11:18+02:00","size":30308,"digest":"8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16","integrity":"sha256-jQag//YeUetlNX0TjgBzZUWDW4ZJqiaUFS9M3J+UHBY="},"flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg":{"logical_path":"flags/4x3/si.svg","mtime":"2019-05-14T13:11:18+02:00","size":2055,"digest":"289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8","integrity":"sha256-KJ1kF/FUMj55It8J/8D0ne0xVIx+6AIMOcuFck/7zqg="},"flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg":{"logical_path":"flags/1x1/si.svg","mtime":"2019-05-14T13:11:18+02:00","size":2068,"digest":"ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051","integrity":"sha256-ykCl9POBGdb1L/092zavlZUaKqH63NiX9bwWQbsuAFE="},"flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg":{"logical_path":"flags/4x3/sj.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833","integrity":"sha256-Z9TN0mjQwM2T/FYbUGy1ZGy1CDhck+01DRH5SqHIODM="},"flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg":{"logical_path":"flags/1x1/sj.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c","integrity":"sha256-98SJYHAzE4A5YS1qvn9LC0ttraXKx114IE9ASg0pKxw="},"flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg":{"logical_path":"flags/4x3/sk.svg","mtime":"2019-05-14T13:11:18+02:00","size":1208,"digest":"a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5","integrity":"sha256-oL27f11pmP/p/LyAu98ObP82KXQNLOG41hAl4KizIrU="},"flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg":{"logical_path":"flags/1x1/sk.svg","mtime":"2019-05-14T13:11:18+02:00","size":1187,"digest":"a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed","integrity":"sha256-qCqBOy2Br5vhqndfIrLCRX0R6HDgctfiOVehHQh4+u0="},"flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg":{"logical_path":"flags/4x3/sl.svg","mtime":"2019-05-14T13:11:18+02:00","size":278,"digest":"be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb","integrity":"sha256-viZb7STP4LJXeCAfJR5S5Och49MZeVh1kTgF0a6oTrs="},"flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg":{"logical_path":"flags/1x1/sl.svg","mtime":"2019-05-14T13:11:18+02:00","size":441,"digest":"cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3","integrity":"sha256-y4vMuqIZV/AG7UrgFE2oHJmek72AFAI7FrUA/c3Dl9M="},"flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg":{"logical_path":"flags/4x3/sm.svg","mtime":"2019-05-14T13:11:18+02:00","size":15960,"digest":"d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27","integrity":"sha256-14GN8/jy1dvtJ9xaCoCx5Bzc1hMO7/Ih2ljwMh6SXyc="},"flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg":{"logical_path":"flags/1x1/sm.svg","mtime":"2019-05-14T13:11:18+02:00","size":15881,"digest":"6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd","integrity":"sha256-b4dmDcrJJbvbA2x5oOINOyCCFdMnvkxHZK4QadZGTv0="},"flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg":{"logical_path":"flags/4x3/sn.svg","mtime":"2019-05-14T13:11:18+02:00","size":427,"digest":"b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0","integrity":"sha256-sTGxejdLz70A1ELSgvpS8OTg5EjNoc36rCWpX/VkQ8A="},"flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg":{"logical_path":"flags/1x1/sn.svg","mtime":"2019-05-14T13:11:18+02:00","size":418,"digest":"d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772","integrity":"sha256-0YDTzphGlm3uaj2UM+3n0kgB3EMRY2qr1HDsW4dl13I="},"flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg":{"logical_path":"flags/4x3/so.svg","mtime":"2019-05-14T13:11:18+02:00","size":494,"digest":"3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e","integrity":"sha256-O1t3s3EplHgUSpS2DJlST7a5m/7bPcyXarcBheB/OZ4="},"flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg":{"logical_path":"flags/1x1/so.svg","mtime":"2019-05-14T13:11:18+02:00","size":501,"digest":"50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3","integrity":"sha256-UKqUHy0pVChe+eWsJgzdJkpzzy5LDGJ2d/BBQf/yr9M="},"flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg":{"logical_path":"flags/4x3/sr.svg","mtime":"2019-05-14T13:11:18+02:00","size":318,"digest":"94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2","integrity":"sha256-lNDwrvy96o17o1ZI7aUDfpm/QSZyPONkFlgupDsI0+I="},"flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg":{"logical_path":"flags/1x1/sr.svg","mtime":"2019-05-14T13:11:18+02:00","size":323,"digest":"3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82","integrity":"sha256-OUTWgwaNQ3Rxcl0i/XHMvmpjrjB/+XdWkEF9O/Jiz4I="},"flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg":{"logical_path":"flags/4x3/ss.svg","mtime":"2019-05-14T13:11:18+02:00","size":389,"digest":"f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a","integrity":"sha256-85HlACy86D+X99GhHChPouNqfW3HNHV9czZWgBqxfQo="},"flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg":{"logical_path":"flags/1x1/ss.svg","mtime":"2019-05-14T13:11:18+02:00","size":400,"digest":"853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a","integrity":"sha256-hTvZ9xPS9rH+VAqC6L9HVJEtohV1s/51a4dBdn8xj3o="},"flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg":{"logical_path":"flags/4x3/st.svg","mtime":"2019-05-14T13:11:18+02:00","size":919,"digest":"b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c","integrity":"sha256-tSu0iiwIAPXLSwe92Tw5CPd7y2gAvog+v5Q7vT2Z1Cw="},"flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg":{"logical_path":"flags/1x1/st.svg","mtime":"2019-05-14T13:11:18+02:00","size":923,"digest":"d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8","integrity":"sha256-2LWxyLn+lHCGpNJ30qxda5z/GI39N72mbIv14CxfrMg="},"flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg":{"logical_path":"flags/4x3/sv.svg","mtime":"2019-05-14T13:11:18+02:00","size":84037,"digest":"6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b","integrity":"sha256-bQLWPH8EyTiOmPiSzEPY2qIRD8hCQnWNVif80ke/0Js="},"flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg":{"logical_path":"flags/1x1/sv.svg","mtime":"2019-05-14T13:11:18+02:00","size":84509,"digest":"fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea","integrity":"sha256-+0yNfrmDlqk8W5w3GV1w6Ang1x2Lj5MW6EISH5W7guo="},"flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg":{"logical_path":"flags/4x3/sx.svg","mtime":"2019-05-14T13:11:18+02:00","size":13306,"digest":"fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224","integrity":"sha256-+2p7HLxbKe7rOaWuxk73qtQyw3u+hI0plVo3hrl2MiQ="},"flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg":{"logical_path":"flags/1x1/sx.svg","mtime":"2019-05-14T13:11:18+02:00","size":13115,"digest":"a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a","integrity":"sha256-o3sSQhL4UwuSGu92V8+zXCiVpzHHoG8zP67kyT8ygGo="},"flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg":{"logical_path":"flags/4x3/sy.svg","mtime":"2019-05-14T13:11:18+02:00","size":568,"digest":"e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50","integrity":"sha256-41+NiMhk7U847bL5+W1b1p9t8Hi1BRW4xUZ79rFon1A="},"flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg":{"logical_path":"flags/1x1/sy.svg","mtime":"2019-05-14T13:11:18+02:00","size":582,"digest":"5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9","integrity":"sha256-XVN71bQrWPbop+M/vllCoWEmq7Y57fnLWLiJOMV+uqk="},"flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg":{"logical_path":"flags/4x3/sz.svg","mtime":"2019-05-14T13:11:18+02:00","size":6755,"digest":"c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6","integrity":"sha256-xlrlkulDIXeHhINkvbTFczWGn0YmznBa2r3CYgZpwcY="},"flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg":{"logical_path":"flags/1x1/sz.svg","mtime":"2019-05-14T13:11:18+02:00","size":6706,"digest":"dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f","integrity":"sha256-3T0cZb3wkxdVPyBeWI49xzNqzsHLkxW/vg9b2Mpbuj8="},"flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg":{"logical_path":"flags/4x3/tc.svg","mtime":"2019-05-14T13:11:18+02:00","size":14585,"digest":"594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb","integrity":"sha256-WUtsyHBAg2xtZ3evtYM9Vl0+XnX0BDUKUUQ+xFiKHMs="},"flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg":{"logical_path":"flags/1x1/tc.svg","mtime":"2019-05-14T13:11:18+02:00","size":14843,"digest":"34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3","integrity":"sha256-NKNwBiUu6jQEiCIFhcMdBHtX4+eTTHcYDZMJcqrOrcM="},"flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg":{"logical_path":"flags/4x3/td.svg","mtime":"2019-05-14T13:11:18+02:00","size":270,"digest":"b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3","integrity":"sha256-tnoZeOO624lf9kDIC7bA4z6sNUIgwIzz/JPWK/XWhaM="},"flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg":{"logical_path":"flags/1x1/td.svg","mtime":"2019-05-14T13:11:18+02:00","size":282,"digest":"556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311","integrity":"sha256-VWs6eZHBcBDLfh/yPE7cwtzbjEBqEo1Af9Fl6ooZ0xE="},"flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg":{"logical_path":"flags/4x3/tf.svg","mtime":"2019-05-14T13:11:18+02:00","size":1091,"digest":"35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02","integrity":"sha256-Nc2DNRUh8wIqQ+AfDEDzRmOmasHpIEWXnzHT/WXBbQI="},"flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg":{"logical_path":"flags/1x1/tf.svg","mtime":"2019-05-14T13:11:18+02:00","size":1199,"digest":"485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5","integrity":"sha256-SF5x9h/1d3NdvEuhAlUVwiqDxI7n86LtSYBHZsNfbqU="},"flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg":{"logical_path":"flags/4x3/tg.svg","mtime":"2019-05-14T13:11:18+02:00","size":725,"digest":"24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff","integrity":"sha256-JLJfTCIT/jXl9VhterI6vwwlrSBJcIzVK6cuHse3VP8="},"flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg":{"logical_path":"flags/1x1/tg.svg","mtime":"2019-05-14T13:11:18+02:00","size":736,"digest":"05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374","integrity":"sha256-BfPZg5Kl7D5K7Pj2KdPQPwWsVau32dhBh9WZrP4nE3Q="},"flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg":{"logical_path":"flags/4x3/th.svg","mtime":"2019-05-14T13:11:18+02:00","size":287,"digest":"cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4","integrity":"sha256-zJNrrNhN3dFUVO8GvGTjV/g4VK80aS/Dc2MnLWH2N9Q="},"flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg":{"logical_path":"flags/1x1/th.svg","mtime":"2019-05-14T13:11:18+02:00","size":288,"digest":"de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172","integrity":"sha256-3oLL13DbK+U6jj1Z2G4rdIpdP5brhYT3uTZM770GoXI="},"flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg":{"logical_path":"flags/4x3/tj.svg","mtime":"2019-05-14T13:11:18+02:00","size":1831,"digest":"b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d","integrity":"sha256-uQvz4t1jJl1VtnlisWDfZfAhxCtuowTilDwQueKodJ0="},"flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg":{"logical_path":"flags/1x1/tj.svg","mtime":"2019-05-14T13:11:18+02:00","size":1788,"digest":"5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36","integrity":"sha256-X2Vx50sfhyD57MLTqiCYykXS561mArKlfCBjhHGbnzY="},"flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg":{"logical_path":"flags/4x3/tk.svg","mtime":"2019-05-14T13:11:18+02:00","size":791,"digest":"602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8","integrity":"sha256-YCUgspuQnJa66hejjrZU1sb7xwiPRqDLjY/jT/kuPLg="},"flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg":{"logical_path":"flags/1x1/tk.svg","mtime":"2019-05-14T13:11:18+02:00","size":781,"digest":"fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba","integrity":"sha256-/h3IqqBkOkWnTs7IrsCfD+IgfRBLs8KMC4RAXxJ1rro="},"flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg":{"logical_path":"flags/4x3/tl.svg","mtime":"2019-05-14T13:11:18+02:00","size":600,"digest":"ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b","integrity":"sha256-69uGKqWuXeGnIkJXHeqnC/siL0iKk7cOME8gdbR01Us="},"flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg":{"logical_path":"flags/1x1/tl.svg","mtime":"2019-05-14T13:11:18+02:00","size":582,"digest":"485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6","integrity":"sha256-SF8CGDvbGSujzm5fB24YQRJzn4g64Kj94zxFQ3e4SNY="},"flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg":{"logical_path":"flags/4x3/tm.svg","mtime":"2019-05-14T13:11:18+02:00","size":32579,"digest":"5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b","integrity":"sha256-XdtBKL8L7NfGBBPVQYAn9fAcpLxyVh1UuU/r/ueloks="},"flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg":{"logical_path":"flags/1x1/tm.svg","mtime":"2019-05-14T13:11:18+02:00","size":31884,"digest":"3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392","integrity":"sha256-NSGtVppAlaqNQWbV2QlPzP27PqQRIHrWhbbdWBTvM5I="},"flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg":{"logical_path":"flags/4x3/tn.svg","mtime":"2019-05-14T13:11:18+02:00","size":753,"digest":"ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79","integrity":"sha256-yifrUNiLEdILWwniu+y3dTJnIiSJkgxSZgjl0qzSLXk="},"flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg":{"logical_path":"flags/1x1/tn.svg","mtime":"2019-05-14T13:11:18+02:00","size":743,"digest":"222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b","integrity":"sha256-Iixs1HQsVY9I68rLR+ozQFdkL/+jRWocdeD62eco0Js="},"flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg":{"logical_path":"flags/4x3/to.svg","mtime":"2019-05-14T13:11:18+02:00","size":358,"digest":"c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1","integrity":"sha256-ycUJ/CT1kfvlK79zLEQpE4THh3luH8nHA6lzWHw/itE="},"flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg":{"logical_path":"flags/1x1/to.svg","mtime":"2019-05-14T13:11:18+02:00","size":364,"digest":"cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda","integrity":"sha256-zybftEtWuRWy8RiWNVy3eLk47VRCMxHWnXzaliaIfdo="},"flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg":{"logical_path":"flags/4x3/tr.svg","mtime":"2019-05-14T13:11:18+02:00","size":557,"digest":"c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4","integrity":"sha256-xA9pcHDPjYNYeFuSA9HI9DiXbjzWRKh9nuFvqZYN6qQ="},"flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg":{"logical_path":"flags/1x1/tr.svg","mtime":"2019-05-14T13:11:18+02:00","size":578,"digest":"627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5","integrity":"sha256-Yn3PkaHlFTwEXjOjRZtdVgAlMP3dP8U5J/TQ+36gBKU="},"flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg":{"logical_path":"flags/4x3/tt.svg","mtime":"2019-05-14T13:11:18+02:00","size":324,"digest":"04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0","integrity":"sha256-BHhv/tveLJajCtHL9NsACEjxS9cAMkZR/Ig2Tl88L9A="},"flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg":{"logical_path":"flags/1x1/tt.svg","mtime":"2019-05-14T13:11:18+02:00","size":323,"digest":"6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30","integrity":"sha256-ajxzv6d4I2bZXmc9hH74+EwEdbNk01ne8e/SZCl7rDA="},"flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg":{"logical_path":"flags/4x3/tv.svg","mtime":"2019-05-14T13:11:18+02:00","size":2299,"digest":"20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7","integrity":"sha256-ILVufAovuqKgt7G9h6/GNoRA8XX7OgWJ3l406Z0WP9c="},"flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg":{"logical_path":"flags/1x1/tv.svg","mtime":"2019-05-14T13:11:18+02:00","size":2166,"digest":"8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc","integrity":"sha256-i84de94uINzEc+06M8ZuS+3PGs8tL/9tVDU6SAuMr7w="},"flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg":{"logical_path":"flags/4x3/tw.svg","mtime":"2019-05-14T13:11:18+02:00","size":945,"digest":"36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a","integrity":"sha256-NgcKwKFasfSBFHjaYudnh1apqiZrFB7QVJq6HA4EMzo="},"flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg":{"logical_path":"flags/1x1/tw.svg","mtime":"2019-05-14T13:11:18+02:00","size":960,"digest":"fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba","integrity":"sha256-/XoNsvOAiELKmRdvCXNW/p5vPBINaqnoxKnC3Uw5Q7o="},"flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg":{"logical_path":"flags/4x3/tz.svg","mtime":"2019-05-14T13:11:18+02:00","size":546,"digest":"51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7","integrity":"sha256-Ua19afBZB132G5ImRorw14ZCr0rTSnVA9kxb6oLoA9c="},"flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg":{"logical_path":"flags/1x1/tz.svg","mtime":"2019-05-14T13:11:18+02:00","size":605,"digest":"0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440","integrity":"sha256-BwPymnrgKpoXU8sXJt0pNNde06EujWP6qfqGbh/mFEA="},"flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg":{"logical_path":"flags/4x3/ua.svg","mtime":"2019-05-14T13:11:18+02:00","size":241,"digest":"7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a","integrity":"sha256-f32wPDtJKqrNEbCrrHDVQ6fA7FJlo21Sm7uAp8Qy2Bo="},"flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg":{"logical_path":"flags/1x1/ua.svg","mtime":"2019-05-14T13:11:18+02:00","size":241,"digest":"25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28","integrity":"sha256-JRkvqA8SDtsd0cR1f9e3nvOPXhcpI49BNQA+ahUBvyg="},"flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg":{"logical_path":"flags/4x3/ug.svg","mtime":"2019-05-14T13:11:18+02:00","size":3959,"digest":"7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0","integrity":"sha256-djXfU+r99BG+CAnfg1v7z/1hut1sTfPbCQnIsxiAFaA="},"flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg":{"logical_path":"flags/1x1/ug.svg","mtime":"2019-05-14T13:11:18+02:00","size":4038,"digest":"537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186","integrity":"sha256-U3809k5yP758t5AuoOYTA/Gtp5IUGX78OevixSziQYY="},"flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg":{"logical_path":"flags/4x3/um.svg","mtime":"2019-05-14T13:11:18+02:00","size":4524,"digest":"a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d","integrity":"sha256-oK6A40u/lGd91gUuqHzACQq6dH2rVEDlym4jH38HyW0="},"flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg":{"logical_path":"flags/1x1/um.svg","mtime":"2019-05-14T13:11:18+02:00","size":3975,"digest":"3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a","integrity":"sha256-PxvAm6vn/c8yUYu0nRqsOmbQIE+VXqzKKRxY1PTviVo="},"flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg":{"logical_path":"flags/4x3/us.svg","mtime":"2019-05-14T13:11:18+02:00","size":4468,"digest":"aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329","integrity":"sha256-rv2PflfRH3sEFtAdnGZas4SLEK+EnzWk13LVjSTYMyk="},"flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg":{"logical_path":"flags/1x1/us.svg","mtime":"2019-05-14T13:11:18+02:00","size":3924,"digest":"87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2","integrity":"sha256-h69FvpNG6MggMSl2q+My7hH4kx4p+jYTKNKGYKcRseI="},"flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg":{"logical_path":"flags/4x3/uy.svg","mtime":"2019-05-14T13:11:18+02:00","size":1721,"digest":"9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc","integrity":"sha256-n2NsgoOr9WzJMHRv1CfB0WRNz4c2xTdinfE/dg2pbrw="},"flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg":{"logical_path":"flags/1x1/uy.svg","mtime":"2019-05-14T13:11:18+02:00","size":1718,"digest":"e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e","integrity":"sha256-4ha3Yqk+xVv5tK49Nbf+vgsZKhIkb9ZsRROc53+yCV4="},"flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg":{"logical_path":"flags/4x3/uz.svg","mtime":"2019-05-14T13:11:18+02:00","size":1457,"digest":"697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb","integrity":"sha256-aX1ZZwU3IyO+3cyzYm0c5AWzYkkxXGsAb/FSniSQnOs="},"flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg":{"logical_path":"flags/1x1/uz.svg","mtime":"2019-05-14T13:11:18+02:00","size":1457,"digest":"aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353","integrity":"sha256-qjTL5Pbw5LXYkJdVeNKMybHojr1QPTvcppN0jrKbM1M="},"flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg":{"logical_path":"flags/4x3/va.svg","mtime":"2019-05-14T13:11:18+02:00","size":91241,"digest":"d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0","integrity":"sha256-0k08W+4QjDlpl8PVsr0ic0M3UtjCIutTFlDlFVGkr9A="},"flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg":{"logical_path":"flags/1x1/va.svg","mtime":"2019-05-14T13:11:18+02:00","size":90876,"digest":"01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95","integrity":"sha256-ARYMG//aEvC5RVS6DFAWKojagHlDYXM0vUxXoDCYXpU="},"flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg":{"logical_path":"flags/4x3/vc.svg","mtime":"2019-05-14T13:11:18+02:00","size":454,"digest":"ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb","integrity":"sha256-3fl5vuKIlBTloFrFXzmpyT804K/w018AdgUEmi2LWvs="},"flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg":{"logical_path":"flags/1x1/vc.svg","mtime":"2019-05-14T13:11:18+02:00","size":501,"digest":"ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9","integrity":"sha256-rHduFt7Bn/Li2SOPVB2uXZdygrRRqDqz1BIu/tI5K+k="},"flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg":{"logical_path":"flags/4x3/ve.svg","mtime":"2019-05-14T13:11:18+02:00","size":1171,"digest":"e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b","integrity":"sha256-4jq9AGzHWoxPnsHLEitG+bUuJsVgZTLSyGgnfUzNUjs="},"flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg":{"logical_path":"flags/1x1/ve.svg","mtime":"2019-05-14T13:11:18+02:00","size":1191,"digest":"1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef","integrity":"sha256-FIBxPyhxngqD2ixfEzNAfb+lvMDejJunGPz0cnPule8="},"flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg":{"logical_path":"flags/4x3/vg.svg","mtime":"2019-05-14T13:11:18+02:00","size":24818,"digest":"7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15","integrity":"sha256-f48kpNaZXk3Tnj2QmNrV4UZJgh+hL/wgDt8KWGKF7hU="},"flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg":{"logical_path":"flags/1x1/vg.svg","mtime":"2019-05-14T13:11:18+02:00","size":24997,"digest":"b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8","integrity":"sha256-tGS2p45Gwp355L2twmRiCPEcWRaHBkVgdflwVSok76g="},"flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg":{"logical_path":"flags/4x3/vi.svg","mtime":"2019-05-14T13:11:18+02:00","size":8775,"digest":"58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7","integrity":"sha256-WDETJaKTsEYESXbYmfKIzg++m/1wWiOUeps415kZg9c="},"flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg":{"logical_path":"flags/1x1/vi.svg","mtime":"2019-05-14T13:11:18+02:00","size":8730,"digest":"1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d","integrity":"sha256-HBMtLP9mzb23tqz1BLsM2ddXlZXYDD+mYE/yTKegGE0="},"flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg":{"logical_path":"flags/4x3/vn.svg","mtime":"2019-05-14T13:11:18+02:00","size":492,"digest":"a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a","integrity":"sha256-qRjTyc3DaLHS/5YU1Yy80dQ7cliJsLoY9dTmkwceOJo="},"flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg":{"logical_path":"flags/1x1/vn.svg","mtime":"2019-05-14T13:11:18+02:00","size":501,"digest":"895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791","integrity":"sha256-iV5CiuPZjJnbsCCIz47wQL+wMd9vFsPI/DZ4UF2Gl5E="},"flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg":{"logical_path":"flags/4x3/vu.svg","mtime":"2019-05-14T13:11:18+02:00","size":3771,"digest":"2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c","integrity":"sha256-LChsd4p77QPLYDqyS2jckYaPTwVM9PhRvdF6oWcxVxw="},"flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg":{"logical_path":"flags/1x1/vu.svg","mtime":"2019-05-14T13:11:18+02:00","size":3740,"digest":"51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a","integrity":"sha256-Ue8jEh4mQevurFDTHE5St9ANOrG8n8CtleqG/TYxl1o="},"flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg":{"logical_path":"flags/4x3/wf.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c","integrity":"sha256-9+msXtrBlqwy17r6BLXA2SS4np1+TzU1pqJsbBUjY5w="},"flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg":{"logical_path":"flags/1x1/wf.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee","integrity":"sha256-lakgp5qjLZL4o2IyGq5CMOFwJawE2XZZP0Qj0MN8Gu4="},"flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg":{"logical_path":"flags/4x3/ws.svg","mtime":"2019-05-14T13:11:18+02:00","size":663,"digest":"efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3","integrity":"sha256-78ZQWoAqP6IBi8EC/C4R24xzhGTGGTgbbtwy0KiTQaM="},"flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg":{"logical_path":"flags/1x1/ws.svg","mtime":"2019-05-14T13:11:18+02:00","size":645,"digest":"e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932","integrity":"sha256-46+4HAN8gUYgAnv2GsXiZmg8q3uleW7PELZMEQz8uTI="},"flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg":{"logical_path":"flags/4x3/ye.svg","mtime":"2019-05-14T13:11:18+02:00","size":278,"digest":"fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b","integrity":"sha256-/YiFbnDWawG08PYIk2phzzsdna1AopMvxdpNAfcqRHs="},"flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg":{"logical_path":"flags/1x1/ye.svg","mtime":"2019-05-14T13:11:18+02:00","size":278,"digest":"0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6","integrity":"sha256-DA4yMwhx5tg69Ur/t9rbvnNvl5kGhQghH7rlTbm73MY="},"flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg":{"logical_path":"flags/4x3/yt.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b","integrity":"sha256-Lu8XtUNCQILZ+bQqZ+hMILUuf36ujEMm1gcRFY2lHVs="},"flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg":{"logical_path":"flags/1x1/yt.svg","mtime":"2019-05-14T13:11:18+02:00","size":295,"digest":"911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7","integrity":"sha256-kR2oB1M3/Y917MijOMKUy3cca5oIV2+Wyd4UN4iM0qc="},"flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg":{"logical_path":"flags/4x3/za.svg","mtime":"2019-05-14T13:11:18+02:00","size":856,"digest":"45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371","integrity":"sha256-RZkaKu4wcZhRDla/klIwcKrEJByv5sPduPibIKYdY3E="},"flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg":{"logical_path":"flags/1x1/za.svg","mtime":"2019-05-14T13:11:18+02:00","size":875,"digest":"bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8","integrity":"sha256-vAmomykxHqflgu9gv04Yr/fCneb77+MJRjynZXI6DOg="},"flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg":{"logical_path":"flags/4x3/zm.svg","mtime":"2019-05-14T13:11:18+02:00","size":5508,"digest":"07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2","integrity":"sha256-B8DzDYbmbQytnWbNnJOE2czhhE8VnSRd7/ZxcQH+ScI="},"flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg":{"logical_path":"flags/1x1/zm.svg","mtime":"2019-05-14T13:11:18+02:00","size":5429,"digest":"fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241","integrity":"sha256-/FvOODTHH+NmF+pfV/C9Hc84gKfGqlFdz5KuBn95YkE="},"flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg":{"logical_path":"flags/4x3/zw.svg","mtime":"2019-05-14T13:11:18+02:00","size":6791,"digest":"5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a","integrity":"sha256-UhfHTxTZ/dokS2nFmCu6vuBSrA8cwHBJJuix5iHlD5o="},"flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg":{"logical_path":"flags/1x1/zw.svg","mtime":"2019-05-14T13:11:18+02:00","size":6770,"digest":"a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9","integrity":"sha256-ozsZHGMXCbnh2F4G9bFVNftUTUZoyL74Ze3ioLaojtk="},"flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg":{"logical_path":"flags/4x3/es-ct.svg","mtime":"2019-05-14T13:11:18+02:00","size":261,"digest":"bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d","integrity":"sha256-vLtFSlDJpkfv1D3PBBRF8V6N1wZUveUwv2JAHU+3c40="},"flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg":{"logical_path":"flags/1x1/es-ct.svg","mtime":"2019-05-14T13:11:18+02:00","size":260,"digest":"7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef","integrity":"sha256-fxPrKy9cEdzNcEMoa+11QNTa1LGoNnsKyhuEBaNRsu8="},"flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg":{"logical_path":"flags/4x3/eu.svg","mtime":"2019-05-14T13:11:18+02:00","size":1252,"digest":"5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240","integrity":"sha256-XxKdtkMGNTJRt4+ZjVMdLxAZQEz6iQrmPtcNwxbH8kA="},"flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg":{"logical_path":"flags/1x1/eu.svg","mtime":"2019-05-14T13:11:18+02:00","size":1253,"digest":"ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127","integrity":"sha256-7Fmsja8qY+qOKZrWOiCERdaKlq/+ahCnMorLZ5nUQSc="},"flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg":{"logical_path":"flags/4x3/gb-eng.svg","mtime":"2019-05-14T13:11:18+02:00","size":245,"digest":"1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14","integrity":"sha256-GJX041rimfXYadokYv/PmN9LCNzdxTHI8XXklyAAGhQ="},"flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg":{"logical_path":"flags/1x1/gb-eng.svg","mtime":"2019-05-14T13:11:18+02:00","size":235,"digest":"d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3","integrity":"sha256-0Rr7h/QPNazaQ1qIbqBEvV4LbzY7oMcxnx0BgVUf7PM="},"flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg":{"logical_path":"flags/4x3/gb-nir.svg","mtime":"2019-05-14T13:11:18+02:00","size":23738,"digest":"b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf","integrity":"sha256-soDwnHh/SVwQdDds1nU3tAIW9nKRfn0gS7Erjnxyr68="},"flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg":{"logical_path":"flags/1x1/gb-nir.svg","mtime":"2019-05-14T13:11:18+02:00","size":25263,"digest":"2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41","integrity":"sha256-LlFucuDo4kTvQw5mCDIvjE+ydoB6sDMnmyplcN1o/UE="},"flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg":{"logical_path":"flags/4x3/gb-sct.svg","mtime":"2019-05-14T13:11:18+02:00","size":234,"digest":"1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506","integrity":"sha256-G55AeAKukBz42nQMOC7CsZghg312JxpzNG4MY8IkRQY="},"flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg":{"logical_path":"flags/1x1/gb-sct.svg","mtime":"2019-05-14T13:11:18+02:00","size":242,"digest":"d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3","integrity":"sha256-0B6KBqNA4wzlLoo6unymIHr7lv2yOKgVzGy5Lfj6XfM="},"flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg":{"logical_path":"flags/4x3/gb-wls.svg","mtime":"2019-05-14T13:11:18+02:00","size":9188,"digest":"5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9","integrity":"sha256-UjKz43ahmGbN3sgiXLokJ4OypIBjgRlX8c5aLDR8W8k="},"flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg":{"logical_path":"flags/1x1/gb-wls.svg","mtime":"2019-05-14T13:11:18+02:00","size":9083,"digest":"126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9","integrity":"sha256-EmYVvDWX/aHKTukx7yT2ws8lR5mMBtucHe1p/mbEeek="},"flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg":{"logical_path":"flags/4x3/un.svg","mtime":"2019-05-14T13:11:18+02:00","size":20268,"digest":"31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af","integrity":"sha256-Md7OIq4Yw+AehmSO8+9F8vWz2dKKHiu7zbHYfDevVa8="},"flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg":{"logical_path":"flags/1x1/un.svg","mtime":"2019-05-14T13:11:18+02:00","size":20476,"digest":"455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798","integrity":"sha256-RVtfMXPKmsZPITX6xOrXIX1/vgdVHQ0sxgIW+DII95g="},"leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png":{"logical_path":"leaflet/dist/images/layers.png","mtime":"2019-05-14T13:13:00+02:00","size":696,"digest":"1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6","integrity":"sha256-Hbvp0CjikvNvy6j4s6KNXokydU/CIVuaxp5M3s9RB8Y="},"leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png":{"logical_path":"leaflet/dist/images/layers-2x.png","mtime":"2019-05-14T13:13:00+02:00","size":1259,"digest":"066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf","integrity":"sha256-Bm2sqFDY/77wB68AsG6sABVyje4nnFHzy2xxbffELt8="},"leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png":{"logical_path":"leaflet/dist/images/marker-icon.png","mtime":"2019-05-14T13:13:00+02:00","size":1466,"digest":"574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437","integrity":"sha256-V0w6XMqF9BFAhbaEFZbWLwDXyJLHsD8oy/owHesdxDc="},"markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png":{"logical_path":"markers-soft.png","mtime":"2016-05-21T23:41:15+02:00","size":41226,"digest":"e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739","integrity":"sha256-54eE5O1wqv/d1zwxX6tZAjPMTntyOI191HoUeW/Hxzk="},"markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png":{"logical_path":"markers-shadow.png","mtime":"2016-05-21T23:41:15+02:00","size":535,"digest":"8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20","integrity":"sha256-hwOiJicQ9ePSnmXSrN+Q1lEuFZ4RnSe4I0cx2KYgiiA="},"markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png":{"logical_path":"markers-soft@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":66408,"digest":"c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf","integrity":"sha256-wedyU6i/vjDOwkiF1wRvRDt267ZvTJYfdwg7A/Sly68="},"markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png":{"logical_path":"markers-shadow@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":1469,"digest":"b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a","integrity":"sha256-shpTa+JzE/tQT2n1iZ/wsSRbJ2VxdprAjWwyw1Z25Ho="},"tinymce/langs/fr_FR-6aba16704f73dd83662a78ca3360f3d98b1f1ed80a67560313554446915611a5.js":{"logical_path":"tinymce/langs/fr_FR.js","mtime":"2019-04-17T02:49:18+02:00","size":14986,"digest":"6aba16704f73dd83662a78ca3360f3d98b1f1ed80a67560313554446915611a5","integrity":"sha256-aroWcE9z3YNmKnjKM2Dz2YsfHtgKZ1YDE1VERpFWEaU="},"markers-matte-497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9.png":{"logical_path":"markers-matte.png","mtime":"2016-05-21T23:41:15+02:00","size":14323,"digest":"497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9","integrity":"sha256-SXgmVFqQ4JokBQTRRTDrpFgjsZ/UQXXgnifEfNgi3bk="},"markers-matte@2x-948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823.png":{"logical_path":"markers-matte@2x.png","mtime":"2016-05-21T23:41:15+02:00","size":31113,"digest":"948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823","integrity":"sha256-lI/IxEJvBPYJZO0gOUJH9FsLYOV10COYubaBDnopqCM="},"markers-plain-cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff.png":{"logical_path":"markers-plain.png","mtime":"2016-05-21T23:41:15+02:00","size":7946,"digest":"cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff","integrity":"sha256-zyM0I6pE51rAAx53uLpXHNMzEBBRfhGX5j+3sGhWwf8="},"leaflet/dist/images/marker-icon-2x-00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528.png":{"logical_path":"leaflet/dist/images/marker-icon-2x.png","mtime":"2019-05-14T13:13:00+02:00","size":2464,"digest":"00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528","integrity":"sha256-ABecTB7oMNOhCEEq4NKU9Vd2z+sIXGASmjmqb8SuJSg="},"leaflet/dist/images/marker-shadow-264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da.png":{"logical_path":"leaflet/dist/images/marker-shadow.png","mtime":"2019-05-14T13:13:00+02:00","size":618,"digest":"264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da","integrity":"sha256-Jk9cZAM58ELdcpBiz8BMF/jqDymIK1OOOEjtjxDttNo="},"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410.png":{"logical_path":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png","mtime":"2019-05-14T13:12:47+02:00","size":86,"digest":"ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410","integrity":"sha256-rmWnriLEwjEVlI/etcBckTfb0Tyi1CazxMPEGDRR5BA="},"jquery-ui/ui-icons_444444_256x240-31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d.png":{"logical_path":"jquery-ui/ui-icons_444444_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d","integrity":"sha256-MdmIdltOb1ZVPClYjFADgdw+bwqimAyCEiAuVkSu/V0="},"jquery-ui/ui-icons_555555_256x240-32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5.png":{"logical_path":"jquery-ui/ui-icons_555555_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5","integrity":"sha256-MhdSYdrudsgrsO3w7qFqVkIYZvvDHpTzwdVwqhFFAvU="},"jquery-ui/ui-icons_777620_256x240-0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b.png":{"logical_path":"jquery-ui/ui-icons_777620_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b","integrity":"sha256-CwIPxuaW2I0pbnux9h8esq2CeEjixzgqTD4JmecC3Zs="},"jquery-ui/ui-icons_777777_256x240-faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f.png":{"logical_path":"jquery-ui/ui-icons_777777_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f","integrity":"sha256-+vMgB64SDDAiE1V2JuZg3RDnEcXdTxET018m3AW3jS8="},"jquery-ui/ui-icons_cc0000_256x240-40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69.png":{"logical_path":"jquery-ui/ui-icons_cc0000_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69","integrity":"sha256-QJhaZLTV3SE/uif82GKhvRszepdnT2/wuewgq87kvGk="},"jquery-ui/ui-icons_ffffff_256x240-350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a.png":{"logical_path":"jquery-ui/ui-icons_ffffff_256x240.png","mtime":"2019-05-14T13:12:47+02:00","size":3756,"digest":"350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a","integrity":"sha256-NQ3xtxMQN94g6DxcDzpBp3DSrEi1di6ncrP0qKe51Ho="},"tinymce/preinit-84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89.js":{"logical_path":"tinymce/preinit.js","mtime":"2019-05-14T13:13:17+02:00","size":82,"digest":"84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89","integrity":"sha256-hDKKU+eY3xL4ketJhxdz/Z+SVDnIYw6eIkI6gu+eb4k="},"tinymce/rails-bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca.js":{"logical_path":"tinymce/rails.js","mtime":"2019-05-14T13:13:17+02:00","size":1345,"digest":"bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca","integrity":"sha256-v3/VyVLyVIEBB1jd5qJoFJgHT5UJIw9gGzFzVqalT8o="},"tinymce/tinymce-56cf2f2424cb80d80288b9207d6d01dffdcf3b6849e1414c1f7df44b8c95db86.js":{"logical_path":"tinymce/tinymce.js","mtime":"2019-05-14T13:13:17+02:00","size":1042418,"digest":"56cf2f2424cb80d80288b9207d6d01dffdcf3b6849e1414c1f7df44b8c95db86","integrity":"sha256-Vs8vJCTLgNgCiLkgfW0B3/3PO2hJ4UFMH330S4yV24Y="},"tinymce/jquery.tinymce-05402ca7d9e16d0a48a6259f8c005507d800186c5187f8cab94e79803c657535.js":{"logical_path":"tinymce/jquery.tinymce.js","mtime":"2019-05-14T13:13:17+02:00","size":6689,"digest":"05402ca7d9e16d0a48a6259f8c005507d800186c5187f8cab94e79803c657535","integrity":"sha256-BUAsp9nhbQpIpiWfjABVB9gAGGxRh/jKuU55gDxldTU="},"tinymce/langs/readme-5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de.md":{"logical_path":"tinymce/langs/readme.md","mtime":"2019-05-14T13:13:17+02:00","size":151,"digest":"5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de","integrity":"sha256-WotqBNV7XIjj+38qhwuOLTpI7APOZHQgbEHfeMFVst4="},"tinymce/license-47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66.txt":{"logical_path":"tinymce/license.txt","mtime":"2019-05-14T13:13:17+02:00","size":26441,"digest":"47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66","integrity":"sha256-R6nc0ldIkaWkZREv2d/OvMfmGETt7Cf6k2pkZCAI/mY="},"tinymce/plugins/advlist/plugin-b7c8cf80403d2ccef198eece952f4426ca2dbc41bd3797796a75f984a9382ade.js":{"logical_path":"tinymce/plugins/advlist/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":4121,"digest":"b7c8cf80403d2ccef198eece952f4426ca2dbc41bd3797796a75f984a9382ade","integrity":"sha256-t8jPgEA9LM7xmO7OlS9EJsotvEG9N5d5anX5hKk4Kt4="},"tinymce/plugins/anchor/plugin-0e1e67988d427784f73513db28a206eb47a3ef546aa87882a80975a16111a33a.js":{"logical_path":"tinymce/plugins/anchor/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2108,"digest":"0e1e67988d427784f73513db28a206eb47a3ef546aa87882a80975a16111a33a","integrity":"sha256-Dh5nmI1Cd4T3NRPbKKIG60ej71RqqHiCqAl1oWERozo="},"tinymce/plugins/autolink/plugin-2e8a38a913070f4b3fb0252a5b5625057b8ee9f6fc529d65d3003328d112d5d8.js":{"logical_path":"tinymce/plugins/autolink/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2428,"digest":"2e8a38a913070f4b3fb0252a5b5625057b8ee9f6fc529d65d3003328d112d5d8","integrity":"sha256-Loo4qRMHD0s/sCUqW1YlBXuO6fb8Up1l0wAzKNES1dg="},"tinymce/plugins/autoresize/plugin-2adac0d857ae16f93c7ca4f92e36e76f4bbf885cb9a72755af78889627ed8738.js":{"logical_path":"tinymce/plugins/autoresize/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2233,"digest":"2adac0d857ae16f93c7ca4f92e36e76f4bbf885cb9a72755af78889627ed8738","integrity":"sha256-KtrA2FeuFvk8fKT5Ljbnb0u/iFy5pydVr3iIlifthzg="},"tinymce/plugins/autosave/plugin-a6960dd7eb9a053b0ce876b2eb946f8bf8fc429de45466e73d17129213229674.js":{"logical_path":"tinymce/plugins/autosave/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":3321,"digest":"a6960dd7eb9a053b0ce876b2eb946f8bf8fc429de45466e73d17129213229674","integrity":"sha256-ppYN1+uaBTsM6Hay65Rvi/j8Qp3kVGbnPRcSkhMilnQ="},"tinymce/plugins/bbcode/plugin-1a9fd62a2514ce8e15e8a3a99473674c1042c23adb359b35523931407910c7aa.js":{"logical_path":"tinymce/plugins/bbcode/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":3151,"digest":"1a9fd62a2514ce8e15e8a3a99473674c1042c23adb359b35523931407910c7aa","integrity":"sha256-Gp/WKiUUzo4V6KOplHNnTBBCwjrbNZs1UjkxQHkQx6o="},"tinymce/plugins/charmap/plugin-e68609a6c6f050af409dc34cba1eaf97b45dc4219500de60bb3ed63ea49279a0.js":{"logical_path":"tinymce/plugins/charmap/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":11935,"digest":"e68609a6c6f050af409dc34cba1eaf97b45dc4219500de60bb3ed63ea49279a0","integrity":"sha256-5oYJpsbwUK9AncNMuh6vl7RdxCGVAN5guz7WPqSSeaA="},"tinymce/plugins/code/plugin-32c177297fd26a1ceaa79d4b0c10ff5c3b332141dce46b97931e3228daa9bf1a.js":{"logical_path":"tinymce/plugins/code/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1225,"digest":"32c177297fd26a1ceaa79d4b0c10ff5c3b332141dce46b97931e3228daa9bf1a","integrity":"sha256-MsF3KX/Sahzqp51LDBD/XDszIUHc5GuXkx4yKNqpvxo="},"tinymce/plugins/codesample/plugin-d495c33177247da2e3845e4d849182792be7b0347e8707dd133db053727f86e9.js":{"logical_path":"tinymce/plugins/codesample/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":21054,"digest":"d495c33177247da2e3845e4d849182792be7b0347e8707dd133db053727f86e9","integrity":"sha256-1JXDMXckfaLjhF5NhJGCeSvnsDR+hwfdEz2wU3J/huk="},"tinymce/plugins/colorpicker/plugin-3270f40522357ea68191288332b98cbbdafe950a758b5f1514ad8890ba68619f.js":{"logical_path":"tinymce/plugins/colorpicker/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":541,"digest":"3270f40522357ea68191288332b98cbbdafe950a758b5f1514ad8890ba68619f","integrity":"sha256-MnD0BSI1fqaBkSiDMrmMu9r+lQp1i18VFK2IkLpoYZ8="},"tinymce/plugins/contextmenu/plugin-b528042e89738439d9d4b9d008a3a75284ef5233cd15aaa29c7e1ce6d48fb12e.js":{"logical_path":"tinymce/plugins/contextmenu/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":541,"digest":"b528042e89738439d9d4b9d008a3a75284ef5233cd15aaa29c7e1ce6d48fb12e","integrity":"sha256-tSgELolzhDnZ1LnQCKOnUoTvUjPNFaqinH4c5tSPsS4="},"tinymce/plugins/directionality/plugin-5004dc6b7d90139d4b1cf32d788845a48efc7055adb3aa25993219dd4df2fe5c.js":{"logical_path":"tinymce/plugins/directionality/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":4316,"digest":"5004dc6b7d90139d4b1cf32d788845a48efc7055adb3aa25993219dd4df2fe5c","integrity":"sha256-UATca32QE51LHPMteIhFpI78cFWts6olmTIZ3U3y/lw="},"tinymce/plugins/emoticons/js/emojis-c6f728975b5c86aca22f396025edefe6107b0dd4d95f5ef80daef569b545bce8.js":{"logical_path":"tinymce/plugins/emoticons/js/emojis.js","mtime":"2019-05-14T13:13:17+02:00","size":193207,"digest":"c6f728975b5c86aca22f396025edefe6107b0dd4d95f5ef80daef569b545bce8","integrity":"sha256-xvcol1tchqyiLzlgJe3v5hB7DdTZX174Da71abVFvOg="},"tinymce/plugins/emoticons/plugin-f4db839825ea5c884c78a8c289494544ac0fd28a14506f0d3cbb7362a9e9db77.js":{"logical_path":"tinymce/plugins/emoticons/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":8141,"digest":"f4db839825ea5c884c78a8c289494544ac0fd28a14506f0d3cbb7362a9e9db77","integrity":"sha256-9NuDmCXqXIhMeKjCiUlFRKwP0ooUUG8NPLtzYqnp23c="},"tinymce/plugins/fullpage/plugin-7040866d45dd50402f2871efcfb289ec8ca80b8699f1461c721b0b20bca76051.js":{"logical_path":"tinymce/plugins/fullpage/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":8195,"digest":"7040866d45dd50402f2871efcfb289ec8ca80b8699f1461c721b0b20bca76051","integrity":"sha256-cECGbUXdUEAvKHHvz7KJ7IyoC4aZ8UYcchsLILynYFE="},"tinymce/plugins/fullscreen/plugin-f548bdf0cbc2fd41c3c32938629a1b021e19680bac7869c274be5f3615eccfe7.js":{"logical_path":"tinymce/plugins/fullscreen/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2668,"digest":"f548bdf0cbc2fd41c3c32938629a1b021e19680bac7869c274be5f3615eccfe7","integrity":"sha256-9Ui98MvC/UHDwyk4YpobAh4ZaAuseGnCdL5fNhXsz+c="},"tinymce/plugins/help/plugin-366b05965f3d6cfddaba02c6784e0f377497beda0f28cc8cd840510fd8b657f4.js":{"logical_path":"tinymce/plugins/help/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":9311,"digest":"366b05965f3d6cfddaba02c6784e0f377497beda0f28cc8cd840510fd8b657f4","integrity":"sha256-NmsFll89bP3augLGeE4PN3SXvtoPKMyM2EBRD9i2V/Q="},"tinymce/plugins/hr/plugin-0e5548067a2ab0ad967e296104249f6b5d24a16b80befcdd3888c17b1a0e5624.js":{"logical_path":"tinymce/plugins/hr/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":840,"digest":"0e5548067a2ab0ad967e296104249f6b5d24a16b80befcdd3888c17b1a0e5624","integrity":"sha256-DlVIBnoqsK2WfilhBCSfa10koWuAvvzdOIjBexoOViQ="},"tinymce/plugins/image/plugin-53dce3c317e386c1989a5d82ec151d440f9ffc32a643dc9fba76ae2b036300c9.js":{"logical_path":"tinymce/plugins/image/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":28452,"digest":"53dce3c317e386c1989a5d82ec151d440f9ffc32a643dc9fba76ae2b036300c9","integrity":"sha256-U9zjwxfjhsGYml2C7BUdRA+f/DKmQ9yfunauKwNjAMk="},"tinymce/plugins/imagetools/plugin-49936c4208b2d6fbb340d11c56fa2a146d14c770e4cb39760a11099fea5c7aaa.js":{"logical_path":"tinymce/plugins/imagetools/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":22508,"digest":"49936c4208b2d6fbb340d11c56fa2a146d14c770e4cb39760a11099fea5c7aaa","integrity":"sha256-SZNsQgiy1vuzQNEcVvoqFG0Ux3Dkyzl2ChEJn+pceqo="},"tinymce/plugins/importcss/plugin-30cba659cc747bccf69602963b3c2b83e00c26e65f2b63e23eba5be5f8af5452.js":{"logical_path":"tinymce/plugins/importcss/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":4870,"digest":"30cba659cc747bccf69602963b3c2b83e00c26e65f2b63e23eba5be5f8af5452","integrity":"sha256-MMumWcx0e8z2lgKWOzwrg+AMJuZfK2PiPrpb5fivVFI="},"tinymce/plugins/insertdatetime/plugin-8559e2bda84f040abc77afc6610c0b61567fe174dcf2079b5aff82513c5ebe96.js":{"logical_path":"tinymce/plugins/insertdatetime/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":3205,"digest":"8559e2bda84f040abc77afc6610c0b61567fe174dcf2079b5aff82513c5ebe96","integrity":"sha256-hVnivahPBAq8d6/GYQwLYVZ/4XTc8gebWv+CUTxevpY="},"tinymce/plugins/legacyoutput/plugin-acfac6647afd7c0a7c720aea06b9a74a6580840858fe00327a311a6418d3dae3.js":{"logical_path":"tinymce/plugins/legacyoutput/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":2795,"digest":"acfac6647afd7c0a7c720aea06b9a74a6580840858fe00327a311a6418d3dae3","integrity":"sha256-rPrGZHr9fAp8cgrqBrmnSmWAhAhY/gAyejEaZBjT2uM="},"tinymce/plugins/link/plugin-93a36e0f077d895707d9885a76c26e5b08e5acfab9f3d52cdd1ccc5d89404f1e.js":{"logical_path":"tinymce/plugins/link/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":16484,"digest":"93a36e0f077d895707d9885a76c26e5b08e5acfab9f3d52cdd1ccc5d89404f1e","integrity":"sha256-k6NuDwd9iVcH2YhadsJuWwjlrPq589Us3RzMXYlATx4="},"tinymce/plugins/lists/plugin-354eba74c0107c7f347aaab0ac206e01b8e0503d00f28cc0cc55f6c04f901f9e.js":{"logical_path":"tinymce/plugins/lists/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":27854,"digest":"354eba74c0107c7f347aaab0ac206e01b8e0503d00f28cc0cc55f6c04f901f9e","integrity":"sha256-NU66dMAQfH80eqqwrCBuAbjgUD0A8ozAzFX2wE+QH54="},"tinymce/plugins/media/plugin-ab1015dd22dff3d1edcc2d04b54f39b3f7ff7f7d783c0880b5edf6de58d78937.js":{"logical_path":"tinymce/plugins/media/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":17440,"digest":"ab1015dd22dff3d1edcc2d04b54f39b3f7ff7f7d783c0880b5edf6de58d78937","integrity":"sha256-qxAV3SLf89HtzC0EtU85s/f/f314PAiAte323ljXiTc="},"tinymce/plugins/nonbreaking/plugin-6039d3b3f9c68a3b29a6bb476760fa62da1d941e38ef8cb91e61c4aaa9456f98.js":{"logical_path":"tinymce/plugins/nonbreaking/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1421,"digest":"6039d3b3f9c68a3b29a6bb476760fa62da1d941e38ef8cb91e61c4aaa9456f98","integrity":"sha256-YDnTs/nGijspprtHZ2D6YtodlB4474y5HmHEqqlFb5g="},"tinymce/plugins/noneditable/plugin-3cb8e1ac660348b0453dca0e8549a9325dca0cf259adb96802f37e83fb8d17be.js":{"logical_path":"tinymce/plugins/noneditable/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1841,"digest":"3cb8e1ac660348b0453dca0e8549a9325dca0cf259adb96802f37e83fb8d17be","integrity":"sha256-PLjhrGYDSLBFPcoOhUmpMl3KDPJZrbloAvN+g/uNF74="},"tinymce/plugins/pagebreak/plugin-9e005e9e9abb08da742141d002238561c30dcd15549168e17c690f2c7c7a9dd3.js":{"logical_path":"tinymce/plugins/pagebreak/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1843,"digest":"9e005e9e9abb08da742141d002238561c30dcd15549168e17c690f2c7c7a9dd3","integrity":"sha256-ngBenpq7CNp0IUHQAiOFYcMNzRVUkWjhfGkPLHx6ndM="},"tinymce/plugins/paste/plugin-437f540601d04f07cb4c2434fdf377be3ac9634b180a878c2f2987f3ad897afc.js":{"logical_path":"tinymce/plugins/paste/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":24156,"digest":"437f540601d04f07cb4c2434fdf377be3ac9634b180a878c2f2987f3ad897afc","integrity":"sha256-Q39UBgHQTwfLTCQ0/fN3vjrJY0sYCoeMLymH862Jevw="},"tinymce/plugins/preview/plugin-36ce30c549b23aed9dd151603a23aafab512529d586067e34974877992c79eed.js":{"logical_path":"tinymce/plugins/preview/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1971,"digest":"36ce30c549b23aed9dd151603a23aafab512529d586067e34974877992c79eed","integrity":"sha256-Ns4wxUmyOu2d0VFgOiOq+rUSUp1YYGfjSXSHeZLHnu0="},"tinymce/plugins/print/plugin-4a91981252ff653a07dd12936abfb0b0c4191e33d85f5c5d5f7e8e73581b6a57.js":{"logical_path":"tinymce/plugins/print/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":787,"digest":"4a91981252ff653a07dd12936abfb0b0c4191e33d85f5c5d5f7e8e73581b6a57","integrity":"sha256-SpGYElL/ZToH3RKTar+wsMQZHjPYX1xdX36Oc1gbalc="},"tinymce/plugins/quickbars/plugin-54bba909c7a5b3f9086cec22e918e378945dfb855e4041a85c9e0fb00faaa510.js":{"logical_path":"tinymce/plugins/quickbars/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":10934,"digest":"54bba909c7a5b3f9086cec22e918e378945dfb855e4041a85c9e0fb00faaa510","integrity":"sha256-VLupCcels/kIbOwi6RjjeJRd+4VeQEGoXJ4PsA+qpRA="},"tinymce/plugins/save/plugin-0fd05e2ed11aac190c5d2a0ac32aa675d0bea06b519301d89151aaaa7b124674.js":{"logical_path":"tinymce/plugins/save/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1829,"digest":"0fd05e2ed11aac190c5d2a0ac32aa675d0bea06b519301d89151aaaa7b124674","integrity":"sha256-D9BeLtEarBkMXSoKwyqmddC+oGtRkwHYkVGqqnsSRnQ="},"tinymce/plugins/searchreplace/plugin-4bb6490f6586b4c50a56757a69be8e6577544d5353881a02621e2200b54e8a18.js":{"logical_path":"tinymce/plugins/searchreplace/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":8871,"digest":"4bb6490f6586b4c50a56757a69be8e6577544d5353881a02621e2200b54e8a18","integrity":"sha256-S7ZJD2WGtMUKVnV6ab6OZXdUTVNTiBoCYh4iALVOihg="},"tinymce/plugins/spellchecker/plugin-8fcd863cbf64e3cc62fe3fc1a4bfe417f8401b1d204d91d1c9da880c29a52162.js":{"logical_path":"tinymce/plugins/spellchecker/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":10437,"digest":"8fcd863cbf64e3cc62fe3fc1a4bfe417f8401b1d204d91d1c9da880c29a52162","integrity":"sha256-j82GPL9k48xi/j/BpL/kF/hAGx0gTZHRydqIDCmlIWI="},"tinymce/plugins/tabfocus/plugin-cbc31c55658d581cc1e0130e5bae26fb27f10e7f0c53879845d6295ffb27fefa.js":{"logical_path":"tinymce/plugins/tabfocus/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1915,"digest":"cbc31c55658d581cc1e0130e5bae26fb27f10e7f0c53879845d6295ffb27fefa","integrity":"sha256-y8McVWWNWBzB4BMOW64m+yfxDn8MU4eYRdYpX/sn/vo="},"tinymce/plugins/table/plugin-b11c6cd37f6d5badf46a9d96e452118b81881beb07fe41d2c0a3f7b405902234.js":{"logical_path":"tinymce/plugins/table/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":120791,"digest":"b11c6cd37f6d5badf46a9d96e452118b81881beb07fe41d2c0a3f7b405902234","integrity":"sha256-sRxs039tW630ap2W5FIRi4GIG+sH/kHSwKP3tAWQIjQ="},"tinymce/plugins/template/plugin-62d74415b497183892c093351d57ee4fe36938be5b0a84360925501efede022a.js":{"logical_path":"tinymce/plugins/template/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":7975,"digest":"62d74415b497183892c093351d57ee4fe36938be5b0a84360925501efede022a","integrity":"sha256-YtdEFbSXGDiSwJM1HVfuT+NpOL5bCoQ2CSVQHv7eAio="},"tinymce/plugins/textcolor/plugin-77c1248e72fe32cf181c36a070147484ee4560710d5f617a4670d65d11202207.js":{"logical_path":"tinymce/plugins/textcolor/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":537,"digest":"77c1248e72fe32cf181c36a070147484ee4560710d5f617a4670d65d11202207","integrity":"sha256-d8EkjnL+Ms8YHDagcBR0hO5FYHENX2F6RnDWXREgIgc="},"tinymce/plugins/textpattern/plugin-14c80d034b4d08368543a88cfdd7a71fe044d76a511e087752420957fe192e66.js":{"logical_path":"tinymce/plugins/textpattern/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":16350,"digest":"14c80d034b4d08368543a88cfdd7a71fe044d76a511e087752420957fe192e66","integrity":"sha256-FMgNA0tNCDaFQ6iM/denH+BE12pRHgh3UkIJV/4ZLmY="},"tinymce/plugins/toc/plugin-e6c05b09e6066ce22300ca4942a530d621362f8a2d69d21d486bf5f57ce86c63.js":{"logical_path":"tinymce/plugins/toc/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":3522,"digest":"e6c05b09e6066ce22300ca4942a530d621362f8a2d69d21d486bf5f57ce86c63","integrity":"sha256-5sBbCeYGbOIjAMpJQqUw1iE2L4otadIdSGv19XzobGM="},"tinymce/plugins/visualblocks/plugin-dc48dde1907640cf2cc67ab99de28b69b7b7a04479c9a2d3284a21e190a2fc5b.js":{"logical_path":"tinymce/plugins/visualblocks/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":1655,"digest":"dc48dde1907640cf2cc67ab99de28b69b7b7a04479c9a2d3284a21e190a2fc5b","integrity":"sha256-3Ejd4ZB2QM8sxnq5neKLabe3oER5yaLTKEoh4ZCi/Fs="},"tinymce/plugins/visualchars/plugin-7a67008641a389395f71289303344cf2f9e699970d8ac27f8be769281c56a157.js":{"logical_path":"tinymce/plugins/visualchars/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":5729,"digest":"7a67008641a389395f71289303344cf2f9e699970d8ac27f8be769281c56a157","integrity":"sha256-emcAhkGjiTlfcSiTAzRM8vnmmZcNisJ/i+dpKBxWoVc="},"tinymce/plugins/wordcount/plugin-adeca7c01633cf92382c63b9f99934fcc1f8f4034b84b8a653f800bc6deadf86.js":{"logical_path":"tinymce/plugins/wordcount/plugin.js","mtime":"2019-05-14T13:13:17+02:00","size":12489,"digest":"adeca7c01633cf92382c63b9f99934fcc1f8f4034b84b8a653f800bc6deadf86","integrity":"sha256-reynwBYzz5I4LGO5+Zk0/MH49ANLhLimU/gAvG3q34Y="},"tinymce/skins/content/default/content-59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178.css":{"logical_path":"tinymce/skins/content/default/content.css","mtime":"2019-05-14T13:13:17+02:00","size":569,"digest":"59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178","integrity":"sha256-Wa+OK9y4QwgkM+NaE+dEUrtxZ1tNCaECD7guwS+QUXg="},"tinymce/skins/content/default/content.min-59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178.css":{"logical_path":"tinymce/skins/content/default/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":569,"digest":"59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178","integrity":"sha256-Wa+OK9y4QwgkM+NaE+dEUrtxZ1tNCaECD7guwS+QUXg="},"tinymce/skins/content/document/content-1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943.css":{"logical_path":"tinymce/skins/content/document/content.css","mtime":"2019-05-14T13:13:17+02:00","size":653,"digest":"1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943","integrity":"sha256-HibMzvAFJSKv+4G/IUgxAjaxnN34Ey8COdjHVmci6UM="},"tinymce/skins/content/document/content.min-1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943.css":{"logical_path":"tinymce/skins/content/document/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":653,"digest":"1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943","integrity":"sha256-HibMzvAFJSKv+4G/IUgxAjaxnN34Ey8COdjHVmci6UM="},"tinymce/skins/content/writer/content-eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656.css":{"logical_path":"tinymce/skins/content/writer/content.css","mtime":"2019-05-14T13:13:17+02:00","size":590,"digest":"eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656","integrity":"sha256-7qXBU+4qEO0IZNhPod/7lept735XmXjNLdPY8JVsllY="},"tinymce/skins/content/writer/content.min-eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656.css":{"logical_path":"tinymce/skins/content/writer/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":590,"digest":"eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656","integrity":"sha256-7qXBU+4qEO0IZNhPod/7lept735XmXjNLdPY8JVsllY="},"tinymce/skins/ui/oxide/content-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css":{"logical_path":"tinymce/skins/ui/oxide/content.css","mtime":"2019-05-14T13:13:17+02:00","size":16213,"digest":"158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1","integrity":"sha256-FYp9nMLCIqQo9HqXBOyMuR2NiwpbGHJSV+a+jt6aBvE="},"tinymce/skins/ui/oxide/content.inline-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css":{"logical_path":"tinymce/skins/ui/oxide/content.inline.css","mtime":"2019-05-14T13:13:17+02:00","size":16417,"digest":"a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2","integrity":"sha256-oxmkuMLbJ7FXbiLZDtknrM7oh8ElQD+dQs5IFVxGcvI="},"tinymce/skins/ui/oxide/content.inline.min-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css":{"logical_path":"tinymce/skins/ui/oxide/content.inline.min.css","mtime":"2019-05-14T13:13:17+02:00","size":16417,"digest":"a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2","integrity":"sha256-oxmkuMLbJ7FXbiLZDtknrM7oh8ElQD+dQs5IFVxGcvI="},"tinymce/skins/ui/oxide/content.min-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css":{"logical_path":"tinymce/skins/ui/oxide/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":16213,"digest":"158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1","integrity":"sha256-FYp9nMLCIqQo9HqXBOyMuR2NiwpbGHJSV+a+jt6aBvE="},"tinymce/skins/ui/oxide/content.mobile-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css":{"logical_path":"tinymce/skins/ui/oxide/content.mobile.css","mtime":"2019-05-14T13:13:17+02:00","size":235,"digest":"230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346","integrity":"sha256-Iwwx9lNWx8sXmSRKNPenIskqbWFOBuWdSNsOvM1/I0Y="},"tinymce/skins/ui/oxide/content.mobile.min-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css":{"logical_path":"tinymce/skins/ui/oxide/content.mobile.min.css","mtime":"2019-05-14T13:13:17+02:00","size":235,"digest":"230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346","integrity":"sha256-Iwwx9lNWx8sXmSRKNPenIskqbWFOBuWdSNsOvM1/I0Y="},"tinymce/skins/ui/oxide/fonts/tinymce-mobile-e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213.woff":{"logical_path":"tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff","mtime":"2019-05-14T13:13:17+02:00","size":4624,"digest":"e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213","integrity":"sha256-5kvxVqQy1j9bNLRWe1E9wNNRtJFhx/YI+4JXS/3Z0hM="},"tinymce/skins/ui/oxide/skin-19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48.css":{"logical_path":"tinymce/skins/ui/oxide/skin.css","mtime":"2019-05-14T13:13:17+02:00","size":43226,"digest":"19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48","integrity":"sha256-GfXVi/AF0v96bWC7Pd+hdypVqOVW9yOjshNAvPEAP0g="},"tinymce/skins/ui/oxide/skin.min-19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48.css":{"logical_path":"tinymce/skins/ui/oxide/skin.min.css","mtime":"2019-05-14T13:13:17+02:00","size":43226,"digest":"19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48","integrity":"sha256-GfXVi/AF0v96bWC7Pd+hdypVqOVW9yOjshNAvPEAP0g="},"tinymce/skins/ui/oxide/skin.mobile-22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22.css":{"logical_path":"tinymce/skins/ui/oxide/skin.mobile.css","mtime":"2019-05-14T13:13:17+02:00","size":28233,"digest":"22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22","integrity":"sha256-InA8tCO+QysSWhn6lKKagSK3Ir5PfBswMQLOFu2DniI="},"tinymce/skins/ui/oxide/skin.mobile.min-22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22.css":{"logical_path":"tinymce/skins/ui/oxide/skin.mobile.min.css","mtime":"2019-05-14T13:13:17+02:00","size":28233,"digest":"22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22","integrity":"sha256-InA8tCO+QysSWhn6lKKagSK3Ir5PfBswMQLOFu2DniI="},"tinymce/skins/ui/oxide-dark/content-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.css","mtime":"2019-05-14T13:13:17+02:00","size":16213,"digest":"158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1","integrity":"sha256-FYp9nMLCIqQo9HqXBOyMuR2NiwpbGHJSV+a+jt6aBvE="},"tinymce/skins/ui/oxide-dark/content.inline-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.inline.css","mtime":"2019-05-14T13:13:17+02:00","size":16417,"digest":"a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2","integrity":"sha256-oxmkuMLbJ7FXbiLZDtknrM7oh8ElQD+dQs5IFVxGcvI="},"tinymce/skins/ui/oxide-dark/content.inline.min-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.inline.min.css","mtime":"2019-05-14T13:13:17+02:00","size":16417,"digest":"a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2","integrity":"sha256-oxmkuMLbJ7FXbiLZDtknrM7oh8ElQD+dQs5IFVxGcvI="},"tinymce/skins/ui/oxide-dark/content.min-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css":{"logical_path":"tinymce/skins/ui/oxide-dark/content.min.css","mtime":"2019-05-14T13:13:17+02:00","size":16213,"digest":"158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1","integrity":"sha256-FYp9nMLCIqQo9HqXBOyMuR2NiwpbGHJSV+a+jt6aBvE="},"tinymce/skins/ui/oxide-dark/skin-5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.css","mtime":"2019-05-14T13:13:17+02:00","size":43207,"digest":"5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768","integrity":"sha256-XUQfjmzMFtouEJY6Ry/n5LWTs21HCpE6v/LBWSo3x2g="},"tinymce/skins/ui/oxide-dark/skin.min-5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768.css":{"logical_path":"tinymce/skins/ui/oxide-dark/skin.min.css","mtime":"2019-05-14T13:13:17+02:00","size":43207,"digest":"5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768","integrity":"sha256-XUQfjmzMFtouEJY6Ry/n5LWTs21HCpE6v/LBWSo3x2g="},"tinymce/themes/mobile/theme-3ebedb886fbcc21c3b79f250f398c0ff4a2d870dd7a737322aceef1f2479ccd2.js":{"logical_path":"tinymce/themes/mobile/theme.js","mtime":"2019-05-14T13:13:17+02:00","size":172439,"digest":"3ebedb886fbcc21c3b79f250f398c0ff4a2d870dd7a737322aceef1f2479ccd2","integrity":"sha256-Pr7biG+8whw7efJQ85jA/0othw3XpzcyKs7vHyR5zNI="},"tinymce/themes/silver/theme-02294426af3edeff56daa3e5fd3ef013944295525b150b8114eaca9de6201af7.js":{"logical_path":"tinymce/themes/silver/theme.js","mtime":"2019-05-14T13:13:17+02:00","size":357473,"digest":"02294426af3edeff56daa3e5fd3ef013944295525b150b8114eaca9de6201af7","integrity":"sha256-AilEJq8+3v9W2qPl/T7wE5RClVJbFQuBFOrKneYgGvc="},"application-e97f1694bd74fef5df4337d8faa6cde48d33f29e71594d3e3b40deef8fd34383.js":{"logical_path":"application.js","mtime":"2019-05-14T15:14:02+02:00","size":1965665,"digest":"e97f1694bd74fef5df4337d8faa6cde48d33f29e71594d3e3b40deef8fd34383","integrity":"sha256-6X8WlL10/vXfQzfY+qbN5I0z8p5xWU0+O0De74/TQ4M="},"application-665c7bdc2a85d2beeb41b3c165fec5272f5d00671d445bef7cd32341457f4051.js":{"logical_path":"application.js","mtime":"2019-05-14T22:58:40+02:00","size":1965802,"digest":"665c7bdc2a85d2beeb41b3c165fec5272f5d00671d445bef7cd32341457f4051","integrity":"sha256-Zlx73CqF0r7rQbPBZf7FJy9dAGcdRFvvfNMjQUV/QFE="},"application-3d5e23cf328582872a3d1bc4cbba74e4eff77c54728da6aee7f8473b5a2824dc.css":{"logical_path":"application.css","mtime":"2019-05-14T22:58:40+02:00","size":170796,"digest":"3d5e23cf328582872a3d1bc4cbba74e4eff77c54728da6aee7f8473b5a2824dc","integrity":"sha256-PV4jzzKFgocqPRvEy7p05O/3fFRyjaau5/hHO1ooJNw="},"active_admin-7af08a6e48da4e83664b81e446c23823296e4341041da5d930b7e0bc0c2b7be9.css":{"logical_path":"active_admin.css","mtime":"2019-05-21T21:41:04+02:00","size":105662,"digest":"7af08a6e48da4e83664b81e446c23823296e4341041da5d930b7e0bc0c2b7be9","integrity":"sha256-evCKbkjaToNmS4HkRsI4IyluQ0EEHaXZMLfgvAwre+k="},"application-870592844092d1ae784a86ed11f00302cb2aab752e76420235634a592b07cd40.js":{"logical_path":"application.js","mtime":"2019-05-21T22:19:54+02:00","size":1965802,"digest":"870592844092d1ae784a86ed11f00302cb2aab752e76420235634a592b07cd40","integrity":"sha256-hwWShECS0a54SobtEfADAssqq3UudkICNWNKWSsHzUA="},"application-7759ab5fd18acdafc46a921094dd497a51f5ed55c3d5fe10db48d1ff157f5460.css":{"logical_path":"application.css","mtime":"2019-05-21T22:19:54+02:00","size":170700,"digest":"7759ab5fd18acdafc46a921094dd497a51f5ed55c3d5fe10db48d1ff157f5460","integrity":"sha256-d1mrX9GKza/EapIQlN1JelH17VXD1f4Q20jR/xV/VGA="},"application-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js":{"logical_path":"application.js","mtime":"2019-05-21T23:08:22+02:00","size":1965802,"digest":"624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045","integrity":"sha256-YkrpR8iEg4gQDob+xKxRLo6UA/cdc3m84kzwnR0w0EU="},"application-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css":{"logical_path":"application.css","mtime":"2019-05-21T23:08:22+02:00","size":170847,"digest":"d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da","integrity":"sha256-0+uo1KgkFkEC4ykZggoIRwDaB56gVFPNRNOibWiZ59o="}},"assets":{"active_admin.css":"active_admin-7af08a6e48da4e83664b81e446c23823296e4341041da5d930b7e0bc0c2b7be9.css","active_admin/nested_menu_arrow.gif":"active_admin/nested_menu_arrow-15084d93c65c1964d7077700ea748bd2d70cfa2d4c19707c58a9c64e232dd442.gif","active_admin/nested_menu_arrow_dark.gif":"active_admin/nested_menu_arrow_dark-7c43b8e0a5f8823875f49a093c9d7a6b374f885b6f9cc248ae9cd7e6e9b29034.gif","active_admin/orderable.png":"active_admin/orderable-29374dbb55b0012d78a37c614d573bb3474f0779849b478a147d0f1845ca6617.png","active_admin/print.css":"active_admin/print-cf99cbf27fb92065a9eacd28e6fad48fa72cadaf6e0918790e8d35b11d8f99f6.css","active_admin.js":"active_admin-71f5376a62a9260af4c6b4c0930c35cdf18e4e35221289beb36ba77fac8bb030.js","tinymce.js":"tinymce-1103c4904fc1df026a84e5ce890ce02b9a9fda036966b0fb34ad900ccb83c712.js","modernizr.js":"modernizr-654222debe8018b12f1993ceddff30dc163a7d5008d79869c399d6d167321f97.js","font-awesome/fa-brands-400.eot":"font-awesome/fa-brands-400-bd4e21d8e25a889e979ac2367770c36863443b8e0f99feeaee09a62625b9cb13.eot","font-awesome/fa-regular-400.eot":"font-awesome/fa-regular-400-4aa44a07b71f47067872c8f177f31babc0c609af2b384511353c89b1ca804458.eot","font-awesome/fa-solid-900.eot":"font-awesome/fa-solid-900-e153efe317e731e59eb8d6d1a568a811b8f7dd5df3823c327103be8e4a0047e4.eot","font-awesome/fa-brands-400.svg":"font-awesome/fa-brands-400-e281f2a25598bf8b40a77f3c5228b51900788224e91dade3f4a0f8c383505f43.svg","font-awesome/fa-regular-400.svg":"font-awesome/fa-regular-400-934530d864b6f03fad8e87b66daf829d17f0e7afbd74baead32a6a4157d584c2.svg","font-awesome/fa-solid-900.svg":"font-awesome/fa-solid-900-d5b212510d72b66bdb7feb22c611456621c3dd1a2e88cc42983d7d4c9ab79563.svg","font-awesome/fa-brands-400.ttf":"font-awesome/fa-brands-400-70726f98e0d98f543d5fde05a3a74bb131c5c67f5fbffcf4d41b7f68bca2b56b.ttf","font-awesome/fa-regular-400.ttf":"font-awesome/fa-regular-400-112491dccca97bf50ec7adff8d430dcba6d0b71e0a0b20386f814f3bf5bb94b5.ttf","font-awesome/fa-solid-900.ttf":"font-awesome/fa-solid-900-7a58f741ff539af94798ff561c918e5841d7e6164e90cbe57befdec4a16f6a4e.ttf","font-awesome/fa-brands-400.woff":"font-awesome/fa-brands-400-17ce8b9d612897d1fefd5cd2096dbd83b82d05dd5d1f60421aca15c4ce2445ac.woff","font-awesome/fa-regular-400.woff":"font-awesome/fa-regular-400-2835b63ffc892d01aac2cc346969b501c845d9184f738589779ec176937e1f33.woff","font-awesome/fa-solid-900.woff":"font-awesome/fa-solid-900-20464aebbff54cc17776497ce4112c3374a54b38f7ba5f58eec12174149d6742.woff","font-awesome/fa-brands-400.woff2":"font-awesome/fa-brands-400-dc64d7192f84497cacad5c10aef682562c24aa6124270f85fe247e223607f3ed.woff2","font-awesome/fa-regular-400.woff2":"font-awesome/fa-regular-400-ccf4db1eeb68c96e05e74f8ebfa75cc60c3a0fed862dae6b0ad85d4e1b5b4e4f.woff2","font-awesome/fa-solid-900.woff2":"font-awesome/fa-solid-900-f18c486a80175cf02fee0e05c2b4acd86c04cdbaecec61c1ef91f920509b5efe.woff2","agendadescommuns.png":"agendadescommuns-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png","alert.png":"alert-762ace9479328243a44061346b64c4d6b997e963c68dfc6bddd9e4d241192906.png","baby_gnu_adl.png":"baby_gnu_adl-463a81820aa2d4ffd8e7210dbce1a19ffcac67ef362aa7b092280c6f95c903fc.png","baby_gnu_adl.svg":"baby_gnu_adl-97251005d3225cf1d58b8c497d6b7905dbc9560cc8acd50118fcce60d0a2679e.svg","communs.png":"communs-0017bef53f6261cb3bf952d4b780c64307369714b2e1e2d4eb9f69dfd986ab33.png","lef-small.png":"lef-small-93285d531af463f877951d63fe844a6e9600b782c2c81f78723b730072fa942e.png","lef.png":"lef-7e9152b909c78144ff44ca2254c06709333bef0b8d4985deb1361aba5c63c86d.png","linux-presentation-day.png":"linux-presentation-day-863b30562924505dd21841220861f83643d310e0b943a0e6a905462ddfac86f1.png","priorite-logiciel-libre-je-soutiens-april_2_m.png":"priorite-logiciel-libre-je-soutiens-april_2_m-6442e454e96ed45cc1ebc40673a6c50bd286b9c28ea6a8b58572e94f7d6459fc.png","regions/CA-QC.png":"regions/CA-QC-70699e6a6e25c69040a3f1548b0afd829c4903ccca2760b6c10f49cc87d5d174.png","team.png":"team-65c86021cf8a1154493664094aeafcbe3e5aa13dc675bb8ef34b220481db98fa.png","application.js":"application-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js","application.css":"application-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css","flags/4x3/ad.svg":"flags/4x3/ad-f67c4e5a3f709ead53c04d9ff35614e6c67517c3d3289170f7a317390f661497.svg","flags/1x1/ad.svg":"flags/1x1/ad-a315836ec2c9dcc11ef9bfd8b18aa7ccfc2d31435cbf46a2c31930836076e09c.svg","flags/4x3/ae.svg":"flags/4x3/ae-7a3b3dc0f50b5310014cfbcc8200a5f1ce568127bf43452e40e8158e0cff2d2e.svg","flags/1x1/ae.svg":"flags/1x1/ae-bcdd9a4da09598785f3e31db4ff431e22687b2ead18209a3e615600655068cd5.svg","flags/4x3/af.svg":"flags/4x3/af-01601b521fa86582e32c39eed8c88480afec1f801b6de929b52ed7e49da47260.svg","flags/1x1/af.svg":"flags/1x1/af-6332cf754a5e2866db631923e1f7cfc52a0a554d32b97bcf19f8263819e4ca7d.svg","flags/4x3/ag.svg":"flags/4x3/ag-cb6952d821bac7855231c2cb4d1c44f7c730f6b3621518ab20f30d2b9afe604b.svg","flags/1x1/ag.svg":"flags/1x1/ag-14f7d9978487aaf4446b55167e85a711c48a13ff07edac175c172969a38650c4.svg","flags/4x3/ai.svg":"flags/4x3/ai-f07c6cc0646fdfa441b9a506e1d46e8dce0d97b37222292e9c6733c995dc89bc.svg","flags/1x1/ai.svg":"flags/1x1/ai-95099e544de29bcea3ba735de535823f2e19aeb4043e82dbc1d9862f9262b810.svg","flags/4x3/al.svg":"flags/4x3/al-9b997f2720de861e1b0ccec8ddf42a2890795ebf50817f9223e1ceba712c9b03.svg","flags/1x1/al.svg":"flags/1x1/al-94852d2711fc23abf3423534b9edb950a0c6aabf1d2d98bf2643f3c7dadfac09.svg","flags/4x3/am.svg":"flags/4x3/am-85a199ec21d1af74a256335ead0c1e38592bb603d8da81feda4678945e9e00e6.svg","flags/1x1/am.svg":"flags/1x1/am-869391b014ac299924d30777d72a4aba430752177290a90a1fc3255a7ad79ee7.svg","flags/4x3/ao.svg":"flags/4x3/ao-29224a61bf632826d530cda55d87c2615884bd2c2c3a322036ed468e34d85c75.svg","flags/1x1/ao.svg":"flags/1x1/ao-048eacbc862fe1868cf0ec73457b70a8b49a598c80dea049856f0e1fd6fec83e.svg","flags/4x3/aq.svg":"flags/4x3/aq-b401a776d2f1a7944170114f0aeeceab5e1d962df3de7ed1eff47d96824b73fd.svg","flags/1x1/aq.svg":"flags/1x1/aq-a8d7ce9bfb860b6e2b58608b50bf2cafc5220c77f6d049ab7770891f64334531.svg","flags/4x3/ar.svg":"flags/4x3/ar-bf73475bb707100874dec538ce4b7e1b5afc4ed67dc50a8a800ee519e51cc826.svg","flags/1x1/ar.svg":"flags/1x1/ar-fc6582cc6d3ef0782805d8497ee77ab2d836c53422e91007e48f81a4a9fa2e60.svg","flags/4x3/as.svg":"flags/4x3/as-79d395190345206ea03475b67b44638e1111562411504b60646483c9c0b0f7d1.svg","flags/1x1/as.svg":"flags/1x1/as-04f0db77c5d8610a55c69508b226a7c338924f8cf7d6577d5d6590e85ee57183.svg","flags/4x3/at.svg":"flags/4x3/at-3d197de8f1f0096a2b0d440b6fc7d80821585a6637e646c05487a87718bf6b5f.svg","flags/1x1/at.svg":"flags/1x1/at-ec4db9aeac793827ac7c8e40c072a76f7675010058cc8c8dfd3a86bb5acfa6b8.svg","flags/4x3/au.svg":"flags/4x3/au-126fa2500a315287a5f847f4d958bb929f11da9b39f35912cc440c0fcffb8b12.svg","flags/1x1/au.svg":"flags/1x1/au-bf990dcc957c9f74eb908e8ffa733f1731277bf6ec8b7301a6ea1ed92b59cc4b.svg","flags/4x3/aw.svg":"flags/4x3/aw-4524643452423e95f3b0dbe6216b059a9e52126b34c73ae4b3c17b682f893aa6.svg","flags/1x1/aw.svg":"flags/1x1/aw-f7002bceef55486a442bf6bf433be0c60d0b15b2aa548b81c524c67ccf0565a8.svg","flags/4x3/ax.svg":"flags/4x3/ax-c297e0eb654ca62e58f5eb3abb70df9f245e4919490f29bd0f1d49c4fe052d90.svg","flags/1x1/ax.svg":"flags/1x1/ax-a1245689ecbf321c0a9e556bba17f3c9f2aeb8b1f63d14fcb591d76a87f12880.svg","flags/4x3/az.svg":"flags/4x3/az-132e68d5e0386d3b9fa05b4288a0fd66f1414e2bc7af6b9d437b6935a7dfa00c.svg","flags/1x1/az.svg":"flags/1x1/az-3990c0526b933bd650285d821f2b93e432a73ba709869549b8ef75b051d3bd2d.svg","flags/4x3/ba.svg":"flags/4x3/ba-89dd0c1600d94741de7d667a487310193a0c48c4cf1a5159c3bf9dd37d65d2b5.svg","flags/1x1/ba.svg":"flags/1x1/ba-2dbe90eb12b937f4a9ae8db95760930a3e318f4ce5829ac05e292ead698bae5a.svg","flags/4x3/bb.svg":"flags/4x3/bb-16f8249ff958bfbc18fb1f23a5282000347bffdb5769ac620966185b1dcb57f6.svg","flags/1x1/bb.svg":"flags/1x1/bb-fae92d8426196ae24ffa561aca72613fae651a5e9c0bcda63ecc877add05b060.svg","flags/4x3/bd.svg":"flags/4x3/bd-8dac0547e73ee25a04148a3f0fd026a90e56c23b7e92921565d4263050ba77a6.svg","flags/1x1/bd.svg":"flags/1x1/bd-ecc3c3e87d4cc59c8350f2b4d7dca8f5cf46bdb26319db0ee80b744482af50c1.svg","flags/4x3/be.svg":"flags/4x3/be-a180ca68521188017bb5367f19e503d9599d6cbecd61bf054e59a57f58e648ae.svg","flags/1x1/be.svg":"flags/1x1/be-c8d4194137bd01955285b329dfdf996490d16c3116a92ce2f322e354b6d7494e.svg","flags/4x3/bf.svg":"flags/4x3/bf-6b214936ef89f19133d4a84e99cdf0cfdb99d6409f2f373f6d18694423013313.svg","flags/1x1/bf.svg":"flags/1x1/bf-04c7d61aa314adab5a41bd79d77aa780c10136bb6b8f4c62423e61e23e3851ee.svg","flags/4x3/bg.svg":"flags/4x3/bg-dd3985ba746942b0e65bc52a280cc4d28fb24fd2c7d9e22ac9afd2d75ee7bfc4.svg","flags/1x1/bg.svg":"flags/1x1/bg-f59294a736d5bdc0f102b58d70dbe45d02bd92df822820bf95336840f75a0746.svg","flags/4x3/bh.svg":"flags/4x3/bh-7c82c4a6ba963172c6c1b4423f39a0ebe9c999449cc7dd87018917943db4735c.svg","flags/1x1/bh.svg":"flags/1x1/bh-6893aac3e55c6480e9dac0c023ec2179f6c12a0da82a0bc2717134384c097e88.svg","flags/4x3/bi.svg":"flags/4x3/bi-4fcd0116f7f93c0564c6955806f3c3563d0ea7334ae406f29a897255845c923c.svg","flags/1x1/bi.svg":"flags/1x1/bi-91c34eb431b26be67852782a0b93e1d7d577a925454d6c8cea00a0d872d2de8a.svg","flags/4x3/bj.svg":"flags/4x3/bj-63bddb4268f5f8c2ed867041bcf058fb18fcd9d1e0799e01286fca2d5e961c7f.svg","flags/1x1/bj.svg":"flags/1x1/bj-e2606c5a8498c474a6b6708626b88108fcb73840344766566dc56f804279cdfc.svg","flags/4x3/bl.svg":"flags/4x3/bl-824a7265f48789d5e1ad5c5b0042a13a7d2d4357210e5bd8124fca19931e8c74.svg","flags/1x1/bl.svg":"flags/1x1/bl-ba6a7881b0ca72ac57aee4d823ae611ab4ad24a938ee9e01a7a4d5ae04cfccf6.svg","flags/4x3/bm.svg":"flags/4x3/bm-2e2f09e5a4edf4b18afff581656f50b0b4c37783db29591ff00ca768f7f755bc.svg","flags/1x1/bm.svg":"flags/1x1/bm-f553f953f8784ea4d67a5197f5d808a67747eb8a1cb56990d6838e690090d2d6.svg","flags/4x3/bn.svg":"flags/4x3/bn-bcf9967c12eb6397346cb5b960ae92efa41f314f780d09a3d7c81f5dacac4180.svg","flags/1x1/bn.svg":"flags/1x1/bn-1d1aad3fe9fd33ce922eba33c9ae6047a5646349239c20d1bc7307ec6d19a043.svg","flags/4x3/bo.svg":"flags/4x3/bo-fa423f2bb4ab6e8e9dd399ad73781ea8d9cbafd30f1b7ee0bcecfb9e7b75581e.svg","flags/1x1/bo.svg":"flags/1x1/bo-f5faa29e40191e0c76070ac1a1d2a1f2b18e9cd358b8a77cefaed8efc49a265e.svg","flags/4x3/bq.svg":"flags/4x3/bq-493c92ab19204c3ad319e6caba021df050132b99bd57a8f9b74131b78229c29e.svg","flags/1x1/bq.svg":"flags/1x1/bq-6e30bbeabc2aa097f657a411984b3c23278a8fcce2fc016b1cd6d2262f672d33.svg","flags/4x3/br.svg":"flags/4x3/br-cf3ba80ec2c9fd4d3c845c3a3c43a2b9d81cf90707a2918789e8b1f596833e01.svg","flags/1x1/br.svg":"flags/1x1/br-7bf4e4b31650ac25f0bc6c86eb87491a7e5a8eac13acccfcbde44346c88728f6.svg","flags/4x3/bs.svg":"flags/4x3/bs-69f60b5fea96b67dd939e597099994921bb3dc3bcf31b8dee7cc45be2885c836.svg","flags/1x1/bs.svg":"flags/1x1/bs-f5d6acf7ef7a240dc09ac88710fd77fd3494501104392db74d5c540d482f2262.svg","flags/4x3/bt.svg":"flags/4x3/bt-6c20b0c00e12d5898be0239a0c66ce775debd0bd536de56a271859a0285a039e.svg","flags/1x1/bt.svg":"flags/1x1/bt-58de3ca9438811ef1920e2f84c4ba4ce32d01069f4d197ab5d577de6acbe0c85.svg","flags/4x3/bv.svg":"flags/4x3/bv-ff173190fc339b3cb8b6e8235bc5e373853d7127fd94cbc32ac737e839aeb586.svg","flags/1x1/bv.svg":"flags/1x1/bv-59616ff1a722959064c83927ca2e49c1fce42a9b18e91b9ecbb74f62527aff43.svg","flags/4x3/bw.svg":"flags/4x3/bw-4bb1d3131b88c65b5decc67f7b44903e931bca2fcac841942591c599f0cbb850.svg","flags/1x1/bw.svg":"flags/1x1/bw-e08f50c0836ca5858aed7b0526aed6fb630da8dc6b6b96bd9a476af599dc89d6.svg","flags/4x3/by.svg":"flags/4x3/by-324ac96bfbe075781c664be3b9e2ac6b4d2a46dd2b418ca0920284f64394c7d4.svg","flags/1x1/by.svg":"flags/1x1/by-37b80e8bf7e51fef99a8307d6dffb04ee164790ceeafef606d516ca333e9488a.svg","flags/4x3/bz.svg":"flags/4x3/bz-156fdc45f8c15c9520a1ea9fc0f395f294f02077408ea1938c222a37cfbb7f1d.svg","flags/1x1/bz.svg":"flags/1x1/bz-24577d4e7b29b33ab3b1d37914c8479889baa7e8c8399c6d1c99faed31ab053a.svg","flags/4x3/ca.svg":"flags/4x3/ca-0d57cab46d5dbb0012a5e4ae0a9efee3baee90d5d157950a6c5d67edf2daa58f.svg","flags/1x1/ca.svg":"flags/1x1/ca-192a6fb0544e5a6f33a32149d62f1e7ac0a1d61c5c5afa57f3a42346ca8e8c90.svg","flags/4x3/cc.svg":"flags/4x3/cc-a35f2a9e10a28d6918ced65e0623b03bb2fbf1f20670b581bc0a409d33b4e843.svg","flags/1x1/cc.svg":"flags/1x1/cc-d2025eefc9d30f724f3fcd95c0fd9f7938930ecb01af7e0cd6ee6553d7358eb6.svg","flags/4x3/cd.svg":"flags/4x3/cd-5d2127c991b30522ae0a29d05facbc88728c050d7e333a60d614af1545459c5c.svg","flags/1x1/cd.svg":"flags/1x1/cd-59dacf424d1c8c779db66c5b7f2a93a3c8f14976c2975ccfb07639676a1602e3.svg","flags/4x3/cf.svg":"flags/4x3/cf-ac0aaffba354d848eba2501a402ee81dc96a56ad0acd3741ec9905e76c372e1e.svg","flags/1x1/cf.svg":"flags/1x1/cf-e637674faf7edcdad37182192d038448c157421ab0c69377d9b8e56ab2c0249d.svg","flags/4x3/cg.svg":"flags/4x3/cg-3729f717c83c9df7d0543a1a5d4a506efe184bdfeb39f9260b4b63edf19d2538.svg","flags/1x1/cg.svg":"flags/1x1/cg-8353ff1f251714b1b8905eec1722378426719955d0637d206d35d1dcfa68ddcf.svg","flags/4x3/ch.svg":"flags/4x3/ch-6739edee6d1ef72c4ed97cfe723d3bb7f17e4df5390f3a4ae234f1ffdeece0cf.svg","flags/1x1/ch.svg":"flags/1x1/ch-7c3dec465228981c57a90a3a7b3a6c42dd3e699230663e770b55008ce6d14208.svg","flags/4x3/ci.svg":"flags/4x3/ci-3e076d13c9524149508c442f8f727424660124e3591280d8ae9bddf9d8272a1e.svg","flags/1x1/ci.svg":"flags/1x1/ci-691a0a8577b7d555fc90dc7170adc9ec7571191cb3507c46c0e8516fd1778a91.svg","flags/4x3/ck.svg":"flags/4x3/ck-9cff098e505afde9bf5166cb7b0c409178575633b913ce08c1c700d08c477db6.svg","flags/1x1/ck.svg":"flags/1x1/ck-9c8dffa3bd5953d8a121780831f25b58738e67f3be71961894c56dfd25848c88.svg","flags/4x3/cl.svg":"flags/4x3/cl-a4c57ec2bb9adcb67e1850256e5165227b764187d6941a38d95d0def5144699b.svg","flags/1x1/cl.svg":"flags/1x1/cl-5a3e95cf63358e3911c97404818c2cddfd46414d8445e47d6976ee166c48926c.svg","flags/4x3/cm.svg":"flags/4x3/cm-5dce9f36d92a61bdc0c482141bdb4f55bfcec0a2ecc745db643a7953e2e5a722.svg","flags/1x1/cm.svg":"flags/1x1/cm-d8d21f54c44df5df9edef227691384a4ad37c15ff57c8aa0dead684d19eac8cd.svg","flags/4x3/cn.svg":"flags/4x3/cn-48ce1c2837bb806a6aaf8b7a9878b6d040c0d069a0ffca9a8a49e7a31aa30e7f.svg","flags/1x1/cn.svg":"flags/1x1/cn-e6be64c6c4a976e64d39bfe8a6ae4a5b1d38a6aa1b138ddcacf34a942dff50bc.svg","flags/4x3/co.svg":"flags/4x3/co-648d3ff596a0ecf3e85ac17c53abe1d7ca4759688e10a7a3a8b56f096ba6b6f7.svg","flags/1x1/co.svg":"flags/1x1/co-d3c16180c6bce630f762aff789104d10e9dbc949e740535a61396cd0ec34c1a1.svg","flags/4x3/cr.svg":"flags/4x3/cr-84aec60f19bd33e1ac1a209155fec8d372e17cb59dc1346bb9124e5cc867375d.svg","flags/1x1/cr.svg":"flags/1x1/cr-5371cf8bc5ad1a805155c1b3065e420a0a418c8d63b472bc545890289a365b35.svg","flags/4x3/cu.svg":"flags/4x3/cu-bb3f857e02aeab606120d9f164283f07a44b227f12aad7d6d344c7579f7b3ff0.svg","flags/1x1/cu.svg":"flags/1x1/cu-02c0054169b874a8d231de1f45b2d0884de48848157734e0ddcd0f684c05c18d.svg","flags/4x3/cv.svg":"flags/4x3/cv-90ee90ab59713454a218d8c300c71139e62655de80bfbea81df93142a529b81f.svg","flags/1x1/cv.svg":"flags/1x1/cv-2cf3eede97a468d28459ccc2271c28bb5b6029af2388b0301f6203be55e49308.svg","flags/4x3/cw.svg":"flags/4x3/cw-d46beb7b10b40fa82cfd40eb86a3b3879f59f5da2a2f5ef91d121ab9b16c0aad.svg","flags/1x1/cw.svg":"flags/1x1/cw-ba78c834e61b24a8a2b6bc7c80ab9f14e42c3c69415941ddb7c8c1f652ccd8b5.svg","flags/4x3/cx.svg":"flags/4x3/cx-28187fb9d91bedc6f239b107d26eb6ec1cc2a0c7730810306c5a6b313c14f2b2.svg","flags/1x1/cx.svg":"flags/1x1/cx-8ebe073d997f93d092a493300ea1d234c91aef80c6e8f431e88aa7f8e724f9a6.svg","flags/4x3/cy.svg":"flags/4x3/cy-8d633ecabc7968bb8a869c62545f122aacbbc3e108c25ceb421bb8bc8734b9be.svg","flags/1x1/cy.svg":"flags/1x1/cy-6ef37fdd7518f18727bec1ed9741bb4d1f854dde7ef1a7e9fd2f4ba6291a7790.svg","flags/4x3/cz.svg":"flags/4x3/cz-6c94e3d53fc1ae5982d8eb058b76d86f07d3fb4cd325698fea3291fa35504c56.svg","flags/1x1/cz.svg":"flags/1x1/cz-af9898ebd32559cdbea2fd17b351e5eedafccada6fbc6a2b7952cad78369817e.svg","flags/4x3/de.svg":"flags/4x3/de-e7323083675d25107c85f0cea6534bd21d21e77e6d524d92e1b2d0a4e21117a1.svg","flags/1x1/de.svg":"flags/1x1/de-fdb60146952d3b2d104310b28882a0ecde44d808240c3bab2cd6c302a538b266.svg","flags/4x3/dj.svg":"flags/4x3/dj-546da4a0dae9b1ab74dc6ac6076d0c706f37ef2a0d799342dd0345e11f770f03.svg","flags/1x1/dj.svg":"flags/1x1/dj-c0481b667f003d9d5a3c93861023a97a98224227ac19aa7e07b5b6edd35fe900.svg","flags/4x3/dk.svg":"flags/4x3/dk-a13735c0337ab4679cd8679508bf5e8067637ab611ca5c54172c621d740420e5.svg","flags/1x1/dk.svg":"flags/1x1/dk-822a3b8b6948f49aa81fe7620bd173453d9a45406a9680f24bad7e714e58cb7c.svg","flags/4x3/dm.svg":"flags/4x3/dm-7713fabd3cf341694b4c1ef5d1379820773722b61c190234ac7416f2872e3940.svg","flags/1x1/dm.svg":"flags/1x1/dm-33d984fc9897bb2a3bd16c6672b876effc1a8adc0c57ad122a16db54061e4e46.svg","flags/4x3/do.svg":"flags/4x3/do-714b6f307ea3a9c3d30348684b8574e8b7f5078f51649dfa97ae2a69a7108b4a.svg","flags/1x1/do.svg":"flags/1x1/do-d37306c4b346f89ea14739144374caad69652be31e8ce8e2504c9a0d422a4857.svg","flags/4x3/dz.svg":"flags/4x3/dz-a96e943c830558fe9823044aac2bfb3f6a4caf3bd3c57943352280a7f6b68cb1.svg","flags/1x1/dz.svg":"flags/1x1/dz-09400d3b2c58e641a1641a687b81476761d05f9d0ff65861aeaa33c7f508cda4.svg","flags/4x3/ec.svg":"flags/4x3/ec-6762ba85ea0f7bb289b0aa6219c797e5243103d281b1462c61b61030fa329d5e.svg","flags/1x1/ec.svg":"flags/1x1/ec-7410a75a013738fbb8cbd756d967380e02ae54ca74e9ef9a41c4b583c2c2794f.svg","flags/4x3/ee.svg":"flags/4x3/ee-ce3b622214bd9eefb43373cae2811ea8cf6ef6a16bb6afbaa5bcaaea34024da0.svg","flags/1x1/ee.svg":"flags/1x1/ee-a207a8363b4dde44f59951501c2cb539419e92b0814b25d6448710ced52226f8.svg","flags/4x3/eg.svg":"flags/4x3/eg-16a11fa93856ddc5fd46f8811adfc93660175724b20eaab55ff046855a352d2c.svg","flags/1x1/eg.svg":"flags/1x1/eg-9f4d098c604326bbc3692f9e2f335dbc9b34bdf2706565bf448380f0a889d1e2.svg","flags/4x3/eh.svg":"flags/4x3/eh-9cf4a74d29c1a1afc4137deeb5b678d55c8fbdf8d181217267f3a5cce6a76a97.svg","flags/1x1/eh.svg":"flags/1x1/eh-16c3327dbcf3483e634b3536b056324b5478212dae6d060f2ffb2ec961cd382f.svg","flags/4x3/er.svg":"flags/4x3/er-69a1e1e45289d1282df4b1e5ce5e712d69fbe314abd0c922353fce90814c543e.svg","flags/1x1/er.svg":"flags/1x1/er-90d49408e58955cf1cf3185b0193e03c4a107042d47ef5e975dbbe10c6ef7f4a.svg","flags/4x3/es.svg":"flags/4x3/es-50e59681c6b6412498bd9cbfc473abedc713db75c54c538b839db3c394d64499.svg","flags/1x1/es.svg":"flags/1x1/es-29c68fa3c9c8c2adacdc2eb0162e9c2fa998faa408836900ec6285000476800d.svg","flags/4x3/et.svg":"flags/4x3/et-14263ba7ea890fd0a4d89a2791343ecb7acc89aab1fc2593e00a6093b22251df.svg","flags/1x1/et.svg":"flags/1x1/et-086eefb70e9adad537cc1c640a72cc0fa843ec7a9b06b2778aa98b2db055bfe6.svg","flags/4x3/fi.svg":"flags/4x3/fi-a4c41caa02a4f6803ea0d6c36de4beebf20d150e3df742b1369a4099c2ff648e.svg","flags/1x1/fi.svg":"flags/1x1/fi-c5fdf318fac5fdfc94fe54268618e58a2bc5933617ead09992900f90cc25de9a.svg","flags/4x3/fj.svg":"flags/4x3/fj-cb0cc4b3b5c202f07487ee519f48b3eadb47035f5f2d5d3f99d20f81e48d6b79.svg","flags/1x1/fj.svg":"flags/1x1/fj-c2c7fd536841925e7647b2d510d6a0c58700e2a8ded0e42008fb93ffacde101f.svg","flags/4x3/fk.svg":"flags/4x3/fk-cb61eaa0d7221823f7d17de59ea88ed16b506f9585ab0c7291cf839449d82968.svg","flags/1x1/fk.svg":"flags/1x1/fk-a871742380ae157d1211a63cc35cd3621b1bf6de6d67e4a8e3565ad200b1d8cf.svg","flags/4x3/fm.svg":"flags/4x3/fm-079b937562a9a412aae8fb762b571ddb49bf23627943c97247b6a9bbdb768153.svg","flags/1x1/fm.svg":"flags/1x1/fm-dbec73633ecd8a6c50f56d54df36bbe6a2f8fb534ac7658477c82cad14a806a8.svg","flags/4x3/fo.svg":"flags/4x3/fo-27279c2481bb1cb3e44850a948987d6a8411acffa770c3aecd1b76d4c5853413.svg","flags/1x1/fo.svg":"flags/1x1/fo-7cb4fdbba1c7223702d843cb0709ddc799f89f909dfe101e3e36d6bf36c3e67f.svg","flags/4x3/fr.svg":"flags/4x3/fr-30ed2f68dc9a17927643640f48f3d2a858bd041770547035349c6e79713cd84e.svg","flags/1x1/fr.svg":"flags/1x1/fr-6b849151204c66fa661c30b34e62919a13b9e66b7cd37a4fc8962e8e0baf9bdc.svg","flags/4x3/ga.svg":"flags/4x3/ga-e3840f9d5bd6ee08db748d37a534500b837bee0f8ce65987b2f099a6afd2cc63.svg","flags/1x1/ga.svg":"flags/1x1/ga-9eafd5388042b3d2258ac6223075b726426210136b9851b637973105721b64d9.svg","flags/4x3/gb.svg":"flags/4x3/gb-ce93c8a6b974d63998e263f6d25f898fc20580a28464457f2f4463b687e4fe8d.svg","flags/1x1/gb.svg":"flags/1x1/gb-1d93e1ce2e2e10c1709e4dc50ac956c007b2c1a63a4bc22ddfd64354f79ad457.svg","flags/4x3/gd.svg":"flags/4x3/gd-7c3a6b6068bbd9a6abc98c2297dd4acd5e31022e5a4210fc0e1205ec28498fa2.svg","flags/1x1/gd.svg":"flags/1x1/gd-2310bc03d9e8ddc8599b40891bfb10b812b07023881599a7e02e3028d1bc9ca8.svg","flags/4x3/ge.svg":"flags/4x3/ge-501c0135fb8c377dbd2859ff6290b47ef4907a8e2ab2ae1e39116b716db6795f.svg","flags/1x1/ge.svg":"flags/1x1/ge-ca9ee36883ec12048fbb7fbbfaf231c0d4848ae0b07dab74a46d53b7b34d8114.svg","flags/4x3/gf.svg":"flags/4x3/gf-7c165f90bfe6ac3674903632182221a992f017ff706354b1761002382e89c2c2.svg","flags/1x1/gf.svg":"flags/1x1/gf-8838337b15cdcf143fac16c714e8dbf2d893d2ea8f1c8ef06dadcb652dfec41c.svg","flags/4x3/gg.svg":"flags/4x3/gg-2c7bfc50d5bcd374b5f6107974d06af24e70edba31ad71a225e0c2ecc2d6e778.svg","flags/1x1/gg.svg":"flags/1x1/gg-509489b1792831bb27d6975c76aa0a2ac2fa2c3906bcf844f616de5e0fbbc359.svg","flags/4x3/gh.svg":"flags/4x3/gh-79c187756e93df22fae571ad9419629c5247c016e32a74471e0d461048fdf5cf.svg","flags/1x1/gh.svg":"flags/1x1/gh-e7bf18e6337982ee31e3673ab93e722b3410b7a4c202656a4bc3887d8656286b.svg","flags/4x3/gi.svg":"flags/4x3/gi-ed99b369c8c77e64abd59fab1f28155d71b4378b49625c66ab0ab6dff4f88087.svg","flags/1x1/gi.svg":"flags/1x1/gi-2e563e96e766e13c0a9c5a3a372059a44739bb696e853d71a6f6b08c491dfb9a.svg","flags/4x3/gl.svg":"flags/4x3/gl-612e560dbad68d540be672b80e22c54db43d6e2070523e81c156ccd6b3fc4260.svg","flags/1x1/gl.svg":"flags/1x1/gl-a9bb35d2b9ff27638658d9ad6b9e2c4f452072b9a80b508d32e76d37bf62cf6e.svg","flags/4x3/gm.svg":"flags/4x3/gm-4a6f9670a41548cceaced2b728e4bc56acbc4a3ba5544e7a097f7dae7a8bb045.svg","flags/1x1/gm.svg":"flags/1x1/gm-b67f9f6bce2f8c8700c198de8bfafac72d01b8a1e55b77f71e8cafdc58f8af5c.svg","flags/4x3/gn.svg":"flags/4x3/gn-873b4eb52f34c7558bef93cfd1b82117b5c32c9fbc0610f8821ccd22f28abe28.svg","flags/1x1/gn.svg":"flags/1x1/gn-72f51dc30cf0ed5459ad0f239cf3043eac05ece75945bcaf4ea6653af868c504.svg","flags/4x3/gp.svg":"flags/4x3/gp-4559cad3eb2d173214161d16b0237c68f5c817749a39c862fa7b23dfb4aee923.svg","flags/1x1/gp.svg":"flags/1x1/gp-d6669532054db5b7e441f4858c28920246a65ca3e8a15518c64c7bbb4f9c6416.svg","flags/4x3/gq.svg":"flags/4x3/gq-0c8dfe7f9543307056bbe6d6e44a16c17201228e5344d5afec1ccf1b9a5eb2f9.svg","flags/1x1/gq.svg":"flags/1x1/gq-ecb761e6db59b9bf8ba37533eaf0c60b7fcc7c0dfa2fcf281ee84c970dcb10f8.svg","flags/4x3/gr.svg":"flags/4x3/gr-4a4086310397bffa682d439be8650a9e28d94e32963b6411b61435292ac4cf80.svg","flags/1x1/gr.svg":"flags/1x1/gr-0cbd171892c0568b055d3b6585d58ac13dd60dfbcfad16eda1f4f9ead11dd16f.svg","flags/4x3/gs.svg":"flags/4x3/gs-e45169a93a9e94c15f5cb765a6c863319171fb9b4dce56094411829cd688d486.svg","flags/1x1/gs.svg":"flags/1x1/gs-3efc9e1b32961f9aa9d7faa2626e596282b63d049f6717c2378b28e3f508e79a.svg","flags/4x3/gt.svg":"flags/4x3/gt-64a7345cf66facf7f323d2142aebb4172191108a78ac7493b1a6077b78ac8ec5.svg","flags/1x1/gt.svg":"flags/1x1/gt-436a2af3d95cf3cb13ded897f319cfd6e2c087d678ad0e971c198b0d2c029911.svg","flags/4x3/gu.svg":"flags/4x3/gu-f560822ee237e5277829e63613a615a2ee3d8cc6196dffffe0f0d56a49b11c53.svg","flags/1x1/gu.svg":"flags/1x1/gu-a71c9d290c66c1a0929b05436dc6a8229b1147d7cc62336e04c9adf697030450.svg","flags/4x3/gw.svg":"flags/4x3/gw-0dc9ec17735ed605b68672947ce55c49a4ec1551491ccd121f482c1875cdf219.svg","flags/1x1/gw.svg":"flags/1x1/gw-7868c305e4a64b0d8ebfd3f7cb8c881841d71a7e0c3ead2683fe503c80de0674.svg","flags/4x3/gy.svg":"flags/4x3/gy-c9126e544c62508abfb898f0af0bd79c46f4c767c9ed6f928418a24b0f246d85.svg","flags/1x1/gy.svg":"flags/1x1/gy-0e3b849ce460f8ab1ec7cf66a25be1ba91e89b72d8b0aa679a0553464f37a972.svg","flags/4x3/hk.svg":"flags/4x3/hk-cece9126ccbf9151feadfed75791ebf32d4a16beab12f182404519d0cc24eec7.svg","flags/1x1/hk.svg":"flags/1x1/hk-9fad00e06f9034877149394914baa2bc3292223b0e32df2b1f9399d4de6e167d.svg","flags/4x3/hm.svg":"flags/4x3/hm-4b4923b81da24d62ebf31a9bc0addf76beef84593374b1cbd03ba19f3b12e3e9.svg","flags/1x1/hm.svg":"flags/1x1/hm-776c822113a22e83581234d05f40bfc0ed38b60648d87f513f3da3fff96ffb61.svg","flags/4x3/hn.svg":"flags/4x3/hn-855c830786283862a5f399e0d69dffe52b6223b91b32e31b55d55c82f2fa32c9.svg","flags/1x1/hn.svg":"flags/1x1/hn-64c38bac9403417c4e276bf5536d284fc5410fc04b80acd39a961d298f430dbd.svg","flags/4x3/hr.svg":"flags/4x3/hr-c8cad861f7398a22b9d27ea682d2778df0dde8e146d30142b5294daf988854af.svg","flags/1x1/hr.svg":"flags/1x1/hr-60c093df6760e4cc6abe26c37a52be3b51458f02712f18e11f08b07dc623b489.svg","flags/4x3/ht.svg":"flags/4x3/ht-fe81da06228fa36e7f211bec0d9f0c020f5b9c7f81534b4cb2251848aa276b16.svg","flags/1x1/ht.svg":"flags/1x1/ht-dd0197c078859c5a66ff3a51d3a3f92809768e36bfabdec0fc0ab60d068afcd9.svg","flags/4x3/hu.svg":"flags/4x3/hu-9aa998e636687aede491e307f3d068dbe58f2d90bfdfaec0e7ad03baa5b36344.svg","flags/1x1/hu.svg":"flags/1x1/hu-06858d0fbd4320496e849010e35c8fe82eb618188cf6ec329aef93f5e7af1c23.svg","flags/4x3/id.svg":"flags/4x3/id-775dbfedd6533afdf5bd017ccc1ad4f8f4238cbe87393d9c837a669196f17293.svg","flags/1x1/id.svg":"flags/1x1/id-3920ce662a7ea937b2c11707d8e1f53db52611dd004edf753b0389ed490d9d29.svg","flags/4x3/ie.svg":"flags/4x3/ie-6368a1c92440fcf80d3c35607543bcaa2d4662d6e0bc7acf6749ddbc418a72c0.svg","flags/1x1/ie.svg":"flags/1x1/ie-1997e9de640fa764677aa8f5d52f7888bb24a029160e8f67b06dbd043b4f11b3.svg","flags/4x3/il.svg":"flags/4x3/il-d76883a2330f9a05a4a64990ba955fc1be90bb46bcb19ae548c21816e7e74178.svg","flags/1x1/il.svg":"flags/1x1/il-f5e643d0e10169a438119dc441ea3100b52a2ff569bbb3a3ad6d1131b47602d8.svg","flags/4x3/im.svg":"flags/4x3/im-bbae8aa9dd129f8446556afe4904194ad43377d882f9a705fcf1da2bdbfabccf.svg","flags/1x1/im.svg":"flags/1x1/im-767d72c2e72d732d65c9b016adad983778dfbbb2b5b52e71830f4e41297728d3.svg","flags/4x3/in.svg":"flags/4x3/in-519e33321b8b2ba70a0b7557d66c62d7efdc9723896c49f82528b107028ffe29.svg","flags/1x1/in.svg":"flags/1x1/in-27831f76dc6a218a529b6e5d0eafc4c19c999461327b7c013f59226c0601a361.svg","flags/4x3/io.svg":"flags/4x3/io-8d25a8e98f682199b413adfbcb6898c37058c9bae085e427fbab03d56e8c0de6.svg","flags/1x1/io.svg":"flags/1x1/io-627f3b0cef72fd91ff426d74a007dc32d74c9fe677cf2c8355cba84359e16fde.svg","flags/4x3/iq.svg":"flags/4x3/iq-96b24d1439184d0a4c35ca7cea65e5f20469a0e8c8438963aad016e59c399cc6.svg","flags/1x1/iq.svg":"flags/1x1/iq-af04db139f8c44cfe0c612e2c05e848ccfad88fbbfcb58e88cdb7c80db365669.svg","flags/4x3/ir.svg":"flags/4x3/ir-db2c230d355ade2b1ac235ec647bb1535e4703c639a44f9ce112473272ee1019.svg","flags/1x1/ir.svg":"flags/1x1/ir-c648cbf56fc8f324fda477ea816783c9df8a7d398f45f5f94acc1c16c8877b63.svg","flags/4x3/is.svg":"flags/4x3/is-29508693138977229758b0f322ba34e90dbcd7a8a74e8820729933d24051d9a7.svg","flags/1x1/is.svg":"flags/1x1/is-b1c5db1d4b4853b8144f1d88ababbf14fc88752340457ba3e2c94ab5d54c9c01.svg","flags/4x3/it.svg":"flags/4x3/it-d2c168050fc509adac1163b097b0ed409217560735b27802ae9259587c146562.svg","flags/1x1/it.svg":"flags/1x1/it-592d34fb666430fa00f98d333623d5efa3c8e0e65ac4eee06bbc4c1de7ce4bea.svg","flags/4x3/je.svg":"flags/4x3/je-b363a4e3a21630f10791c2ebeb7f918320816ef87c155d4fd29ce37982f4df35.svg","flags/1x1/je.svg":"flags/1x1/je-6d43f74e30e099bc056da925ec34c0200708f0a6e90da34db1e59d54ce10cfd9.svg","flags/4x3/jm.svg":"flags/4x3/jm-3d133fbc2564f29e036855e8be224d1579fe66fe49e0f5a2ba0bdcf3cb272823.svg","flags/1x1/jm.svg":"flags/1x1/jm-1aea8ea5d8cbc717fa3ef331d8caa9a1421c88a7bd076e40f8276a5b6f8d0467.svg","flags/4x3/jo.svg":"flags/4x3/jo-eee432339f8ea6750987e1121187eb4b53ec537dd7ccb240c018de63f7a92db6.svg","flags/1x1/jo.svg":"flags/1x1/jo-7969b2083c535c85b7e714b755459a6606940e0b5ddb1b71e24daf0a180d14aa.svg","flags/4x3/jp.svg":"flags/4x3/jp-2eadcfc67ba8cd50c1da86e08e6778e0102c3072865dab8c312cc88006da0abe.svg","flags/1x1/jp.svg":"flags/1x1/jp-551281a75e6c6fd64eb65b39f56102b52c182f6c38ee045c9422f6592f0f65c5.svg","flags/4x3/ke.svg":"flags/4x3/ke-45790bc3ec1ed8ed0124777a7c9e09163353b5af4ff70ae6604a61b53712df4b.svg","flags/1x1/ke.svg":"flags/1x1/ke-2cca24ecf024b801543c0572efc9969ffdaf25cec313e2149c64961839bc301b.svg","flags/4x3/kg.svg":"flags/4x3/kg-3879f8931d74cc9c5927261f4095b2bb786f3d62c803b2a96ec550a23fae9f49.svg","flags/1x1/kg.svg":"flags/1x1/kg-74318932808f85b72df308358f2f2699ab0cb7ab4f7ad3c84c4be4024f0fb140.svg","flags/4x3/kh.svg":"flags/4x3/kh-7409fab4ba4e676db7b5c61020b97893b1735fe0b8e39e9b4f96108400be704e.svg","flags/1x1/kh.svg":"flags/1x1/kh-2603f6a61b400cb12b87397eeba60ae1707511467d5e0c430c05809bf89e5042.svg","flags/4x3/ki.svg":"flags/4x3/ki-617c1b52f3d9aee99d094edbd1775cae77aade266a1318eb4671b2bb1620ded5.svg","flags/1x1/ki.svg":"flags/1x1/ki-74615266b440a24f09abdeae3853d7e1111f0eba77df71ccd176d83fbd1fd9ad.svg","flags/4x3/km.svg":"flags/4x3/km-0c9bcbf7e677a541fc8dff6f848c9d92b6982ac2934ae75faa56a2b846bb5698.svg","flags/1x1/km.svg":"flags/1x1/km-81b0fbe53d09194270e8ed4cbe9be8eb1ae727e77957005369ad8bdc651dd1c8.svg","flags/4x3/kn.svg":"flags/4x3/kn-0442f55f81cd3b1057c609301f0af2b503d89a895a954af8c970df997e92bd03.svg","flags/1x1/kn.svg":"flags/1x1/kn-897c34ef54bee486f0d24d2191e2400f49a19d98efb19f8c3f1a27fb0b97131a.svg","flags/4x3/kp.svg":"flags/4x3/kp-a54f7201982b29530381b71a5e2a11c1153860f22c04c0a2d91bb0d20fedf78e.svg","flags/1x1/kp.svg":"flags/1x1/kp-758eccd89ef3707808fb68d931f086e49333904f4cc67c88468f3c96fb43b7b6.svg","flags/4x3/kr.svg":"flags/4x3/kr-c0b9b2c854133410c0ad9cadbc10b1e0bacf0305519883126d55bfa3214f9d06.svg","flags/1x1/kr.svg":"flags/1x1/kr-7c0457ac5d284b28b742ea2e061a1aa2a35f63171e464b3a7eb501a48756ce7b.svg","flags/4x3/kw.svg":"flags/4x3/kw-81c3d5d25c7b840ef14783b51d18c6b7cfc61f94932c664bbc9e5879fef020eb.svg","flags/1x1/kw.svg":"flags/1x1/kw-66670211a67a4e61d4652a19d821dc5195f01a28a3a9b28b7e4c6048cd86b19c.svg","flags/4x3/ky.svg":"flags/4x3/ky-0f4ab66d951ae33f800d680aaa5704804ba9c8844d4d80e5bee2e3fa0e100af3.svg","flags/1x1/ky.svg":"flags/1x1/ky-fb5f57bb58b74d23377bad9954a75ab88d1587af68546ce137a6ae7a88a7701e.svg","flags/4x3/kz.svg":"flags/4x3/kz-39edc952c598c71be2c9510944a8faf708d8e4b367b5ad78a688d1cd37f522eb.svg","flags/1x1/kz.svg":"flags/1x1/kz-924c04dc19267b049f35213af0e2b0c540933c06389433cb4aacd8dda33b286c.svg","flags/4x3/la.svg":"flags/4x3/la-e3a36a3bd0003442c3a21d3a192995fa6fb3b3c08a2daadc8f38f62736b5b1e3.svg","flags/1x1/la.svg":"flags/1x1/la-c9d4223a897e5e2938a4892bbc593d3828093b9439fc3f6de21520e4013ddbc5.svg","flags/4x3/lb.svg":"flags/4x3/lb-508c2a5a9b50d604895675b9f1c1e5914c394a7f468f5d823eb0476acaacbc7f.svg","flags/1x1/lb.svg":"flags/1x1/lb-10c9ba8ea7aa3189f16a7273c837982a887fc4ddfc9d514d8f5a660d72356f7f.svg","flags/4x3/lc.svg":"flags/4x3/lc-04ccd92fb1578654181febaea30ebd6b6620f56115730b2a2d673c712307bf5c.svg","flags/1x1/lc.svg":"flags/1x1/lc-4ffb53afb8bd296d526ac26fd8007afc74855e92833a893d3c934a5d12eb152a.svg","flags/4x3/li.svg":"flags/4x3/li-3058dc4aeaf2bd2da8cb910892137d732b56e5e9d342e565a4059de1a8e40e40.svg","flags/1x1/li.svg":"flags/1x1/li-0780a4f218b9ee466e33d14274b8a01575a86b3787b347e3269a3b301c220d5f.svg","flags/4x3/lk.svg":"flags/4x3/lk-a13d6ab1da51be3b1d2c5b80f4d866c923d42b017e197469e1bfc0dd021c4bfe.svg","flags/1x1/lk.svg":"flags/1x1/lk-99759363f0df6b868fd1398bf05666c680bafe1eeec8b859b64d450930213e02.svg","flags/4x3/lr.svg":"flags/4x3/lr-b06a1d70899826b305ce387fa31e1fa0bdb3bcb17c1392f15f995ce1dba723cf.svg","flags/1x1/lr.svg":"flags/1x1/lr-820a9d023e5b1e68ed640bfaba8f84ad4379c42a6c5c982cb76b0390dd2bcbdd.svg","flags/4x3/ls.svg":"flags/4x3/ls-d02bcefe7c298c153665f35c33eedb08e2e2b345350e4bf1714a87abf86b2d0e.svg","flags/1x1/ls.svg":"flags/1x1/ls-85c731c313a46db12bdb27fe229e9f7d052b447c624663b73ffa1dbab97f03fb.svg","flags/4x3/lt.svg":"flags/4x3/lt-c08eb18a15d2003cb544432b11c5081d3d5741370669b4df306d1c6bce14cb51.svg","flags/1x1/lt.svg":"flags/1x1/lt-c1bd7e3d289ac9b0df06d47237780eaf4d30f01281ed50a7df9a22bc3a2489c5.svg","flags/4x3/lu.svg":"flags/4x3/lu-99e7b6adb3a9e0f867b17eb3b1f0f33db92fd27cfd7b651f62453f359bace22f.svg","flags/1x1/lu.svg":"flags/1x1/lu-ab544445f16afa450549288ac86c2cc9a458a9d7747b3a89d5ecef7db9c83ce7.svg","flags/4x3/lv.svg":"flags/4x3/lv-f8844d50b89f0369f73d580d3676553e7e55dd8ab2460e592a29a530d9bed886.svg","flags/1x1/lv.svg":"flags/1x1/lv-baeced49dd4249e36a25b0f23a5c601a69e9dee3137627cd4450194b85a99dd4.svg","flags/4x3/ly.svg":"flags/4x3/ly-03209121483967f9d74849fb9261de23e9ff2e02c4e40b29f1cda0631b8a5fae.svg","flags/1x1/ly.svg":"flags/1x1/ly-1e6e070aaa4bfc97a5a446a39bf746ab3c4c81d9f62c975cab164e16de3a3ffe.svg","flags/4x3/ma.svg":"flags/4x3/ma-9a25cc7c2868fa45b251dd1b99a0be3b583df69732146142020fe9c6c0c95b63.svg","flags/1x1/ma.svg":"flags/1x1/ma-4f18b9c355b8b8bf0db69badb235a183dbd558deb6439bf03b4f18e56837a7f3.svg","flags/4x3/mc.svg":"flags/4x3/mc-b0c50599ea2a550680a6a867579930e0b47d3e05193a7294a26b7849a7ad35e2.svg","flags/1x1/mc.svg":"flags/1x1/mc-8f1fe6210338399d8791d91f39234b1a09acf2aa5e0387696048dc7068534a28.svg","flags/4x3/md.svg":"flags/4x3/md-8849eef7bdf916e962f7bb31af87c8d47aef33f9f4a2017b2ce55c4166e79643.svg","flags/1x1/md.svg":"flags/1x1/md-43f1bb4157545abe6e79215459efb548d913bbe7922078cd40cb722a4e19d9b4.svg","flags/4x3/me.svg":"flags/4x3/me-983d452d43cfb8d628bfc5c0cf4991c2ba3cf0e39e70aa5353cfd4e9ec3da62d.svg","flags/1x1/me.svg":"flags/1x1/me-104d6a96038ef06d3d8b89c9221996f3649b5b821139b11b2e07695b0f6fda2f.svg","flags/4x3/mf.svg":"flags/4x3/mf-31fb851bfcc2340d2fa43e86a099cc7becfc8e7f996a4d2ca56bd050e6537086.svg","flags/1x1/mf.svg":"flags/1x1/mf-fe20ce9bf911631d6e79edf21c8cff0716f2dc1ffded39515735444d9a66fa55.svg","flags/4x3/mg.svg":"flags/4x3/mg-5effe963e29f804a26f95dbbc9519add454a0fd9eb918ddfeb55e1e99a1a2701.svg","flags/1x1/mg.svg":"flags/1x1/mg-9e546cfb78810d9b25c814a84aadd6907880b8e0cdd2e4e30738b519e7c1ac91.svg","flags/4x3/mh.svg":"flags/4x3/mh-d8cfd123007dbb99aa700c335957926a6d5e877ab49680c79629a32716d7a782.svg","flags/1x1/mh.svg":"flags/1x1/mh-3fe03d4d063a4729fc8b68fd5e9d7d2eef6e65c4e82954c83f76b138cea2eb45.svg","flags/4x3/mk.svg":"flags/4x3/mk-6e8071d15f2ff125d30bf89d000dcb47db9545cf9b7ff04f1474650ec2f4d25c.svg","flags/1x1/mk.svg":"flags/1x1/mk-fdc9212f9f311cbface56b6587468a2e845111b697edc11b7edda9fcf100c1d5.svg","flags/4x3/ml.svg":"flags/4x3/ml-a730102e0c6f6362de9c10ef8da6cf7b123465d01a297e7a89808b01fa4771cd.svg","flags/1x1/ml.svg":"flags/1x1/ml-a661355da206b0cb7ac4c84b6cdf7e411fbca8fcb271ae999fa60d5c67578192.svg","flags/4x3/mm.svg":"flags/4x3/mm-6d0d207d662477110f2b863488088818d8400386358dcbc669a2d8c54d1bae16.svg","flags/1x1/mm.svg":"flags/1x1/mm-de7d46b6543343af61ba997045cb41a707bd0db1e7a5879971ca8fddcbdf9e99.svg","flags/4x3/mn.svg":"flags/4x3/mn-656eb51e88bfce82401e4080eb791ddf16d571cbba102cdd4316c5de4711ac65.svg","flags/1x1/mn.svg":"flags/1x1/mn-ad22cb2c195a7d8ca8e4174db011d5f58238ee25039b5b2da2649d8ca8b00123.svg","flags/4x3/mo.svg":"flags/4x3/mo-37a1088aa687af13951bc93886e3e51cb246eccfde1b56528f189327ea291792.svg","flags/1x1/mo.svg":"flags/1x1/mo-b463a1c37b69131d662e3fb2ae937583458824a09bcf68fc7ed2d7fd729138d1.svg","flags/4x3/mp.svg":"flags/4x3/mp-ecd12cadc358fdf293e856c0a3ffc09409123cabd3c7201225b2d21b59551e14.svg","flags/1x1/mp.svg":"flags/1x1/mp-d1f4ba10c1409e713253f1fbb107eeccbd4ec1a8f9036663f1ac1991aee53835.svg","flags/4x3/mq.svg":"flags/4x3/mq-b4e1b08a93c1364c79e6d61f95b16fca5b884da6e77835bc0e0adfff8ecc2d7f.svg","flags/1x1/mq.svg":"flags/1x1/mq-19cb6f7cb7354c3fd40e987c93a2d76329d34b2ed3873c3f25fe56802f251ea8.svg","flags/4x3/mr.svg":"flags/4x3/mr-9f64af3ed5c6d8d1f68b5cb09fd1aa9d28c3c95107e063f64a0ef95f0cb9429a.svg","flags/1x1/mr.svg":"flags/1x1/mr-0e79b7bcc669bb871d94021db2b78b162b9867c7eaf934d8f7a3025fd5903576.svg","flags/4x3/ms.svg":"flags/4x3/ms-32620dd70353777b2ee62951556976f398cd38ae359b5a8c97311a1dc61eb8bc.svg","flags/1x1/ms.svg":"flags/1x1/ms-4104d4f36cb5cf1c6de78e52e90bc3c5b8bfa262617b16a737673feb8c30a00c.svg","flags/4x3/mt.svg":"flags/4x3/mt-0c9819aa69b34b84c1ee43620922737122eb38f107be9864a0690ac66ef8aa64.svg","flags/1x1/mt.svg":"flags/1x1/mt-3c3fe71f2a2bf0d961fd145ad7e48ca1e9d3a05cce514354714ba4568503d106.svg","flags/4x3/mu.svg":"flags/4x3/mu-c78c23f1499756b9db762ae434ca354d1481447fa94c66bc10aca9443b399059.svg","flags/1x1/mu.svg":"flags/1x1/mu-91ebc79d0fa306127ea8b7a33f77d5b28f35c516ea91ff0468c7344dc838db69.svg","flags/4x3/mv.svg":"flags/4x3/mv-a17c947e17adae6aacef01a3e131c4150aa094911b53fbaead41783683e008eb.svg","flags/1x1/mv.svg":"flags/1x1/mv-d138e94d9d2ed093ef1425c1164493b780202f9a7f7937241a7b081b79ff8b01.svg","flags/4x3/mw.svg":"flags/4x3/mw-21f116afdf71df80e3c59084c6ba640814fa5389430328ff55c9403b5c239632.svg","flags/1x1/mw.svg":"flags/1x1/mw-5c2228d3f1cf1f9cf8cb158e813202981828c11e8caf117836fc57fa6bc1c788.svg","flags/4x3/mx.svg":"flags/4x3/mx-a235f9b16921590b7e78caa6f76339361356946eaf0046badd10732b4647c0b6.svg","flags/1x1/mx.svg":"flags/1x1/mx-cdab01ebcdccc020ca16e1355ef1fd18ca0043b501f399ca8edc48adfa8c7292.svg","flags/4x3/my.svg":"flags/4x3/my-0ed63574cf5f20c0663ab8cd1f700e150fb641fd0b93602ba013abbfaae5ee59.svg","flags/1x1/my.svg":"flags/1x1/my-5e8d31ef06ffc8af33a5616d760592ecd022c52afc8ba33c721f1e4989da0628.svg","flags/4x3/mz.svg":"flags/4x3/mz-752e2293917b1d2ece3f097104caeadf6a679054a779e9d3be8e49dc324bb88a.svg","flags/1x1/mz.svg":"flags/1x1/mz-300cba975ad43c962ceca0d266ded1fe3d21d6b4d701d657fb42b27268ea2964.svg","flags/4x3/na.svg":"flags/4x3/na-a0655a2e70751278e6a60d31e818f672864a6e68e8b3d3361b2fbb70fa9bfef8.svg","flags/1x1/na.svg":"flags/1x1/na-1ce089a189db5be15eb05df8155f9bd017b61fc1a497e5b3021ff2ca664e122d.svg","flags/4x3/nc.svg":"flags/4x3/nc-0c7171d91c44414ed69808611db588f1283ee7e34ea8a74a9a5101ba4b1cb305.svg","flags/1x1/nc.svg":"flags/1x1/nc-d3a1629f06dc3200af7669f2d895fce1908d2c1ca02d71e530bdfa6646a9516c.svg","flags/4x3/ne.svg":"flags/4x3/ne-2b61d30a6cb4554535538e3b753926853e8c629a494a347286b9731c803548e4.svg","flags/1x1/ne.svg":"flags/1x1/ne-9c5f798ccd7d3dd3771ae628b4a39dfb2a4578fefd2e006f3ce89c3e494d0cb1.svg","flags/4x3/nf.svg":"flags/4x3/nf-4e615baa83a8b4db3e39fe1d251ab913943d64e0cd320f251d619ab54e7512d3.svg","flags/1x1/nf.svg":"flags/1x1/nf-45403247c90050484813acf23c50f543779528e346317274373c3c24fd830103.svg","flags/4x3/ng.svg":"flags/4x3/ng-d52fd188be973f31dd34e5a0b3fed0de68fe736c8a41c6028d9c248c038c8641.svg","flags/1x1/ng.svg":"flags/1x1/ng-f22edcc5867554d69ecbe15add0fbbb1389631f3ced07a4f820065c7770c65f5.svg","flags/4x3/ni.svg":"flags/4x3/ni-2fbb883e46fbe3b2ecfed9dac004ceb546f25c77a84a5966eea224674aebc610.svg","flags/1x1/ni.svg":"flags/1x1/ni-214aed148b615c4846f842b47f99cf178ac62a96cf18c5dd6b23467184b56680.svg","flags/4x3/nl.svg":"flags/4x3/nl-4f0ecea529dd4c0099dd41a7801fa5ac44aa04cd872ca31e11efd58b5a813774.svg","flags/1x1/nl.svg":"flags/1x1/nl-9c8f60e638879d642487818975e58c61cd3102f0e68c360708243c076436ff68.svg","flags/4x3/no.svg":"flags/4x3/no-270f7ee9d1d2efa6abf16f693faba8586adae842d79d8aad9e3f37e96c27cbce.svg","flags/1x1/no.svg":"flags/1x1/no-7d377325e8c5ec4de0376e9f4c13463f183af637e6c443716f22020c7a313979.svg","flags/4x3/np.svg":"flags/4x3/np-69637ddb3a173c4522a71598278aa32462e1762e34dd99c9dc99a515433a6cf8.svg","flags/1x1/np.svg":"flags/1x1/np-44ead118cce3a1fcbb720cc8d6eab6ecb6b62292315f61ae5963a40262ee11d2.svg","flags/4x3/nr.svg":"flags/4x3/nr-0bd3c0ba7bbac4bd5985b838096eeebd67711d39065619ef092fa4bb55b22a6d.svg","flags/1x1/nr.svg":"flags/1x1/nr-63b9c44e5dd66a59895f52707dc24db5bd1eab6e535298d24e414c0f2dafcb3c.svg","flags/4x3/nu.svg":"flags/4x3/nu-259989e1eea0cbf6b41a33176a4c9c1eaa2e7ae6571ad80a324c6309bd5aa5fc.svg","flags/1x1/nu.svg":"flags/1x1/nu-1cb535708f64ed8b386a245e571e677e935009af92f2b214760a2832c1ee1b53.svg","flags/4x3/nz.svg":"flags/4x3/nz-90ceca2a683fbec395a91b77b0880cea99c3b2cbdb24caa5474925cbdcc3675e.svg","flags/1x1/nz.svg":"flags/1x1/nz-b0d78f165a72edd46599222a2ea5f6a91a8252975cb03e33c4ca08e389859aac.svg","flags/4x3/om.svg":"flags/4x3/om-aadcca7bc7ad318400097b84849dd64c4744306cd9b4f152fba34f2e84116965.svg","flags/1x1/om.svg":"flags/1x1/om-705e2bd2b2fc7d13c152aa06bfb9e6ee4ad8b299f8c06ca16adad0b18b2b18ed.svg","flags/4x3/pa.svg":"flags/4x3/pa-027e679bd65dcaa2c53145a14669c1e674a467a889ef702cbe2a260f7ca8ad38.svg","flags/1x1/pa.svg":"flags/1x1/pa-edeb4faeadaa286de7fdc667e25d38ad0cdbccaec5023182fed6a3c74e8b09eb.svg","flags/4x3/pe.svg":"flags/4x3/pe-7ec59842737c90d6ff543f1831fd69b51e1e7ee1b068c3ac6259cbf2c214d611.svg","flags/1x1/pe.svg":"flags/1x1/pe-97d1b8ed1d4ed5e5f0348a731ca4a3a4b9abc7d440447dc87a521f229f375ed3.svg","flags/4x3/pf.svg":"flags/4x3/pf-27955c73c5be4043c5b7ddf64c8f46d11c6648e3b1fc0efe028b8afea21a40e1.svg","flags/1x1/pf.svg":"flags/1x1/pf-83e3e1d36fba45e015c62f938e6d182029edc05ebfdc50bcb33860f36f96d73a.svg","flags/4x3/pg.svg":"flags/4x3/pg-c2fdd2551f9044c461eccfae2d7ba0a347a99143f6002b71a429942af0217897.svg","flags/1x1/pg.svg":"flags/1x1/pg-cf60257fa85f9270b1e9980e703435186110167f76c153bc460c10ee8b2d4b09.svg","flags/4x3/ph.svg":"flags/4x3/ph-bf3394850a6cec6a535420eabce263e7f8193413e4af1fb317c76da025388c1b.svg","flags/1x1/ph.svg":"flags/1x1/ph-006c3218effe4269252cb9638de82ea339eb2894951705c630533ceffa842169.svg","flags/4x3/pk.svg":"flags/4x3/pk-b64f6a32e5bb598f57cfe49c4899c2021f2d153653f3d92101e6e11b2158e500.svg","flags/1x1/pk.svg":"flags/1x1/pk-d2d58def913c9081c5eeeda5f0b6895068ec13c955694e359531e23422145e60.svg","flags/4x3/pl.svg":"flags/4x3/pl-f55a710991a94c2e6c2f9f1a7a4a36ebb84b24b7c9d9df4e1ffe86d61321fa6f.svg","flags/1x1/pl.svg":"flags/1x1/pl-fafb539259385f2b99df910cff085710a9b4d9706b74e4e0f8a6ef627615c4e7.svg","flags/4x3/pm.svg":"flags/4x3/pm-8f6338d2ae3e0e42adc9754720ca21ad4979095cf6d7467a8db5a5a1c3e0b2a5.svg","flags/1x1/pm.svg":"flags/1x1/pm-63029c6198dc42c404ec39807a99528b1d198eeeea6f9a1e309548242480140b.svg","flags/4x3/pn.svg":"flags/4x3/pn-4006c11ca83011c0dd60a13ac30b27da0578b9f1368bd8c6de5aab423f6662d8.svg","flags/1x1/pn.svg":"flags/1x1/pn-6c433f7f9cb79c6d5ed7bbeade8a495e3b26ca2604f4fd3995096109684ac5dd.svg","flags/4x3/pr.svg":"flags/4x3/pr-6287e1515fa80e2d05133ed93f14ca03a1be6909a9ef6c736fd60f9c9fe73132.svg","flags/1x1/pr.svg":"flags/1x1/pr-526985b3a6d2d6de577ed0ed92d0b49ce854667e3ff630304813fd5af15527cd.svg","flags/4x3/ps.svg":"flags/4x3/ps-31f50e1fcb44b9aa6e9ce4473c3085f744e70ea0fa1fd8d85787f4e7b0c4a69b.svg","flags/1x1/ps.svg":"flags/1x1/ps-c43918bc71bef71b24dd46e8cacc53e0df53e02dcce6199d06d11a4637f08a04.svg","flags/4x3/pt.svg":"flags/4x3/pt-9aab20caed714ee47fc408f017037aea94a649b3ba4d87e2da37870ee31e4f92.svg","flags/1x1/pt.svg":"flags/1x1/pt-a309869e5018c9690a65ebdf8a2d69d61f82772068a7920f9680ed0581ae5966.svg","flags/4x3/pw.svg":"flags/4x3/pw-9262037d114d0f61571c74f9a5455809709b43e6565443ae2667981eecb5f12a.svg","flags/1x1/pw.svg":"flags/1x1/pw-a6f42019653ae26d43c6e9b7bef83fc98cff8ec5e8d0c50ad7cb0a17d5e565a6.svg","flags/4x3/py.svg":"flags/4x3/py-5bc9e9f0dee94ae3d9bd80ae6fb1aac297dc81a1c592d0a73bc3383bce73af74.svg","flags/1x1/py.svg":"flags/1x1/py-182eff300f4507fd9399fb6310d1cd3b45adadd7924ad2814003c7111ec5c0de.svg","flags/4x3/qa.svg":"flags/4x3/qa-32c93970f8e521850eddfaf2a89dfff987f0ae3b0b73a253c301b61cf547cf9e.svg","flags/1x1/qa.svg":"flags/1x1/qa-182e4d8ace2607d0c02d3c29d65eb084af71092357006bc41cd601981ec3b81c.svg","flags/4x3/re.svg":"flags/4x3/re-8b2ea1f2727c266a2b80cb12a9b7195f6b656f521552b67893b6761a07f9bc92.svg","flags/1x1/re.svg":"flags/1x1/re-07eb7d855022bc678b47b0ce5fd05da5044d6dde86ad3697d4ae55c68ff447c1.svg","flags/4x3/ro.svg":"flags/4x3/ro-4ab797571e1d9eb326486f75654a4590fd33f20444f85b77ba0997eb6138c21f.svg","flags/1x1/ro.svg":"flags/1x1/ro-ddfcbaec04d11bf7f95abebd1d3a42b2862b1af8fca9b02764a6ed0e409a1d75.svg","flags/4x3/rs.svg":"flags/4x3/rs-dd8a52473ea40e23b393b5f4a30d1edd91865aab167f0c1835ae84b15dcce585.svg","flags/1x1/rs.svg":"flags/1x1/rs-42bf40209c92e4e7169daf29fbcb7253b2804eee7a463051529327f38851f865.svg","flags/4x3/ru.svg":"flags/4x3/ru-13f4525a4caad6e31afa523d2bc4a0c1e6377c0bef1bfd872682130d3f199d1d.svg","flags/1x1/ru.svg":"flags/1x1/ru-b9792a963faf667447e0456dba5be80a3b37c197a4284d1539a3433721d9e2fe.svg","flags/4x3/rw.svg":"flags/4x3/rw-bc38bcd6e19d2941839b253af6e863b13338cde1174874f9674471026c15e422.svg","flags/1x1/rw.svg":"flags/1x1/rw-456698123775b83d2b0fa1b9fe073f9ccdba0b6bf39a703b8979dcce158eb32c.svg","flags/4x3/sa.svg":"flags/4x3/sa-2b2fd6abb48415d5407c576c24a24fbd80af5877ef06cf2d026452f6c67f5f4d.svg","flags/1x1/sa.svg":"flags/1x1/sa-d9ebc73e7957f86604164dd5054fb32601ad14d7dfd4bfe73da5bdd10bb2f8ae.svg","flags/4x3/sb.svg":"flags/4x3/sb-37761927039d0a37ba0995c59fd31bbe36c8a0ca161e5b72b8131e3659f8dddf.svg","flags/1x1/sb.svg":"flags/1x1/sb-bedbf8464cd82f391bfe6178c63055b650d0cf3aee60c37fa79a586f95783b79.svg","flags/4x3/sc.svg":"flags/4x3/sc-f6a2f8f37be93f07600b491b52cb58d80d74b92d8ace0af313f4ce081b0d1345.svg","flags/1x1/sc.svg":"flags/1x1/sc-5dcd01b98c34460c9624280fb5047811fbae7d976620cd0a70ad4263a9085b60.svg","flags/4x3/sd.svg":"flags/4x3/sd-cc9cf97e8a37622b9e1bad28811d46c4471595afa448dc055e0e3aae7687fe4b.svg","flags/1x1/sd.svg":"flags/1x1/sd-1f5d13f9780085acbaad13d959b1918c796ba7b0450954b15d145e87cebe045c.svg","flags/4x3/se.svg":"flags/4x3/se-84b06bcd5bd90ea8dd6d1c3c8d2799a843c47b0256ce098aef75414964618286.svg","flags/1x1/se.svg":"flags/1x1/se-39f128686652cf914f8601110fcc9ac879bca204407013b93aff4ca4fb2ed9bc.svg","flags/4x3/sg.svg":"flags/4x3/sg-a82acd90077e76318ddb0be96999d9695b9a9f4627e8a0f341d3987a62747dcc.svg","flags/1x1/sg.svg":"flags/1x1/sg-c22e093634568aae249bf35f9ddcaa6796b5f27d76c39ff5336abf7f1b8a47d4.svg","flags/4x3/sh.svg":"flags/4x3/sh-57470d9a75955f0fac605a94e853bab524c7461a4c025e809fb09db762ebe46f.svg","flags/1x1/sh.svg":"flags/1x1/sh-8d06a0fff61e51eb65357d138e00736545835b8649aa2694152f4cdc9f941c16.svg","flags/4x3/si.svg":"flags/4x3/si-289d6417f154323e7922df09ffc0f49ded31548c7ee8020c39cb85724ffbcea8.svg","flags/1x1/si.svg":"flags/1x1/si-ca40a5f4f38119d6f52ffd3ddb36af95951a2aa1fadcd897f5bc1641bb2e0051.svg","flags/4x3/sj.svg":"flags/4x3/sj-67d4cdd268d0c0cd93fc561b506cb5646cb508385c93ed350d11f94aa1c83833.svg","flags/1x1/sj.svg":"flags/1x1/sj-f7c489607033138039612d6abe7f4b0b4b6dada5cac75d78204f404a0d292b1c.svg","flags/4x3/sk.svg":"flags/4x3/sk-a0bdbb7f5d6998ffe9fcbc80bbdf0e6cff3629740d2ce1b8d61025e0a8b322b5.svg","flags/1x1/sk.svg":"flags/1x1/sk-a82a813b2d81af9be1aa775f22b2c2457d11e870e072d7e23957a11d0878faed.svg","flags/4x3/sl.svg":"flags/4x3/sl-be265bed24cfe0b25778201f251e52e4e721e3d319795875913805d1aea84ebb.svg","flags/1x1/sl.svg":"flags/1x1/sl-cb8bccbaa21957f006ed4ae0144da81c999e93bd8014023b16b500fdcdc397d3.svg","flags/4x3/sm.svg":"flags/4x3/sm-d7818df3f8f2d5dbed27dc5a0a80b1e41cdcd6130eeff221da58f0321e925f27.svg","flags/1x1/sm.svg":"flags/1x1/sm-6f87660dcac925bbdb036c79a0e20d3b208215d327be4c4764ae1069d6464efd.svg","flags/4x3/sn.svg":"flags/4x3/sn-b131b17a374bcfbd00d442d282fa52f0e4e0e448cda1cdfaac25a95ff56443c0.svg","flags/1x1/sn.svg":"flags/1x1/sn-d180d3ce9846966dee6a3d9433ede7d24801dc4311636aabd470ec5b8765d772.svg","flags/4x3/so.svg":"flags/4x3/so-3b5b77b371299478144a94b60c99524fb6b99bfedb3dcc976ab70185e07f399e.svg","flags/1x1/so.svg":"flags/1x1/so-50aa941f2d2954285ef9e5ac260cdd264a73cf2e4b0c627677f04141fff2afd3.svg","flags/4x3/sr.svg":"flags/4x3/sr-94d0f0aefcbdea8d7ba35648eda5037e99bf4126723ce36416582ea43b08d3e2.svg","flags/1x1/sr.svg":"flags/1x1/sr-3944d683068d437471725d22fd71ccbe6a63ae307ff9775690417d3bf262cf82.svg","flags/4x3/ss.svg":"flags/4x3/ss-f391e5002cbce83f97f7d1a11c284fa2e36a7d6dc734757d733656801ab17d0a.svg","flags/1x1/ss.svg":"flags/1x1/ss-853bd9f713d2f6b1fe540a82e8bf4754912da21575b3fe756b8741767f318f7a.svg","flags/4x3/st.svg":"flags/4x3/st-b52bb48a2c0800f5cb4b07bdd93c3908f77bcb6800be883ebf943bbd3d99d42c.svg","flags/1x1/st.svg":"flags/1x1/st-d8b5b1c8b9fe947086a4d277d2ac5d6b9cff188dfd37bda66c8bf5e02c5facc8.svg","flags/4x3/sv.svg":"flags/4x3/sv-6d02d63c7f04c9388e98f892cc43d8daa2110fc84242758d5627fcd247bfd09b.svg","flags/1x1/sv.svg":"flags/1x1/sv-fb4c8d7eb98396a93c5b9c37195d70e809e0d71d8b8f9316e842121f95bb82ea.svg","flags/4x3/sx.svg":"flags/4x3/sx-fb6a7b1cbc5b29eeeb39a5aec64ef7aad432c37bbe848d29955a3786b9763224.svg","flags/1x1/sx.svg":"flags/1x1/sx-a37b124212f8530b921aef7657cfb35c2895a731c7a06f333faee4c93f32806a.svg","flags/4x3/sy.svg":"flags/4x3/sy-e35f8d88c864ed4f38edb2f9f96d5bd69f6df078b50515b8c5467bf6b1689f50.svg","flags/1x1/sy.svg":"flags/1x1/sy-5d537bd5b42b58f6e8a7e33fbe5942a16126abb639edf9cb58b88938c57ebaa9.svg","flags/4x3/sz.svg":"flags/4x3/sz-c65ae592e943217787848364bdb4c57335869f4626ce705adabdc2620669c1c6.svg","flags/1x1/sz.svg":"flags/1x1/sz-dd3d1c65bdf09317553f205e588e3dc7336acec1cb9315bfbe0f5bd8ca5bba3f.svg","flags/4x3/tc.svg":"flags/4x3/tc-594b6cc87040836c6d6777afb5833d565d3e5e75f404350a51443ec4588a1ccb.svg","flags/1x1/tc.svg":"flags/1x1/tc-34a37006252eea340488220585c31d047b57e3e7934c77180d930972aaceadc3.svg","flags/4x3/td.svg":"flags/4x3/td-b67a1978e3badb895ff640c80bb6c0e33eac354220c08cf3fc93d62bf5d685a3.svg","flags/1x1/td.svg":"flags/1x1/td-556b3a7991c17010cb7e1ff23c4edcc2dcdb8c406a128d407fd165ea8a19d311.svg","flags/4x3/tf.svg":"flags/4x3/tf-35cd83351521f3022a43e01f0c40f34663a66ac1e92045979f31d3fd65c16d02.svg","flags/1x1/tf.svg":"flags/1x1/tf-485e71f61ff577735dbc4ba1025515c22a83c48ee7f3a2ed49804766c35f6ea5.svg","flags/4x3/tg.svg":"flags/4x3/tg-24b25f4c2213fe35e5f5586d7ab23abf0c25ad2049708cd52ba72e1ec7b754ff.svg","flags/1x1/tg.svg":"flags/1x1/tg-05f3d98392a5ec3e4aecf8f629d3d03f05ac55abb7d9d84187d599acfe271374.svg","flags/4x3/th.svg":"flags/4x3/th-cc936bacd84dddd15454ef06bc64e357f83854af34692fc37363272d61f637d4.svg","flags/1x1/th.svg":"flags/1x1/th-de82cbd770db2be53a8e3d59d86e2b748a5d3f96eb8584f7b9364cefbd06a172.svg","flags/4x3/tj.svg":"flags/4x3/tj-b90bf3e2dd63265d55b67962b160df65f021c42b6ea304e2943c10b9e2a8749d.svg","flags/1x1/tj.svg":"flags/1x1/tj-5f6571e74b1f8720f9ecc2d3aa2098ca45d2e7ad6602b2a57c206384719b9f36.svg","flags/4x3/tk.svg":"flags/4x3/tk-602520b29b909c96baea17a38eb654d6c6fbc7088f46a0cb8d8fe34ff92e3cb8.svg","flags/1x1/tk.svg":"flags/1x1/tk-fe1dc8aaa0643a45a74ecec8aec09f0fe2207d104bb3c28c0b84405f1275aeba.svg","flags/4x3/tl.svg":"flags/4x3/tl-ebdb862aa5ae5de1a72242571deaa70bfb222f488a93b70e304f2075b474d54b.svg","flags/1x1/tl.svg":"flags/1x1/tl-485f02183bdb192ba3ce6e5f076e184112739f883ae0a8fde33c454377b848d6.svg","flags/4x3/tm.svg":"flags/4x3/tm-5ddb4128bf0becd7c60413d5418027f5f01ca4bc72561d54b94febfee7a5a24b.svg","flags/1x1/tm.svg":"flags/1x1/tm-3521ad569a4095aa8d4166d5d9094fccfdbb3ea411207ad685b6dd5814ef3392.svg","flags/4x3/tn.svg":"flags/4x3/tn-ca27eb50d88b11d20b5b09e2bbecb7753267222489920c526608e5d2acd22d79.svg","flags/1x1/tn.svg":"flags/1x1/tn-222c6cd4742c558f48ebcacb47ea334057642fffa3456a1c75e0fad9e728d09b.svg","flags/4x3/to.svg":"flags/4x3/to-c9c509fc24f591fbe52bbf732c44291384c787796e1fc9c703a973587c3f8ad1.svg","flags/1x1/to.svg":"flags/1x1/to-cf26dfb44b56b915b2f11896355cb778b938ed54423311d69d7cda9626887dda.svg","flags/4x3/tr.svg":"flags/4x3/tr-c40f697070cf8d8358785b9203d1c8f438976e3cd644a87d9ee16fa9960deaa4.svg","flags/1x1/tr.svg":"flags/1x1/tr-627dcf91a1e5153c045e33a3459b5d56002530fddd3fc53927f4d0fb7ea004a5.svg","flags/4x3/tt.svg":"flags/4x3/tt-04786ffedbde2c96a30ad1cbf4db000848f14bd700324651fc88364e5f3c2fd0.svg","flags/1x1/tt.svg":"flags/1x1/tt-6a3c73bfa7782366d95e673d847ef8f84c0475b364d359def1efd264297bac30.svg","flags/4x3/tv.svg":"flags/4x3/tv-20b56e7c0a2fbaa2a0b7b1bd87afc6368440f175fb3a0589de5e34e99d163fd7.svg","flags/1x1/tv.svg":"flags/1x1/tv-8bce1d7bde2e20dcc473ed3a33c66e4bedcf1acf2d2fff6d54353a480b8cafbc.svg","flags/4x3/tw.svg":"flags/4x3/tw-36070ac0a15ab1f4811478da62e7678756a9aa266b141ed0549aba1c0e04333a.svg","flags/1x1/tw.svg":"flags/1x1/tw-fd7a0db2f3808842ca99176f097356fe9e6f3c120d6aa9e8c4a9c2dd4c3943ba.svg","flags/4x3/tz.svg":"flags/4x3/tz-51ad7d69f059075df61b9226468af0d78642af4ad34a7540f64c5bea82e803d7.svg","flags/1x1/tz.svg":"flags/1x1/tz-0703f29a7ae02a9a1753cb1726dd2934d75ed3a12e8d63faa9fa866e1fe61440.svg","flags/4x3/ua.svg":"flags/4x3/ua-7f7db03c3b492aaacd11b0abac70d543a7c0ec5265a36d529bbb80a7c432d81a.svg","flags/1x1/ua.svg":"flags/1x1/ua-25192fa80f120edb1dd1c4757fd7b79ef38f5e1729238f4135003e6a1501bf28.svg","flags/4x3/ug.svg":"flags/4x3/ug-7635df53eafdf411be0809df835bfbcffd61badd6c4df3db0909c8b3188015a0.svg","flags/1x1/ug.svg":"flags/1x1/ug-537f34f64e723fbe7cb7902ea0e61303f1ada79214197efc39ebe2c52ce24186.svg","flags/4x3/um.svg":"flags/4x3/um-a0ae80e34bbf94677dd6052ea87cc0090aba747dab5440e5ca6e231f7f07c96d.svg","flags/1x1/um.svg":"flags/1x1/um-3f1bc09babe7fdcf32518bb49d1aac3a66d0204f955eacca291c58d4f4ef895a.svg","flags/4x3/us.svg":"flags/4x3/us-aefd8f7e57d11f7b0416d01d9c665ab3848b10af849f35a4d772d58d24d83329.svg","flags/1x1/us.svg":"flags/1x1/us-87af45be9346e8c820312976abe332ee11f8931e29fa361328d28660a711b1e2.svg","flags/4x3/uy.svg":"flags/4x3/uy-9f636c8283abf56cc930746fd427c1d1644dcf8736c537629df13f760da96ebc.svg","flags/1x1/uy.svg":"flags/1x1/uy-e216b762a93ec55bf9b4ae3d35b7febe0b192a12246fd66c45139ce77fb2095e.svg","flags/4x3/uz.svg":"flags/4x3/uz-697d596705372323beddccb3626d1ce405b36249315c6b006ff1529e24909ceb.svg","flags/1x1/uz.svg":"flags/1x1/uz-aa34cbe4f6f0e4b5d890975578d28cc9b1e88ebd503d3bdca693748eb29b3353.svg","flags/4x3/va.svg":"flags/4x3/va-d24d3c5bee108c396997c3d5b2bd2273433752d8c222eb531650e51551a4afd0.svg","flags/1x1/va.svg":"flags/1x1/va-01160c1bffda12f0b94554ba0c50162a88da807943617334bd4c57a030985e95.svg","flags/4x3/vc.svg":"flags/4x3/vc-ddf979bee2889414e5a05ac55f39a9c93f34e0aff0d35f007605049a2d8b5afb.svg","flags/1x1/vc.svg":"flags/1x1/vc-ac776e16dec19ff2e2d9238f541dae5d977282b451a83ab3d4122efed2392be9.svg","flags/4x3/ve.svg":"flags/4x3/ve-e23abd006cc75a8c4f9ec1cb122b46f9b52e26c5606532d2c868277d4ccd523b.svg","flags/1x1/ve.svg":"flags/1x1/ve-1480713f28719e0a83da2c5f1333407dbfa5bcc0de8c9ba718fcf47273ee95ef.svg","flags/4x3/vg.svg":"flags/4x3/vg-7f8f24a4d6995e4dd39e3d9098dad5e14649821fa12ffc200edf0a586285ee15.svg","flags/1x1/vg.svg":"flags/1x1/vg-b464b6a78e46c29df9e4bdadc2646208f11c59168706456075f970552a24efa8.svg","flags/4x3/vi.svg":"flags/4x3/vi-58311325a293b046044976d899f288ce0fbe9bfd705a23947a9b38d7991983d7.svg","flags/1x1/vi.svg":"flags/1x1/vi-1c132d2cff66cdbdb7b6acf504bb0cd9d7579595d80c3fa6604ff24ca7a0184d.svg","flags/4x3/vn.svg":"flags/4x3/vn-a918d3c9cdc368b1d2ff9614d58cbcd1d43b725889b0ba18f5d4e693071e389a.svg","flags/1x1/vn.svg":"flags/1x1/vn-895e428ae3d98c99dbb02088cf8ef040bfb031df6f16c3c8fc3678505d869791.svg","flags/4x3/vu.svg":"flags/4x3/vu-2c286c778a7bed03cb603ab24b68dc91868f4f054cf4f851bdd17aa16731571c.svg","flags/1x1/vu.svg":"flags/1x1/vu-51ef23121e2641ebeeac50d31c4e52b7d00d3ab1bc9fc0ad95ea86fd3631975a.svg","flags/4x3/wf.svg":"flags/4x3/wf-f7e9ac5edac196ac32d7bafa04b5c0d924b89e9d7e4f3535a6a26c6c1523639c.svg","flags/1x1/wf.svg":"flags/1x1/wf-95a920a79aa32d92f8a362321aae4230e17025ac04d976593f4423d0c37c1aee.svg","flags/4x3/ws.svg":"flags/4x3/ws-efc6505a802a3fa2018bc102fc2e11db8c738464c619381b6edc32d0a89341a3.svg","flags/1x1/ws.svg":"flags/1x1/ws-e3afb81c037c814620027bf61ac5e266683cab7ba5796ecf10b64c110cfcb932.svg","flags/4x3/ye.svg":"flags/4x3/ye-fd88856e70d66b01b4f0f608936a61cf3b1d9dad40a2932fc5da4d01f72a447b.svg","flags/1x1/ye.svg":"flags/1x1/ye-0c0e32330871e6d83af54affb7dadbbe736f9799068508211fbae54db9bbdcc6.svg","flags/4x3/yt.svg":"flags/4x3/yt-2eef17b543424082d9f9b42a67e84c20b52e7f7eae8c4326d60711158da51d5b.svg","flags/1x1/yt.svg":"flags/1x1/yt-911da8075337fd8f75ecc8a338c294cb771c6b9a08576f96c9de1437888cd2a7.svg","flags/4x3/za.svg":"flags/4x3/za-45991a2aee307198510e56bf92523070aac4241cafe6c3ddb8f89b20a61d6371.svg","flags/1x1/za.svg":"flags/1x1/za-bc09a89b29311ea7e582ef60bf4e18aff7c29de6fbefe309463ca765723a0ce8.svg","flags/4x3/zm.svg":"flags/4x3/zm-07c0f30d86e66d0cad9d66cd9c9384d9cce1844f159d245deff6717101fe49c2.svg","flags/1x1/zm.svg":"flags/1x1/zm-fc5bce3834c71fe36617ea5f57f0bd1dcf3880a7c6aa515dcf92ae067f796241.svg","flags/4x3/zw.svg":"flags/4x3/zw-5217c74f14d9fdda244b69c5982bbabee052ac0f1cc0704926e8b1e621e50f9a.svg","flags/1x1/zw.svg":"flags/1x1/zw-a33b191c631709b9e1d85e06f5b15535fb544d4668c8bef865ede2a0b6a88ed9.svg","flags/4x3/es-ct.svg":"flags/4x3/es-ct-bcbb454a50c9a647efd43dcf041445f15e8dd70654bde530bf62401d4fb7738d.svg","flags/1x1/es-ct.svg":"flags/1x1/es-ct-7f13eb2b2f5c11dccd7043286bed7540d4dad4b1a8367b0aca1b8405a351b2ef.svg","flags/4x3/eu.svg":"flags/4x3/eu-5f129db64306353251b78f998d531d2f1019404cfa890ae63ed70dc316c7f240.svg","flags/1x1/eu.svg":"flags/1x1/eu-ec59ac8daf2a63ea8e299ad63a208445d68a96affe6a10a7328acb6799d44127.svg","flags/4x3/gb-eng.svg":"flags/4x3/gb-eng-1895f4e35ae299f5d869da2462ffcf98df4b08dcddc531c8f175e49720001a14.svg","flags/1x1/gb-eng.svg":"flags/1x1/gb-eng-d11afb87f40f35acda435a886ea044bd5e0b6f363ba0c7319f1d0181551fecf3.svg","flags/4x3/gb-nir.svg":"flags/4x3/gb-nir-b280f09c787f495c1074376cd67537b40216f672917e7d204bb12b8e7c72afaf.svg","flags/1x1/gb-nir.svg":"flags/1x1/gb-nir-2e516e72e0e8e244ef430e6608322f8c4fb276807ab033279b2a6570dd68fd41.svg","flags/4x3/gb-sct.svg":"flags/4x3/gb-sct-1b9e407802ae901cf8da740c382ec2b19821837d76271a73346e0c63c2244506.svg","flags/1x1/gb-sct.svg":"flags/1x1/gb-sct-d01e8a06a340e30ce52e8a3aba7ca6207afb96fdb238a815cc6cb92df8fa5df3.svg","flags/4x3/gb-wls.svg":"flags/4x3/gb-wls-5232b3e376a19866cddec8225cba242783b2a48063811957f1ce5a2c347c5bc9.svg","flags/1x1/gb-wls.svg":"flags/1x1/gb-wls-126615bc3597fda1ca4ee931ef24f6c2cf2547998c06db9c1ded69fe66c479e9.svg","flags/4x3/un.svg":"flags/4x3/un-31dece22ae18c3e01e86648ef3ef45f2f5b3d9d28a1e2bbbcdb1d87c37af55af.svg","flags/1x1/un.svg":"flags/1x1/un-455b5f3173ca9ac64f2135fac4ead7217d7fbe07551d0d2cc60216f83208f798.svg","leaflet/dist/images/layers.png":"leaflet/dist/images/layers-1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6.png","leaflet/dist/images/layers-2x.png":"leaflet/dist/images/layers-2x-066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf.png","leaflet/dist/images/marker-icon.png":"leaflet/dist/images/marker-icon-574c3a5cca85f4114085b6841596d62f00d7c892c7b03f28cbfa301deb1dc437.png","markers-soft.png":"markers-soft-e78784e4ed70aaffddd73c315fab590233cc4e7b72388d7dd47a14796fc7c739.png","markers-shadow.png":"markers-shadow-8703a2262710f5e3d29e65d2acdf90d6512e159e119d27b8234731d8a6208a20.png","markers-soft@2x.png":"markers-soft@2x-c1e77253a8bfbe30cec24885d7046f443b76ebb66f4c961f77083b03f4a5cbaf.png","markers-shadow@2x.png":"markers-shadow@2x-b21a536be27313fb504f69f5899ff0b1245b276571769ac08d6c32c35676e47a.png","tinymce/langs/fr_FR.js":"tinymce/langs/fr_FR-6aba16704f73dd83662a78ca3360f3d98b1f1ed80a67560313554446915611a5.js","markers-matte.png":"markers-matte-497826545a90e09a240504d14530eba45823b19fd44175e09e27c47cd822ddb9.png","markers-matte@2x.png":"markers-matte@2x-948fc8c4426f04f60964ed20394247f45b0b60e575d02398b9b6810e7a29a823.png","markers-plain.png":"markers-plain-cf233423aa44e75ac0031e77b8ba571cd3331010517e1197e63fb7b06856c1ff.png","leaflet/dist/images/marker-icon-2x.png":"leaflet/dist/images/marker-icon-2x-00179c4c1ee830d3a108412ae0d294f55776cfeb085c60129a39aa6fc4ae2528.png","leaflet/dist/images/marker-shadow.png":"leaflet/dist/images/marker-shadow-264f5c640339f042dd729062cfc04c17f8ea0f29882b538e3848ed8f10edb4da.png","jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png":"jquery-ui/ui-bg_flat_0_aaaaaa_40x100-ae65a7ae22c4c23115948fdeb5c05c9137dbd13ca2d426b3c4c3c4183451e410.png","jquery-ui/ui-icons_444444_256x240.png":"jquery-ui/ui-icons_444444_256x240-31d988765b4e6f56553c29588c500381dc3e6f0aa2980c8212202e5644aefd5d.png","jquery-ui/ui-icons_555555_256x240.png":"jquery-ui/ui-icons_555555_256x240-32175261daee76c82bb0edf0eea16a56421866fbc31e94f3c1d570aa114502f5.png","jquery-ui/ui-icons_777620_256x240.png":"jquery-ui/ui-icons_777620_256x240-0b020fc6e696d88d296e7bb1f61f1eb2ad827848e2c7382a4c3e0999e702dd9b.png","jquery-ui/ui-icons_777777_256x240.png":"jquery-ui/ui-icons_777777_256x240-faf32007ae120c302213557626e660dd10e711c5dd4f1113d35f26dc05b78d2f.png","jquery-ui/ui-icons_cc0000_256x240.png":"jquery-ui/ui-icons_cc0000_256x240-40985a64b4d5dd213fba27fcd862a1bd1b337a97674f6ff0b9ec20abcee4bc69.png","jquery-ui/ui-icons_ffffff_256x240.png":"jquery-ui/ui-icons_ffffff_256x240-350df1b7131037de20e83c5c0f3a41a770d2ac48b5762ea772b3f4a8a7b9d47a.png","tinymce/preinit.js":"tinymce/preinit-84328a53e798df12f891eb49871773fd9f925439c8630e9e22423a82ef9e6f89.js","tinymce/rails.js":"tinymce/rails-bf7fd5c952f25481010758dde6a2681498074f9509230f601b317356a6a54fca.js","tinymce/tinymce.js":"tinymce/tinymce-56cf2f2424cb80d80288b9207d6d01dffdcf3b6849e1414c1f7df44b8c95db86.js","tinymce/jquery.tinymce.js":"tinymce/jquery.tinymce-05402ca7d9e16d0a48a6259f8c005507d800186c5187f8cab94e79803c657535.js","tinymce/langs/readme.md":"tinymce/langs/readme-5a8b6a04d57b5c88e3fb7f2a870b8e2d3a48ec03ce6474206c41df78c155b2de.md","tinymce/license.txt":"tinymce/license-47a9dcd2574891a5a465112fd9dfcebcc7e61844edec27fa936a64642008fe66.txt","tinymce/plugins/advlist/plugin.js":"tinymce/plugins/advlist/plugin-b7c8cf80403d2ccef198eece952f4426ca2dbc41bd3797796a75f984a9382ade.js","tinymce/plugins/anchor/plugin.js":"tinymce/plugins/anchor/plugin-0e1e67988d427784f73513db28a206eb47a3ef546aa87882a80975a16111a33a.js","tinymce/plugins/autolink/plugin.js":"tinymce/plugins/autolink/plugin-2e8a38a913070f4b3fb0252a5b5625057b8ee9f6fc529d65d3003328d112d5d8.js","tinymce/plugins/autoresize/plugin.js":"tinymce/plugins/autoresize/plugin-2adac0d857ae16f93c7ca4f92e36e76f4bbf885cb9a72755af78889627ed8738.js","tinymce/plugins/autosave/plugin.js":"tinymce/plugins/autosave/plugin-a6960dd7eb9a053b0ce876b2eb946f8bf8fc429de45466e73d17129213229674.js","tinymce/plugins/bbcode/plugin.js":"tinymce/plugins/bbcode/plugin-1a9fd62a2514ce8e15e8a3a99473674c1042c23adb359b35523931407910c7aa.js","tinymce/plugins/charmap/plugin.js":"tinymce/plugins/charmap/plugin-e68609a6c6f050af409dc34cba1eaf97b45dc4219500de60bb3ed63ea49279a0.js","tinymce/plugins/code/plugin.js":"tinymce/plugins/code/plugin-32c177297fd26a1ceaa79d4b0c10ff5c3b332141dce46b97931e3228daa9bf1a.js","tinymce/plugins/codesample/plugin.js":"tinymce/plugins/codesample/plugin-d495c33177247da2e3845e4d849182792be7b0347e8707dd133db053727f86e9.js","tinymce/plugins/colorpicker/plugin.js":"tinymce/plugins/colorpicker/plugin-3270f40522357ea68191288332b98cbbdafe950a758b5f1514ad8890ba68619f.js","tinymce/plugins/contextmenu/plugin.js":"tinymce/plugins/contextmenu/plugin-b528042e89738439d9d4b9d008a3a75284ef5233cd15aaa29c7e1ce6d48fb12e.js","tinymce/plugins/directionality/plugin.js":"tinymce/plugins/directionality/plugin-5004dc6b7d90139d4b1cf32d788845a48efc7055adb3aa25993219dd4df2fe5c.js","tinymce/plugins/emoticons/js/emojis.js":"tinymce/plugins/emoticons/js/emojis-c6f728975b5c86aca22f396025edefe6107b0dd4d95f5ef80daef569b545bce8.js","tinymce/plugins/emoticons/plugin.js":"tinymce/plugins/emoticons/plugin-f4db839825ea5c884c78a8c289494544ac0fd28a14506f0d3cbb7362a9e9db77.js","tinymce/plugins/fullpage/plugin.js":"tinymce/plugins/fullpage/plugin-7040866d45dd50402f2871efcfb289ec8ca80b8699f1461c721b0b20bca76051.js","tinymce/plugins/fullscreen/plugin.js":"tinymce/plugins/fullscreen/plugin-f548bdf0cbc2fd41c3c32938629a1b021e19680bac7869c274be5f3615eccfe7.js","tinymce/plugins/help/plugin.js":"tinymce/plugins/help/plugin-366b05965f3d6cfddaba02c6784e0f377497beda0f28cc8cd840510fd8b657f4.js","tinymce/plugins/hr/plugin.js":"tinymce/plugins/hr/plugin-0e5548067a2ab0ad967e296104249f6b5d24a16b80befcdd3888c17b1a0e5624.js","tinymce/plugins/image/plugin.js":"tinymce/plugins/image/plugin-53dce3c317e386c1989a5d82ec151d440f9ffc32a643dc9fba76ae2b036300c9.js","tinymce/plugins/imagetools/plugin.js":"tinymce/plugins/imagetools/plugin-49936c4208b2d6fbb340d11c56fa2a146d14c770e4cb39760a11099fea5c7aaa.js","tinymce/plugins/importcss/plugin.js":"tinymce/plugins/importcss/plugin-30cba659cc747bccf69602963b3c2b83e00c26e65f2b63e23eba5be5f8af5452.js","tinymce/plugins/insertdatetime/plugin.js":"tinymce/plugins/insertdatetime/plugin-8559e2bda84f040abc77afc6610c0b61567fe174dcf2079b5aff82513c5ebe96.js","tinymce/plugins/legacyoutput/plugin.js":"tinymce/plugins/legacyoutput/plugin-acfac6647afd7c0a7c720aea06b9a74a6580840858fe00327a311a6418d3dae3.js","tinymce/plugins/link/plugin.js":"tinymce/plugins/link/plugin-93a36e0f077d895707d9885a76c26e5b08e5acfab9f3d52cdd1ccc5d89404f1e.js","tinymce/plugins/lists/plugin.js":"tinymce/plugins/lists/plugin-354eba74c0107c7f347aaab0ac206e01b8e0503d00f28cc0cc55f6c04f901f9e.js","tinymce/plugins/media/plugin.js":"tinymce/plugins/media/plugin-ab1015dd22dff3d1edcc2d04b54f39b3f7ff7f7d783c0880b5edf6de58d78937.js","tinymce/plugins/nonbreaking/plugin.js":"tinymce/plugins/nonbreaking/plugin-6039d3b3f9c68a3b29a6bb476760fa62da1d941e38ef8cb91e61c4aaa9456f98.js","tinymce/plugins/noneditable/plugin.js":"tinymce/plugins/noneditable/plugin-3cb8e1ac660348b0453dca0e8549a9325dca0cf259adb96802f37e83fb8d17be.js","tinymce/plugins/pagebreak/plugin.js":"tinymce/plugins/pagebreak/plugin-9e005e9e9abb08da742141d002238561c30dcd15549168e17c690f2c7c7a9dd3.js","tinymce/plugins/paste/plugin.js":"tinymce/plugins/paste/plugin-437f540601d04f07cb4c2434fdf377be3ac9634b180a878c2f2987f3ad897afc.js","tinymce/plugins/preview/plugin.js":"tinymce/plugins/preview/plugin-36ce30c549b23aed9dd151603a23aafab512529d586067e34974877992c79eed.js","tinymce/plugins/print/plugin.js":"tinymce/plugins/print/plugin-4a91981252ff653a07dd12936abfb0b0c4191e33d85f5c5d5f7e8e73581b6a57.js","tinymce/plugins/quickbars/plugin.js":"tinymce/plugins/quickbars/plugin-54bba909c7a5b3f9086cec22e918e378945dfb855e4041a85c9e0fb00faaa510.js","tinymce/plugins/save/plugin.js":"tinymce/plugins/save/plugin-0fd05e2ed11aac190c5d2a0ac32aa675d0bea06b519301d89151aaaa7b124674.js","tinymce/plugins/searchreplace/plugin.js":"tinymce/plugins/searchreplace/plugin-4bb6490f6586b4c50a56757a69be8e6577544d5353881a02621e2200b54e8a18.js","tinymce/plugins/spellchecker/plugin.js":"tinymce/plugins/spellchecker/plugin-8fcd863cbf64e3cc62fe3fc1a4bfe417f8401b1d204d91d1c9da880c29a52162.js","tinymce/plugins/tabfocus/plugin.js":"tinymce/plugins/tabfocus/plugin-cbc31c55658d581cc1e0130e5bae26fb27f10e7f0c53879845d6295ffb27fefa.js","tinymce/plugins/table/plugin.js":"tinymce/plugins/table/plugin-b11c6cd37f6d5badf46a9d96e452118b81881beb07fe41d2c0a3f7b405902234.js","tinymce/plugins/template/plugin.js":"tinymce/plugins/template/plugin-62d74415b497183892c093351d57ee4fe36938be5b0a84360925501efede022a.js","tinymce/plugins/textcolor/plugin.js":"tinymce/plugins/textcolor/plugin-77c1248e72fe32cf181c36a070147484ee4560710d5f617a4670d65d11202207.js","tinymce/plugins/textpattern/plugin.js":"tinymce/plugins/textpattern/plugin-14c80d034b4d08368543a88cfdd7a71fe044d76a511e087752420957fe192e66.js","tinymce/plugins/toc/plugin.js":"tinymce/plugins/toc/plugin-e6c05b09e6066ce22300ca4942a530d621362f8a2d69d21d486bf5f57ce86c63.js","tinymce/plugins/visualblocks/plugin.js":"tinymce/plugins/visualblocks/plugin-dc48dde1907640cf2cc67ab99de28b69b7b7a04479c9a2d3284a21e190a2fc5b.js","tinymce/plugins/visualchars/plugin.js":"tinymce/plugins/visualchars/plugin-7a67008641a389395f71289303344cf2f9e699970d8ac27f8be769281c56a157.js","tinymce/plugins/wordcount/plugin.js":"tinymce/plugins/wordcount/plugin-adeca7c01633cf92382c63b9f99934fcc1f8f4034b84b8a653f800bc6deadf86.js","tinymce/skins/content/default/content.css":"tinymce/skins/content/default/content-59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178.css","tinymce/skins/content/default/content.min.css":"tinymce/skins/content/default/content.min-59af8e2bdcb843082433e35a13e74452bb71675b4d09a1020fb82ec12f905178.css","tinymce/skins/content/document/content.css":"tinymce/skins/content/document/content-1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943.css","tinymce/skins/content/document/content.min.css":"tinymce/skins/content/document/content.min-1e26cccef0052522affb81bf2148310236b19cddf8132f0239d8c7566722e943.css","tinymce/skins/content/writer/content.css":"tinymce/skins/content/writer/content-eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656.css","tinymce/skins/content/writer/content.min.css":"tinymce/skins/content/writer/content.min-eea5c153ee2a10ed0864d84fa1dffb95ea6def7e579978cd2dd3d8f0956c9656.css","tinymce/skins/ui/oxide/content.css":"tinymce/skins/ui/oxide/content-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css","tinymce/skins/ui/oxide/content.inline.css":"tinymce/skins/ui/oxide/content.inline-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css","tinymce/skins/ui/oxide/content.inline.min.css":"tinymce/skins/ui/oxide/content.inline.min-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css","tinymce/skins/ui/oxide/content.min.css":"tinymce/skins/ui/oxide/content.min-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css","tinymce/skins/ui/oxide/content.mobile.css":"tinymce/skins/ui/oxide/content.mobile-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css","tinymce/skins/ui/oxide/content.mobile.min.css":"tinymce/skins/ui/oxide/content.mobile.min-230c31f65356c7cb1799244a34f7a722c92a6d614e06e59d48db0ebccd7f2346.css","tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff":"tinymce/skins/ui/oxide/fonts/tinymce-mobile-e64bf156a432d63f5b34b4567b513dc0d351b49161c7f608fb82574bfdd9d213.woff","tinymce/skins/ui/oxide/skin.css":"tinymce/skins/ui/oxide/skin-19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48.css","tinymce/skins/ui/oxide/skin.min.css":"tinymce/skins/ui/oxide/skin.min-19f5d58bf005d2ff7a6d60bb3ddfa1772a55a8e556f723a3b21340bcf1003f48.css","tinymce/skins/ui/oxide/skin.mobile.css":"tinymce/skins/ui/oxide/skin.mobile-22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22.css","tinymce/skins/ui/oxide/skin.mobile.min.css":"tinymce/skins/ui/oxide/skin.mobile.min-22703cb423be432b125a19fa94a29a8122b722be4f7c1b303102ce16ed839e22.css","tinymce/skins/ui/oxide-dark/content.css":"tinymce/skins/ui/oxide-dark/content-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css","tinymce/skins/ui/oxide-dark/content.inline.css":"tinymce/skins/ui/oxide-dark/content.inline-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css","tinymce/skins/ui/oxide-dark/content.inline.min.css":"tinymce/skins/ui/oxide-dark/content.inline.min-a319a4b8c2db27b1576e22d90ed927accee887c125403f9d42ce48155c4672f2.css","tinymce/skins/ui/oxide-dark/content.min.css":"tinymce/skins/ui/oxide-dark/content.min-158a7d9cc2c222a428f47a9704ec8cb91d8d8b0a5b18725257e6be8ede9a06f1.css","tinymce/skins/ui/oxide-dark/skin.css":"tinymce/skins/ui/oxide-dark/skin-5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768.css","tinymce/skins/ui/oxide-dark/skin.min.css":"tinymce/skins/ui/oxide-dark/skin.min-5d441f8e6ccc16da2e10963a472fe7e4b593b36d470a913abff2c1592a37c768.css","tinymce/themes/mobile/theme.js":"tinymce/themes/mobile/theme-3ebedb886fbcc21c3b79f250f398c0ff4a2d870dd7a737322aceef1f2479ccd2.js","tinymce/themes/silver/theme.js":"tinymce/themes/silver/theme-02294426af3edeff56daa3e5fd3ef013944295525b150b8114eaca9de6201af7.js"}} \ No newline at end of file diff --git a/public/assets/application-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js b/public/assets/application-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js new file mode 100644 index 000000000..aec7d3899 --- /dev/null +++ b/public/assets/application-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js @@ -0,0 +1,52781 @@ +/* + * 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 <IFRAME> tag, found <' + element.tagName + '>' + ) + } + } + + if (element) { + chkType() + setupIFrame(element, options) + iFrames.push(element) + } + } + + function warnDeprecatedOptions(options) { + if (options && options.enablePublicMethods) { + warn( + 'enablePublicMethods option has been removed, public methods are now always available in the iFrame' + ) + } + } + + var iFrames + + setupRequestAnimationFrame() + setupEventListeners() + + return function iFrameResizeF(options, target) { + iFrames = [] // Only return iFrames past in on this call + + warnDeprecatedOptions(options) + + switch (typeof target) { + case 'undefined': + case 'string': + Array.prototype.forEach.call( + document.querySelectorAll(target || 'iframe'), + init.bind(undefined, options) + ) + break + + case 'object': + init(options, target) + break + + default: + throw new TypeError('Unexpected data type (' + typeof target + ')') + } + + return iFrames + } + } + + function createJQueryPublicMethod($) { + if (!$.fn) { + info('', 'Unable to bind to jQuery, it is not fully loaded.') + } else if (!$.fn.iFrameResize) { + $.fn.iFrameResize = function $iFrameResizeF(options) { + function init(index, element) { + setupIFrame(element, options) + } + + return this.filter('iframe') + .each(init) + .end() + } + } + } + + if (window.jQuery) { + createJQueryPublicMethod(window.jQuery) + } + + if (typeof define === 'function' && define.amd) { + define([], factory) + } else if (typeof module === 'object' && typeof module.exports === 'object') { + // Node for browserfy + module.exports = factory() + } + window.iFrameResize = window.iFrameResize || factory() +})() +; +/* + * File: iframeResizer.contentWindow.js + * Desc: Include this file in any page being loaded into an iframe + * to force the iframe to resize to the content size. + * Requires: iframeResizer.js on host page. + * Doc: https://github.com/davidjbradshaw/iframe-resizer + * Author: David J. Bradshaw - dave@bradshaw.net + * + */ + +// 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 autoResize = true, + base = 10, + bodyBackground = '', + bodyMargin = 0, + bodyMarginStr = '', + bodyObserver = null, + bodyPadding = '', + calculateWidth = false, + doubleEventList = { resize: 1, click: 1 }, + eventCancelTimer = 128, + firstRun = true, + height = 1, + heightCalcModeDefault = 'bodyOffset', + heightCalcMode = heightCalcModeDefault, + initLock = true, + initMsg = '', + inPageLinks = {}, + interval = 32, + intervalTimer = null, + logging = false, + msgID = '[iFrameSizer]', // Must match host page msg ID + msgIdLen = msgID.length, + myID = '', + resetRequiredMethods = { + max: 1, + min: 1, + bodyScroll: 1, + documentElementScroll: 1 + }, + resizeFrom = 'child', + sendPermit = true, + target = window.parent, + targetOriginDefault = '*', + tolerance = 0, + triggerLocked = false, + triggerLockedTimer = null, + throttledTimer = 16, + width = 1, + widthCalcModeDefault = 'scroll', + widthCalcMode = widthCalcModeDefault, + win = window, + onMessage = function() { + warn('onMessage function not defined') + }, + onReady = function() {}, + onPageInfo = function() {}, + customCalcMethods = { + height: function() { + warn('Custom height calculation function not defined') + return document.documentElement.offsetHeight + }, + width: function() { + warn('Custom width calculation function not defined') + return document.body.scrollWidth + } + }, + eventHandlersByName = {}, + passiveSupported = false + + function noop() {} + + try { + var options = Object.create( + {}, + { + passive: { + get: function() { + passiveSupported = true + } + } + } + ) + window.addEventListener('test', noop, options) + window.removeEventListener('test', noop, options) + } catch (error) { + /* */ + } + + function addEventListener(el, evt, func, options) { + el.addEventListener(evt, func, passiveSupported ? options || {} : false) + } + + function removeEventListener(el, evt, func) { + el.removeEventListener(evt, func, false) + } + + function capitalizeFirstLetter(string) { + return string.charAt(0).toUpperCase() + string.slice(1) + } + + // Based on underscore.js + function throttle(func) { + var context, + args, + result, + timeout = null, + previous = 0, + later = function() { + previous = getNow() + timeout = null + result = func.apply(context, args) + if (!timeout) { + // eslint-disable-next-line no-multi-assign + context = args = null + } + } + + return function() { + var now = getNow() + + if (!previous) { + previous = now + } + + var remaining = throttledTimer - (now - previous) + + context = this + args = arguments + + if (remaining <= 0 || remaining > throttledTimer) { + if (timeout) { + clearTimeout(timeout) + timeout = null + } + + previous = now + result = func.apply(context, args) + + if (!timeout) { + // eslint-disable-next-line no-multi-assign + context = args = null + } + } else if (!timeout) { + timeout = setTimeout(later, remaining) + } + + return result + } + } + + var getNow = + Date.now || + function() { + /* istanbul ignore next */ // Not testable in PhantonJS + return new Date().getTime() + } + + function formatLogMsg(msg) { + return msgID + '[' + myID + '] ' + msg + } + + function log(msg) { + if (logging && 'object' === typeof window.console) { + // eslint-disable-next-line no-console + console.log(formatLogMsg(msg)) + } + } + + function warn(msg) { + if ('object' === typeof window.console) { + // eslint-disable-next-line no-console + console.warn(formatLogMsg(msg)) + } + } + + function init() { + readDataFromParent() + log('Initialising iFrame (' + location.href + ')') + readDataFromPage() + setMargin() + setBodyStyle('background', bodyBackground) + setBodyStyle('padding', bodyPadding) + injectClearFixIntoBodyElement() + checkHeightMode() + checkWidthMode() + stopInfiniteResizingOfIFrame() + setupPublicMethods() + startEventListeners() + inPageLinks = setupInPageLinks() + sendSize('init', 'Init message from host page') + onReady() + } + + function readDataFromParent() { + function strBool(str) { + return 'true' === str + } + + var data = initMsg.substr(msgIdLen).split(':') + + myID = data[0] + bodyMargin = undefined !== data[1] ? Number(data[1]) : bodyMargin // For V1 compatibility + calculateWidth = undefined !== data[2] ? strBool(data[2]) : calculateWidth + logging = undefined !== data[3] ? strBool(data[3]) : logging + interval = undefined !== data[4] ? Number(data[4]) : interval + autoResize = undefined !== data[6] ? strBool(data[6]) : autoResize + bodyMarginStr = data[7] + heightCalcMode = undefined !== data[8] ? data[8] : heightCalcMode + bodyBackground = data[9] + bodyPadding = data[10] + tolerance = undefined !== data[11] ? Number(data[11]) : tolerance + inPageLinks.enable = undefined !== data[12] ? strBool(data[12]) : false + resizeFrom = undefined !== data[13] ? data[13] : resizeFrom + widthCalcMode = undefined !== data[14] ? data[14] : widthCalcMode + } + + 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( + "Deprecated: '" + + key + + "' has been renamed '" + + name + + "'. The old method will be removed in the next major version." + ) + } + } + + function readDataFromPage() { + function readData() { + var data = window.iFrameResizer + + log('Reading data from page: ' + JSON.stringify(data)) + Object.keys(data).forEach(depricate, data) + + onMessage = 'onMessage' in data ? data.onMessage : onMessage + onReady = 'onReady' in data ? data.onReady : onReady + targetOriginDefault = + 'targetOrigin' in data ? data.targetOrigin : targetOriginDefault + heightCalcMode = + 'heightCalculationMethod' in data + ? data.heightCalculationMethod + : heightCalcMode + widthCalcMode = + 'widthCalculationMethod' in data + ? data.widthCalculationMethod + : widthCalcMode + } + + function setupCustomCalcMethods(calcMode, calcFunc) { + if ('function' === typeof calcMode) { + log('Setup custom ' + calcFunc + 'CalcMethod') + customCalcMethods[calcFunc] = calcMode + calcMode = 'custom' + } + + return calcMode + } + + if ( + 'iFrameResizer' in window && + Object === window.iFrameResizer.constructor + ) { + readData() + heightCalcMode = setupCustomCalcMethods(heightCalcMode, 'height') + widthCalcMode = setupCustomCalcMethods(widthCalcMode, 'width') + } + + log('TargetOrigin for parent set to: ' + targetOriginDefault) + } + + function chkCSS(attr, value) { + if (-1 !== value.indexOf('-')) { + warn('Negative CSS value ignored for ' + attr) + value = '' + } + return value + } + + function setBodyStyle(attr, value) { + if (undefined !== value && '' !== value && 'null' !== value) { + document.body.style[attr] = value + log('Body ' + attr + ' set to "' + value + '"') + } + } + + function setMargin() { + // If called via V1 script, convert bodyMargin from int to str + if (undefined === bodyMarginStr) { + bodyMarginStr = bodyMargin + 'px' + } + + setBodyStyle('margin', chkCSS('margin', bodyMarginStr)) + } + + function stopInfiniteResizingOfIFrame() { + document.documentElement.style.height = '' + document.body.style.height = '' + log('HTML & body height set to "auto"') + } + + function manageTriggerEvent(options) { + var listener = { + add: function(eventName) { + function handleEvent() { + sendSize(options.eventName, options.eventType) + } + + eventHandlersByName[eventName] = handleEvent + + addEventListener(window, eventName, handleEvent, { passive: true }) + }, + remove: function(eventName) { + var handleEvent = eventHandlersByName[eventName] + delete eventHandlersByName[eventName] + + removeEventListener(window, eventName, handleEvent) + } + } + + if (options.eventNames && Array.prototype.map) { + options.eventName = options.eventNames[0] + options.eventNames.map(listener[options.method]) + } else { + listener[options.method](options.eventName) + } + + log( + capitalizeFirstLetter(options.method) + + ' event listener: ' + + options.eventType + ) + } + + function manageEventListeners(method) { + manageTriggerEvent({ + method: method, + eventType: 'Animation Start', + eventNames: ['animationstart', 'webkitAnimationStart'] + }) + manageTriggerEvent({ + method: method, + eventType: 'Animation Iteration', + eventNames: ['animationiteration', 'webkitAnimationIteration'] + }) + manageTriggerEvent({ + method: method, + eventType: 'Animation End', + eventNames: ['animationend', 'webkitAnimationEnd'] + }) + manageTriggerEvent({ + method: method, + eventType: 'Input', + eventName: 'input' + }) + manageTriggerEvent({ + method: method, + eventType: 'Mouse Up', + eventName: 'mouseup' + }) + manageTriggerEvent({ + method: method, + eventType: 'Mouse Down', + eventName: 'mousedown' + }) + manageTriggerEvent({ + method: method, + eventType: 'Orientation Change', + eventName: 'orientationchange' + }) + manageTriggerEvent({ + method: method, + eventType: 'Print', + eventName: ['afterprint', 'beforeprint'] + }) + manageTriggerEvent({ + method: method, + eventType: 'Ready State Change', + eventName: 'readystatechange' + }) + manageTriggerEvent({ + method: method, + eventType: 'Touch Start', + eventName: 'touchstart' + }) + manageTriggerEvent({ + method: method, + eventType: 'Touch End', + eventName: 'touchend' + }) + manageTriggerEvent({ + method: method, + eventType: 'Touch Cancel', + eventName: 'touchcancel' + }) + manageTriggerEvent({ + method: method, + eventType: 'Transition Start', + eventNames: [ + 'transitionstart', + 'webkitTransitionStart', + 'MSTransitionStart', + 'oTransitionStart', + 'otransitionstart' + ] + }) + manageTriggerEvent({ + method: method, + eventType: 'Transition Iteration', + eventNames: [ + 'transitioniteration', + 'webkitTransitionIteration', + 'MSTransitionIteration', + 'oTransitionIteration', + 'otransitioniteration' + ] + }) + manageTriggerEvent({ + method: method, + eventType: 'Transition End', + eventNames: [ + 'transitionend', + 'webkitTransitionEnd', + 'MSTransitionEnd', + 'oTransitionEnd', + 'otransitionend' + ] + }) + if ('child' === resizeFrom) { + manageTriggerEvent({ + method: method, + eventType: 'IFrame Resized', + eventName: 'resize' + }) + } + } + + function checkCalcMode(calcMode, calcModeDefault, modes, type) { + if (calcModeDefault !== calcMode) { + if (!(calcMode in modes)) { + warn( + calcMode + ' is not a valid option for ' + type + 'CalculationMethod.' + ) + calcMode = calcModeDefault + } + log(type + ' calculation method set to "' + calcMode + '"') + } + + return calcMode + } + + function checkHeightMode() { + heightCalcMode = checkCalcMode( + heightCalcMode, + heightCalcModeDefault, + getHeight, + 'height' + ) + } + + function checkWidthMode() { + widthCalcMode = checkCalcMode( + widthCalcMode, + widthCalcModeDefault, + getWidth, + 'width' + ) + } + + function startEventListeners() { + if (true === autoResize) { + manageEventListeners('add') + setupMutationObserver() + } else { + log('Auto Resize disabled') + } + } + + function stopMsgsToParent() { + log('Disable outgoing messages') + sendPermit = false + } + + function removeMsgListener() { + log('Remove event listener: Message') + removeEventListener(window, 'message', receiver) + } + + function disconnectMutationObserver() { + if (null !== bodyObserver) { + /* istanbul ignore next */ // Not testable in PhantonJS + bodyObserver.disconnect() + } + } + + function stopEventListeners() { + manageEventListeners('remove') + disconnectMutationObserver() + clearInterval(intervalTimer) + } + + function teardown() { + stopMsgsToParent() + removeMsgListener() + if (true === autoResize) stopEventListeners() + } + + function injectClearFixIntoBodyElement() { + var clearFix = document.createElement('div') + clearFix.style.clear = 'both' + // Guard against the following having been globally redefined in CSS. + clearFix.style.display = 'block' + clearFix.style.height = '0' + document.body.appendChild(clearFix) + } + + function setupInPageLinks() { + function getPagePosition() { + return { + x: + window.pageXOffset !== undefined + ? window.pageXOffset + : document.documentElement.scrollLeft, + y: + window.pageYOffset !== undefined + ? window.pageYOffset + : document.documentElement.scrollTop + } + } + + function getElementPosition(el) { + var elPosition = el.getBoundingClientRect(), + pagePosition = getPagePosition() + + return { + x: parseInt(elPosition.left, 10) + parseInt(pagePosition.x, 10), + y: parseInt(elPosition.top, 10) + parseInt(pagePosition.y, 10) + } + } + + function findTarget(location) { + function jumpToTarget(target) { + var jumpPosition = getElementPosition(target) + + log( + 'Moving to in page link (#' + + hash + + ') at x: ' + + jumpPosition.x + + ' y: ' + + jumpPosition.y + ) + sendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset') // X&Y reversed at sendMsg uses height/width + } + + var hash = location.split('#')[1] || location, // Remove # if present + hashData = decodeURIComponent(hash), + target = + document.getElementById(hashData) || + document.getElementsByName(hashData)[0] + + if (undefined !== target) { + jumpToTarget(target) + } else { + log( + 'In page link (#' + + hash + + ') not found in iFrame, so sending to parent' + ) + sendMsg(0, 0, 'inPageLink', '#' + hash) + } + } + + function checkLocationHash() { + if ('' !== location.hash && '#' !== location.hash) { + findTarget(location.href) + } + } + + function bindAnchors() { + function setupLink(el) { + function linkClicked(e) { + e.preventDefault() + + /* jshint validthis:true */ + findTarget(this.getAttribute('href')) + } + + if ('#' !== el.getAttribute('href')) { + addEventListener(el, 'click', linkClicked) + } + } + + Array.prototype.forEach.call( + document.querySelectorAll('a[href^="#"]'), + setupLink + ) + } + + function bindLocationHash() { + addEventListener(window, 'hashchange', checkLocationHash) + } + + function initCheck() { + // Check if page loaded with location hash after init resize + setTimeout(checkLocationHash, eventCancelTimer) + } + + function enableInPageLinks() { + /* istanbul ignore else */ // Not testable in phantonJS + if (Array.prototype.forEach && document.querySelectorAll) { + log('Setting up location.hash handlers') + bindAnchors() + bindLocationHash() + initCheck() + } else { + warn( + 'In page linking not fully supported in this browser! (See README.md for IE8 workaround)' + ) + } + } + + if (inPageLinks.enable) { + enableInPageLinks() + } else { + log('In page linking not enabled') + } + + return { + findTarget: findTarget + } + } + + function setupPublicMethods() { + log('Enable public methods') + + win.parentIFrame = { + autoResize: function autoResizeF(resize) { + if (true === resize && false === autoResize) { + autoResize = true + startEventListeners() + } else if (false === resize && true === autoResize) { + autoResize = false + stopEventListeners() + } + + return autoResize + }, + + close: function closeF() { + sendMsg(0, 0, 'close') + teardown() + }, + + getId: function getIdF() { + return myID + }, + + getPageInfo: function getPageInfoF(callback) { + if ('function' === typeof callback) { + onPageInfo = callback + sendMsg(0, 0, 'pageInfo') + } else { + onPageInfo = function() {} + sendMsg(0, 0, 'pageInfoStop') + } + }, + + moveToAnchor: function moveToAnchorF(hash) { + inPageLinks.findTarget(hash) + }, + + reset: function resetF() { + resetIFrame('parentIFrame.reset') + }, + + scrollTo: function scrollToF(x, y) { + sendMsg(y, x, 'scrollTo') // X&Y reversed at sendMsg uses height/width + }, + + scrollToOffset: function scrollToF(x, y) { + sendMsg(y, x, 'scrollToOffset') // X&Y reversed at sendMsg uses height/width + }, + + sendMessage: function sendMessageF(msg, targetOrigin) { + sendMsg(0, 0, 'message', JSON.stringify(msg), targetOrigin) + }, + + setHeightCalculationMethod: function setHeightCalculationMethodF( + heightCalculationMethod + ) { + heightCalcMode = heightCalculationMethod + checkHeightMode() + }, + + setWidthCalculationMethod: function setWidthCalculationMethodF( + widthCalculationMethod + ) { + widthCalcMode = widthCalculationMethod + checkWidthMode() + }, + + setTargetOrigin: function setTargetOriginF(targetOrigin) { + log('Set targetOrigin: ' + targetOrigin) + targetOriginDefault = targetOrigin + }, + + size: function sizeF(customHeight, customWidth) { + var valString = + '' + (customHeight || '') + (customWidth ? ',' + customWidth : '') + sendSize( + 'size', + 'parentIFrame.size(' + valString + ')', + customHeight, + customWidth + ) + } + } + } + + function initInterval() { + if (0 !== interval) { + log('setInterval: ' + interval + 'ms') + intervalTimer = setInterval(function() { + sendSize('interval', 'setInterval: ' + interval) + }, Math.abs(interval)) + } + } + + // Not testable in PhantomJS + /* istanbul ignore next */ + function setupBodyMutationObserver() { + function addImageLoadListners(mutation) { + function addImageLoadListener(element) { + if (false === element.complete) { + log('Attach listeners to ' + element.src) + element.addEventListener('load', imageLoaded, false) + element.addEventListener('error', imageError, false) + elements.push(element) + } + } + + if (mutation.type === 'attributes' && mutation.attributeName === 'src') { + addImageLoadListener(mutation.target) + } else if (mutation.type === 'childList') { + Array.prototype.forEach.call( + mutation.target.querySelectorAll('img'), + addImageLoadListener + ) + } + } + + function removeFromArray(element) { + elements.splice(elements.indexOf(element), 1) + } + + function removeImageLoadListener(element) { + log('Remove listeners from ' + element.src) + element.removeEventListener('load', imageLoaded, false) + element.removeEventListener('error', imageError, false) + removeFromArray(element) + } + + function imageEventTriggered(event, type, typeDesc) { + removeImageLoadListener(event.target) + sendSize(type, typeDesc + ': ' + event.target.src, undefined, undefined) + } + + function imageLoaded(event) { + imageEventTriggered(event, 'imageLoad', 'Image loaded') + } + + function imageError(event) { + imageEventTriggered(event, 'imageLoadFailed', 'Image load failed') + } + + function mutationObserved(mutations) { + sendSize( + 'mutationObserver', + 'mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type + ) + + // Deal with WebKit / Blink asyncing image loading when tags are injected into the page + mutations.forEach(addImageLoadListners) + } + + function createMutationObserver() { + var target = document.querySelector('body'), + config = { + attributes: true, + attributeOldValue: false, + characterData: true, + characterDataOldValue: false, + childList: true, + subtree: true + } + + observer = new MutationObserver(mutationObserved) + + log('Create body MutationObserver') + observer.observe(target, config) + + return observer + } + + var elements = [], + MutationObserver = + window.MutationObserver || window.WebKitMutationObserver, + observer = createMutationObserver() + + return { + disconnect: function() { + if ('disconnect' in observer) { + log('Disconnect body MutationObserver') + observer.disconnect() + elements.forEach(removeImageLoadListener) + } + } + } + } + + function setupMutationObserver() { + var forceIntervalTimer = 0 > interval + + // Not testable in PhantomJS + /* istanbul ignore if */ if ( + window.MutationObserver || + window.WebKitMutationObserver + ) { + if (forceIntervalTimer) { + initInterval() + } else { + bodyObserver = setupBodyMutationObserver() + } + } else { + log('MutationObserver not supported in this browser!') + initInterval() + } + } + + // document.documentElement.offsetHeight is not reliable, so + // we have to jump through hoops to get a better value. + function getComputedStyle(prop, el) { + var retVal = 0 + el = el || document.body // Not testable in phantonJS + + retVal = document.defaultView.getComputedStyle(el, null) + retVal = null !== retVal ? retVal[prop] : 0 + + return parseInt(retVal, base) + } + + function chkEventThottle(timer) { + if (timer > throttledTimer / 2) { + throttledTimer = 2 * timer + log('Event throttle increased to ' + throttledTimer + 'ms') + } + } + + // Idea from https://github.com/guardian/iframe-messenger + function getMaxElement(side, elements) { + var elementsLength = elements.length, + elVal = 0, + maxVal = 0, + Side = capitalizeFirstLetter(side), + timer = getNow() + + for (var i = 0; i < elementsLength; i++) { + elVal = + elements[i].getBoundingClientRect()[side] + + getComputedStyle('margin' + Side, elements[i]) + if (elVal > maxVal) { + maxVal = elVal + } + } + + timer = getNow() - timer + + log('Parsed ' + elementsLength + ' HTML elements') + log('Element position calculated in ' + timer + 'ms') + + chkEventThottle(timer) + + return maxVal + } + + function getAllMeasurements(dimention) { + return [ + dimention.bodyOffset(), + dimention.bodyScroll(), + dimention.documentElementOffset(), + dimention.documentElementScroll() + ] + } + + function getTaggedElements(side, tag) { + function noTaggedElementsFound() { + warn('No tagged elements (' + tag + ') found on page') + return document.querySelectorAll('body *') + } + + var elements = document.querySelectorAll('[' + tag + ']') + + if (0 === elements.length) noTaggedElementsFound() + + return getMaxElement(side, elements) + } + + function getAllElements() { + return document.querySelectorAll('body *') + } + + var getHeight = { + bodyOffset: function getBodyOffsetHeight() { + return ( + document.body.offsetHeight + + getComputedStyle('marginTop') + + getComputedStyle('marginBottom') + ) + }, + + offset: function() { + return getHeight.bodyOffset() // Backwards compatability + }, + + bodyScroll: function getBodyScrollHeight() { + return document.body.scrollHeight + }, + + custom: function getCustomWidth() { + return customCalcMethods.height() + }, + + documentElementOffset: function getDEOffsetHeight() { + return document.documentElement.offsetHeight + }, + + documentElementScroll: function getDEScrollHeight() { + return document.documentElement.scrollHeight + }, + + max: function getMaxHeight() { + return Math.max.apply(null, getAllMeasurements(getHeight)) + }, + + min: function getMinHeight() { + return Math.min.apply(null, getAllMeasurements(getHeight)) + }, + + grow: function growHeight() { + return getHeight.max() // Run max without the forced downsizing + }, + + lowestElement: function getBestHeight() { + return Math.max( + getHeight.bodyOffset() || getHeight.documentElementOffset(), + getMaxElement('bottom', getAllElements()) + ) + }, + + taggedElement: function getTaggedElementsHeight() { + return getTaggedElements('bottom', 'data-iframe-height') + } + }, + getWidth = { + bodyScroll: function getBodyScrollWidth() { + return document.body.scrollWidth + }, + + bodyOffset: function getBodyOffsetWidth() { + return document.body.offsetWidth + }, + + custom: function getCustomWidth() { + return customCalcMethods.width() + }, + + documentElementScroll: function getDEScrollWidth() { + return document.documentElement.scrollWidth + }, + + documentElementOffset: function getDEOffsetWidth() { + return document.documentElement.offsetWidth + }, + + scroll: function getMaxWidth() { + return Math.max(getWidth.bodyScroll(), getWidth.documentElementScroll()) + }, + + max: function getMaxWidth() { + return Math.max.apply(null, getAllMeasurements(getWidth)) + }, + + min: function getMinWidth() { + return Math.min.apply(null, getAllMeasurements(getWidth)) + }, + + rightMostElement: function rightMostElement() { + return getMaxElement('right', getAllElements()) + }, + + taggedElement: function getTaggedElementsWidth() { + return getTaggedElements('right', 'data-iframe-width') + } + } + + function sizeIFrame( + triggerEvent, + triggerEventDesc, + customHeight, + customWidth + ) { + function resizeIFrame() { + height = currentHeight + width = currentWidth + + sendMsg(height, width, triggerEvent) + } + + function isSizeChangeDetected() { + function checkTolarance(a, b) { + var retVal = Math.abs(a - b) <= tolerance + return !retVal + } + + currentHeight = + undefined !== customHeight ? customHeight : getHeight[heightCalcMode]() + currentWidth = + undefined !== customWidth ? customWidth : getWidth[widthCalcMode]() + + return ( + checkTolarance(height, currentHeight) || + (calculateWidth && checkTolarance(width, currentWidth)) + ) + } + + function isForceResizableEvent() { + return !(triggerEvent in { init: 1, interval: 1, size: 1 }) + } + + function isForceResizableCalcMode() { + return ( + heightCalcMode in resetRequiredMethods || + (calculateWidth && widthCalcMode in resetRequiredMethods) + ) + } + + function logIgnored() { + log('No change in size detected') + } + + function checkDownSizing() { + if (isForceResizableEvent() && isForceResizableCalcMode()) { + resetIFrame(triggerEventDesc) + } else if (!(triggerEvent in { interval: 1 })) { + logIgnored() + } + } + + var currentHeight, currentWidth + + if (isSizeChangeDetected() || 'init' === triggerEvent) { + lockTrigger() + resizeIFrame() + } else { + checkDownSizing() + } + } + + var sizeIFrameThrottled = throttle(sizeIFrame) + + function sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth) { + function recordTrigger() { + if (!(triggerEvent in { reset: 1, resetPage: 1, init: 1 })) { + log('Trigger event: ' + triggerEventDesc) + } + } + + function isDoubleFiredEvent() { + return triggerLocked && triggerEvent in doubleEventList + } + + if (!isDoubleFiredEvent()) { + recordTrigger() + if (triggerEvent === 'init') { + sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth) + } else { + sizeIFrameThrottled( + triggerEvent, + triggerEventDesc, + customHeight, + customWidth + ) + } + } else { + log('Trigger event cancelled: ' + triggerEvent) + } + } + + function lockTrigger() { + if (!triggerLocked) { + triggerLocked = true + log('Trigger event lock on') + } + clearTimeout(triggerLockedTimer) + triggerLockedTimer = setTimeout(function() { + triggerLocked = false + log('Trigger event lock off') + log('--') + }, eventCancelTimer) + } + + function triggerReset(triggerEvent) { + height = getHeight[heightCalcMode]() + width = getWidth[widthCalcMode]() + + sendMsg(height, width, triggerEvent) + } + + function resetIFrame(triggerEventDesc) { + var hcm = heightCalcMode + heightCalcMode = heightCalcModeDefault + + log('Reset trigger event: ' + triggerEventDesc) + lockTrigger() + triggerReset('reset') + + heightCalcMode = hcm + } + + function sendMsg(height, width, triggerEvent, msg, targetOrigin) { + function setTargetOrigin() { + if (undefined === targetOrigin) { + targetOrigin = targetOriginDefault + } else { + log('Message targetOrigin: ' + targetOrigin) + } + } + + function sendToParent() { + var size = height + ':' + width, + message = + myID + + ':' + + size + + ':' + + triggerEvent + + (undefined !== msg ? ':' + msg : '') + + log('Sending message to host page (' + message + ')') + target.postMessage(msgID + message, targetOrigin) + } + + if (true === sendPermit) { + setTargetOrigin() + sendToParent() + } + } + + function receiver(event) { + var processRequestFromParent = { + init: function initFromParent() { + initMsg = event.data + target = event.source + + init() + firstRun = false + setTimeout(function() { + initLock = false + }, eventCancelTimer) + }, + + reset: function resetFromParent() { + if (!initLock) { + log('Page size reset by host page') + triggerReset('resetPage') + } else { + log('Page reset ignored by init') + } + }, + + resize: function resizeFromParent() { + sendSize('resizeParent', 'Parent window requested size check') + }, + + moveToAnchor: function moveToAnchorF() { + inPageLinks.findTarget(getData()) + }, + inPageLink: function inPageLinkF() { + this.moveToAnchor() + }, // Backward compatability + + pageInfo: function pageInfoFromParent() { + var msgBody = getData() + log('PageInfoFromParent called from parent: ' + msgBody) + onPageInfo(JSON.parse(msgBody)) + log(' --') + }, + + message: function messageFromParent() { + var msgBody = getData() + + log('onMessage called from parent: ' + msgBody) + // eslint-disable-next-line sonarjs/no-extra-arguments + onMessage(JSON.parse(msgBody)) + log(' --') + } + } + + function isMessageForUs() { + return msgID === ('' + event.data).substr(0, msgIdLen) // ''+ Protects against non-string messages + } + + function getMessageType() { + return event.data.split(']')[1].split(':')[0] + } + + function getData() { + return event.data.substr(event.data.indexOf(':') + 1) + } + + function isMiddleTier() { + return ( + (!(typeof module !== 'undefined' && module.exports) && + 'iFrameResize' in window) || + ('jQuery' in window && 'iFrameResize' in window.jQuery.prototype) + ) + } + + function isInitMsg() { + // Test if this message is from a child below us. This is an ugly test, however, updating + // the message format would break backwards compatibity. + return event.data.split(':')[2] in { true: 1, false: 1 } + } + + function callFromParent() { + var messageType = getMessageType() + + if (messageType in processRequestFromParent) { + processRequestFromParent[messageType]() + } else if (!isMiddleTier() && !isInitMsg()) { + warn('Unexpected message (' + event.data + ')') + } + } + + function processMessage() { + if (false === firstRun) { + callFromParent() + } else if (isInitMsg()) { + processRequestFromParent.init() + } else { + log( + 'Ignored message of type "' + + getMessageType() + + '". Received before initialization.' + ) + } + } + + if (isMessageForUs()) { + processMessage() + } + } + + // Normally the parent kicks things off when it detects the iFrame has loaded. + // If this script is async-loaded, then tell parent page to retry init. + function chkLateLoaded() { + if ('loading' !== document.readyState) { + window.parent.postMessage('[iFrameResizerChild]Ready', '*') + } + } + + addEventListener(window, 'message', receiver) + addEventListener(window, 'readystatechange', chkLateLoaded) + chkLateLoaded() + + +})() +; + + +/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ + +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML <object> elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { + doc = doc || document; + + var i, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.3.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "<a href='' disabled='disabled'></a>" + + "<select disabled='disabled'><option/></select>"; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = "<a href='#'></a>"; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = "<input/>"; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG <use> instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ); + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ).prop( { + charset: s.scriptCharset, + src: s.url + } ).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +} ); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } +} ); + + + + +// Support: Safari 8 only +// In Safari 8 documents created via document.implementation.createHTMLDocument +// collapse sibling forms: the second one becomes a child of the first one. +// Because of that, this security measure has to be disabled in Safari 8. +// https://bugs.webkit.org/show_bug.cgi?id=137337 +support.createHTMLDocument = ( function() { + var body = document.implementation.createHTMLDocument( "" ).body; + body.innerHTML = "<form></form><form></form>"; + return body.childNodes.length === 2; +} )(); + + +// Argument "data" should be string of html +// context (optional): If specified, the fragment will be created in this context, +// defaults to document +// keepScripts (optional): If true, will include scripts passed in the html string +jQuery.parseHTML = function( data, context, keepScripts ) { + if ( typeof data !== "string" ) { + return []; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + + var base, parsed, scripts; + + if ( !context ) { + + // Stop scripts or inline event handlers from being executed immediately + // by using document.implementation + if ( support.createHTMLDocument ) { + context = document.implementation.createHTMLDocument( "" ); + + // Set the base href for the created document + // so any parsed elements with URLs + // are based on the document's URL (gh-2965) + base = context.createElement( "base" ); + base.href = document.location.href; + context.head.appendChild( base ); + } else { + context = document; + } + } + + parsed = rsingleTag.exec( data ); + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); +}; + + +/** + * Load a url into a page + */ +jQuery.fn.load = function( url, params, callback ) { + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = stripAndCollapse( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; +}; + + + + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" +], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; +} ); + + + + +jQuery.expr.pseudos.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; +}; + + + + +jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } +}; + +jQuery.fn.extend( { + + // offset() relates an element's border box to the document origin + offset: function( options ) { + + // Preserve chaining for setter + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var rect, win, + elem = this[ 0 ]; + + if ( !elem ) { + return; + } + + // Return zeros for disconnected and hidden (display: none) elements (gh-2310) + // Support: IE <=11 only + // Running getBoundingClientRect on a + // disconnected node in IE throws an error + if ( !elem.getClientRects().length ) { + return { top: 0, left: 0 }; + } + + // Get document-relative position by adding viewport scroll to viewport-relative gBCR + rect = elem.getBoundingClientRect(); + win = elem.ownerDocument.defaultView; + return { + top: rect.top + win.pageYOffset, + left: rect.left + win.pageXOffset + }; + }, + + // position() relates an element's margin box to its offset parent's padding box + // This corresponds to the behavior of CSS absolute positioning + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, doc, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // position:fixed elements are offset from the viewport, which itself always has zero offset + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume position:fixed implies availability of getBoundingClientRect + offset = elem.getBoundingClientRect(); + + } else { + offset = this.offset(); + + // Account for the *real* offset parent, which can be the document or its root element + // when a statically positioned element is identified + doc = elem.ownerDocument; + offsetParent = elem.offsetParent || doc.documentElement; + while ( offsetParent && + ( offsetParent === doc.body || offsetParent === doc.documentElement ) && + jQuery.css( offsetParent, "position" ) === "static" ) { + + offsetParent = offsetParent.parentNode; + } + if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { + + // Incorporate borders into its offset, since they are outside its content origin + parentOffset = jQuery( offsetParent ).offset(); + parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); + } + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } +} ); + +// Create scrollLeft and scrollTop methods +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + + // Coalesce documents and windows + var win; + if ( isWindow( elem ) ) { + win = elem; + } else if ( elem.nodeType === 9 ) { + win = elem.defaultView; + } + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; +} ); + +// Support: Safari <=7 - 9.1, Chrome <=37 - 49 +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, just check for it here +jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); +} ); + + +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( isWindow( elem ) ) { + + // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) + return funcName.indexOf( "outer" ) === 0 ? + elem[ "inner" + name ] : + elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable ); + }; + } ); +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + } +} ); + +// Bind a function to a context, optionally partially applying any +// arguments. +// jQuery.proxy is deprecated to promote standards (specifically Function#bind) +// However, it is not slated for removal any time soon +jQuery.proxy = function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; +}; + +jQuery.holdReady = function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } +}; +jQuery.isArray = Array.isArray; +jQuery.parseJSON = JSON.parse; +jQuery.nodeName = nodeName; +jQuery.isFunction = isFunction; +jQuery.isWindow = isWindow; +jQuery.camelCase = camelCase; +jQuery.type = toType; + +jQuery.now = Date.now; + +jQuery.isNumeric = function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); +}; + + + + +// Register as a named AMD module, since jQuery can be concatenated with other +// files that may use define, but not via a proper concatenation script that +// understands anonymous AMD modules. A named AMD is safest and most robust +// way to register. Lowercase jquery is used because AMD module names are +// derived from file names, and jQuery is normally delivered in a lowercase +// file name. Do this after creating the global so that if an AMD module wants +// to call noConflict to hide this version of jQuery, it will work. + +// Note that for maximum portability, libraries that are not jQuery should +// declare themselves as anonymous modules, and avoid setting a global if an +// AMD loader is present. jQuery is a special case. For more information, see +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + +if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function() { + return jQuery; + } ); +} + + + + +var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in AMD +// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; +} + + + + +return jQuery; +} ); +(function($, undefined) { + +/** + * Unobtrusive scripting adapter for jQuery + * https://github.com/rails/jquery-ujs + * + * Requires jQuery 1.8.0 or later. + * + * Released under the MIT license + * + */ + + // Cut down on the number of issues from people inadvertently including jquery_ujs twice + // by detecting and raising an error when it happens. + 'use strict'; + + if ( $.rails !== undefined ) { + $.error('jquery-ujs has already been loaded!'); + } + + // Shorthand to make it a little easier to call public rails functions from within rails.js + var rails; + var $document = $(document); + + $.rails = rails = { + // Link elements bound by jquery-ujs + linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]', + + // Button elements bound by jquery-ujs + buttonClickSelector: 'button[data-remote]:not([form]):not(form button), button[data-confirm]:not([form]):not(form button)', + + // Select elements bound by jquery-ujs + inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]', + + // Form elements bound by jquery-ujs + formSubmitSelector: 'form', + + // Form input elements bound by jquery-ujs + formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])', + + // Form input elements disabled during form submission + disableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled', + + // Form input elements re-enabled after form submission + enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled', + + // Form required input elements + requiredInputSelector: 'input[name][required]:not([disabled]), textarea[name][required]:not([disabled])', + + // Form file input elements + fileInputSelector: 'input[name][type=file]:not([disabled])', + + // Link onClick disable selector with possible reenable after remote submission + linkDisableSelector: 'a[data-disable-with], a[data-disable]', + + // Button onClick disable selector with possible reenable after remote submission + buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]', + + // Up-to-date Cross-Site Request Forgery token + csrfToken: function() { + return $('meta[name=csrf-token]').attr('content'); + }, + + // URL param that must contain the CSRF token + csrfParam: function() { + return $('meta[name=csrf-param]').attr('content'); + }, + + // Make sure that every Ajax request sends the CSRF token + CSRFProtection: function(xhr) { + var token = rails.csrfToken(); + if (token) xhr.setRequestHeader('X-CSRF-Token', token); + }, + + // Make sure that all forms have actual up-to-date tokens (cached forms contain old ones) + refreshCSRFTokens: function(){ + $('form input[name="' + rails.csrfParam() + '"]').val(rails.csrfToken()); + }, + + // Triggers an event on an element and returns false if the event result is false + fire: function(obj, name, data) { + var event = $.Event(name); + obj.trigger(event, data); + return event.result !== false; + }, + + // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm + confirm: function(message) { + return confirm(message); + }, + + // Default ajax function, may be overridden with custom function in $.rails.ajax + ajax: function(options) { + return $.ajax(options); + }, + + // Default way to get an element's href. May be overridden at $.rails.href. + href: function(element) { + return element[0].href; + }, + + // Checks "data-remote" if true to handle the request through a XHR request. + isRemote: function(element) { + return element.data('remote') !== undefined && element.data('remote') !== false; + }, + + // Submits "remote" forms and links with ajax + handleRemote: function(element) { + var method, url, data, withCredentials, dataType, options; + + if (rails.fire(element, 'ajax:before')) { + withCredentials = element.data('with-credentials') || null; + dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType); + + if (element.is('form')) { + method = element.data('ujs:submit-button-formmethod') || element.attr('method'); + url = element.data('ujs:submit-button-formaction') || element.attr('action'); + data = $(element[0]).serializeArray(); + // memoized value from clicked submit button + var button = element.data('ujs:submit-button'); + if (button) { + data.push(button); + element.data('ujs:submit-button', null); + } + element.data('ujs:submit-button-formmethod', null); + element.data('ujs:submit-button-formaction', null); + } else if (element.is(rails.inputChangeSelector)) { + method = element.data('method'); + url = element.data('url'); + data = element.serialize(); + if (element.data('params')) data = data + '&' + element.data('params'); + } else if (element.is(rails.buttonClickSelector)) { + method = element.data('method') || 'get'; + url = element.data('url'); + data = element.serialize(); + if (element.data('params')) data = data + '&' + element.data('params'); + } else { + method = element.data('method'); + url = rails.href(element); + data = element.data('params') || null; + } + + options = { + type: method || 'GET', data: data, dataType: dataType, + // stopping the "ajax:beforeSend" event will cancel the ajax request + beforeSend: function(xhr, settings) { + if (settings.dataType === undefined) { + xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script); + } + if (rails.fire(element, 'ajax:beforeSend', [xhr, settings])) { + element.trigger('ajax:send', xhr); + } else { + return false; + } + }, + success: function(data, status, xhr) { + element.trigger('ajax:success', [data, status, xhr]); + }, + complete: function(xhr, status) { + element.trigger('ajax:complete', [xhr, status]); + }, + error: function(xhr, status, error) { + element.trigger('ajax:error', [xhr, status, error]); + }, + crossDomain: rails.isCrossDomain(url) + }; + + // There is no withCredentials for IE6-8 when + // "Enable native XMLHTTP support" is disabled + if (withCredentials) { + options.xhrFields = { + withCredentials: withCredentials + }; + } + + // Only pass url to `ajax` options if not blank + if (url) { options.url = url; } + + return rails.ajax(options); + } else { + return false; + } + }, + + // Determines if the request is a cross domain request. + isCrossDomain: function(url) { + var originAnchor = document.createElement('a'); + originAnchor.href = location.href; + var urlAnchor = document.createElement('a'); + + try { + urlAnchor.href = url; + // This is a workaround to a IE bug. + urlAnchor.href = urlAnchor.href; + + // If URL protocol is false or is a string containing a single colon + // *and* host are false, assume it is not a cross-domain request + // (should only be the case for IE7 and IE compatibility mode). + // Otherwise, evaluate protocol and host of the URL against the origin + // protocol and host. + return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || + (originAnchor.protocol + '//' + originAnchor.host === + urlAnchor.protocol + '//' + urlAnchor.host)); + } catch (e) { + // If there is an error parsing the URL, assume it is crossDomain. + return true; + } + }, + + // Handles "data-method" on links such as: + // <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a> + handleMethod: function(link) { + var href = rails.href(link), + method = link.data('method'), + target = link.attr('target'), + csrfToken = rails.csrfToken(), + csrfParam = rails.csrfParam(), + form = $('<form method="post" action="' + href + '"></form>'), + metadataInput = '<input name="_method" value="' + method + '" type="hidden" />'; + + if (csrfParam !== undefined && csrfToken !== undefined && !rails.isCrossDomain(href)) { + metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />'; + } + + if (target) { form.attr('target', target); } + + form.hide().append(metadataInput).appendTo('body'); + form.submit(); + }, + + // Helper function that returns form elements that match the specified CSS selector + // If form is actually a "form" element this will return associated elements outside the from that have + // the html form attribute set + formElements: function(form, selector) { + return form.is('form') ? $(form[0].elements).filter(selector) : form.find(selector); + }, + + /* Disables form elements: + - Caches element value in 'ujs:enable-with' data store + - Replaces element text with value of 'data-disable-with' attribute + - Sets disabled property to true + */ + disableFormElements: function(form) { + rails.formElements(form, rails.disableSelector).each(function() { + rails.disableFormElement($(this)); + }); + }, + + disableFormElement: function(element) { + var method, replacement; + + method = element.is('button') ? 'html' : 'val'; + replacement = element.data('disable-with'); + + if (replacement !== undefined) { + element.data('ujs:enable-with', element[method]()); + element[method](replacement); + } + + element.prop('disabled', true); + element.data('ujs:disabled', true); + }, + + /* Re-enables disabled form elements: + - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`) + - Sets disabled property to false + */ + enableFormElements: function(form) { + rails.formElements(form, rails.enableSelector).each(function() { + rails.enableFormElement($(this)); + }); + }, + + enableFormElement: function(element) { + var method = element.is('button') ? 'html' : 'val'; + if (element.data('ujs:enable-with') !== undefined) { + element[method](element.data('ujs:enable-with')); + element.removeData('ujs:enable-with'); // clean up cache + } + element.prop('disabled', false); + element.removeData('ujs:disabled'); + }, + + /* For 'data-confirm' attribute: + - Fires `confirm` event + - Shows the confirmation dialog + - Fires the `confirm:complete` event + + Returns `true` if no function stops the chain and user chose yes; `false` otherwise. + Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog. + Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function + return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog. + */ + allowAction: function(element) { + var message = element.data('confirm'), + answer = false, callback; + if (!message) { return true; } + + if (rails.fire(element, 'confirm')) { + try { + answer = rails.confirm(message); + } catch (e) { + (console.error || console.log).call(console, e.stack || e); + } + callback = rails.fire(element, 'confirm:complete', [answer]); + } + return answer && callback; + }, + + // Helper function which checks for blank inputs in a form that match the specified CSS selector + blankInputs: function(form, specifiedSelector, nonBlank) { + var foundInputs = $(), + input, + valueToCheck, + radiosForNameWithNoneSelected, + radioName, + selector = specifiedSelector || 'input,textarea', + requiredInputs = form.find(selector), + checkedRadioButtonNames = {}; + + requiredInputs.each(function() { + input = $(this); + if (input.is('input[type=radio]')) { + + // Don't count unchecked required radio as blank if other radio with same name is checked, + // regardless of whether same-name radio input has required attribute or not. The spec + // states https://www.w3.org/TR/html5/forms.html#the-required-attribute + radioName = input.attr('name'); + + // Skip if we've already seen the radio with this name. + if (!checkedRadioButtonNames[radioName]) { + + // If none checked + if (form.find('input[type=radio]:checked[name="' + radioName + '"]').length === 0) { + radiosForNameWithNoneSelected = form.find( + 'input[type=radio][name="' + radioName + '"]'); + foundInputs = foundInputs.add(radiosForNameWithNoneSelected); + } + + // We only need to check each name once. + checkedRadioButtonNames[radioName] = radioName; + } + } else { + valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : !!input.val(); + if (valueToCheck === nonBlank) { + foundInputs = foundInputs.add(input); + } + } + }); + return foundInputs.length ? foundInputs : false; + }, + + // Helper function which checks for non-blank inputs in a form that match the specified CSS selector + nonBlankInputs: function(form, specifiedSelector) { + return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank + }, + + // Helper function, needed to provide consistent behavior in IE + stopEverything: function(e) { + $(e.target).trigger('ujs:everythingStopped'); + e.stopImmediatePropagation(); + return false; + }, + + // Replace element's html with the 'data-disable-with' after storing original html + // and prevent clicking on it + disableElement: function(element) { + var replacement = element.data('disable-with'); + + if (replacement !== undefined) { + element.data('ujs:enable-with', element.html()); // store enabled state + element.html(replacement); + } + + element.bind('click.railsDisable', function(e) { // prevent further clicking + return rails.stopEverything(e); + }); + element.data('ujs:disabled', true); + }, + + // Restore element to its original state which was disabled by 'disableElement' above + enableElement: function(element) { + if (element.data('ujs:enable-with') !== undefined) { + element.html(element.data('ujs:enable-with')); // set to old enabled state + element.removeData('ujs:enable-with'); // clean up cache + } + element.unbind('click.railsDisable'); // enable element + element.removeData('ujs:disabled'); + } + }; + + if (rails.fire($document, 'rails:attachBindings')) { + + $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }}); + + // This event works the same as the load event, except that it fires every + // time the page is loaded. + // + // See https://github.com/rails/jquery-ujs/issues/357 + // See https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching + $(window).on('pageshow.rails', function () { + $($.rails.enableSelector).each(function () { + var element = $(this); + + if (element.data('ujs:disabled')) { + $.rails.enableFormElement(element); + } + }); + + $($.rails.linkDisableSelector).each(function () { + var element = $(this); + + if (element.data('ujs:disabled')) { + $.rails.enableElement(element); + } + }); + }); + + $document.on('ajax:complete', rails.linkDisableSelector, function() { + rails.enableElement($(this)); + }); + + $document.on('ajax:complete', rails.buttonDisableSelector, function() { + rails.enableFormElement($(this)); + }); + + $document.on('click.rails', rails.linkClickSelector, function(e) { + var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey; + if (!rails.allowAction(link)) return rails.stopEverything(e); + + if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link); + + if (rails.isRemote(link)) { + if (metaClick && (!method || method === 'GET') && !data) { return true; } + + var handleRemote = rails.handleRemote(link); + // Response from rails.handleRemote() will either be false or a deferred object promise. + if (handleRemote === false) { + rails.enableElement(link); + } else { + handleRemote.fail( function() { rails.enableElement(link); } ); + } + return false; + + } else if (method) { + rails.handleMethod(link); + return false; + } + }); + + $document.on('click.rails', rails.buttonClickSelector, function(e) { + var button = $(this); + + if (!rails.allowAction(button) || !rails.isRemote(button)) return rails.stopEverything(e); + + if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button); + + var handleRemote = rails.handleRemote(button); + // Response from rails.handleRemote() will either be false or a deferred object promise. + if (handleRemote === false) { + rails.enableFormElement(button); + } else { + handleRemote.fail( function() { rails.enableFormElement(button); } ); + } + return false; + }); + + $document.on('change.rails', rails.inputChangeSelector, function(e) { + var link = $(this); + if (!rails.allowAction(link) || !rails.isRemote(link)) return rails.stopEverything(e); + + rails.handleRemote(link); + return false; + }); + + $document.on('submit.rails', rails.formSubmitSelector, function(e) { + var form = $(this), + remote = rails.isRemote(form), + blankRequiredInputs, + nonBlankFileInputs; + + if (!rails.allowAction(form)) return rails.stopEverything(e); + + // Skip other logic when required values are missing or file upload is present + if (form.attr('novalidate') === undefined) { + if (form.data('ujs:formnovalidate-button') === undefined) { + blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector, false); + if (blankRequiredInputs && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) { + return rails.stopEverything(e); + } + } else { + // Clear the formnovalidate in case the next button click is not on a formnovalidate button + // Not strictly necessary to do here, since it is also reset on each button click, but just to be certain + form.data('ujs:formnovalidate-button', undefined); + } + } + + if (remote) { + nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector); + if (nonBlankFileInputs) { + // Slight timeout so that the submit button gets properly serialized + // (make it easy for event handler to serialize form without disabled values) + setTimeout(function(){ rails.disableFormElements(form); }, 13); + var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]); + + // Re-enable form elements if event bindings return false (canceling normal form submission) + if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); } + + return aborted; + } + + rails.handleRemote(form); + return false; + + } else { + // Slight timeout so that the submit button gets properly serialized + setTimeout(function(){ rails.disableFormElements(form); }, 13); + } + }); + + $document.on('click.rails', rails.formInputClickSelector, function(event) { + var button = $(this); + + if (!rails.allowAction(button)) return rails.stopEverything(event); + + // Register the pressed submit button + var name = button.attr('name'), + data = name ? {name:name, value:button.val()} : null; + + var form = button.closest('form'); + if (form.length === 0) { + form = $('#' + button.attr('form')); + } + form.data('ujs:submit-button', data); + + // Save attributes from button + form.data('ujs:formnovalidate-button', button.attr('formnovalidate')); + form.data('ujs:submit-button-formaction', button.attr('formaction')); + form.data('ujs:submit-button-formmethod', button.attr('formmethod')); + }); + + $document.on('ajax:send.rails', rails.formSubmitSelector, function(event) { + if (this === event.target) rails.disableFormElements($(this)); + }); + + $document.on('ajax:complete.rails', rails.formSubmitSelector, function(event) { + if (this === event.target) rails.enableFormElements($(this)); + }); + + $(function(){ + rails.refreshCSRFTokens(); + }); + } + +})( jQuery ); +/** +* +* jquery.sparkline.js +* +* v2.1.3 +* (c) Splunk, Inc +* Contact: Gareth Watts (gareth@splunk.com) +* http://omnipotent.net/jquery.sparkline/ +* +* Generates inline sparkline charts from data supplied either to the method +* or inline in HTML +* +* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag +* (Firefox 2.0+, Safari, Opera, etc) +* +* License: New BSD License +* +* Copyright (c) 2012, Splunk Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* * Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* * Neither the name of Splunk Inc nor the names of its contributors may +* be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* +* Usage: +* $(selector).sparkline(values, options) +* +* If values is undefined or set to 'html' then the data values are read from the specified tag: +* <p>Sparkline: <span class="sparkline">1,4,6,6,8,5,3,5</span></p> +* $('.sparkline').sparkline(); +* There must be no spaces in the enclosed data set +* +* Otherwise values must be an array of numbers or null values +* <p>Sparkline: <span id="sparkline1">This text replaced if the browser is compatible</span></p> +* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5]) +* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5]) +* +* Values can also be specified in an HTML comment, or as a values attribute: +* <p>Sparkline: <span class="sparkline"><!--1,4,6,6,8,5,3,5 --></span></p> +* <p>Sparkline: <span class="sparkline" values="1,4,6,6,8,5,3,5"></span></p> +* $('.sparkline').sparkline(); +* +* For line charts, x values can also be specified: +* <p>Sparkline: <span class="sparkline">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p> +* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ]) +* +* By default, options should be passed in as the second argument to the sparkline function: +* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'}) +* +* Options can also be set by passing them on the tag itself. This feature is disabled by default though +* as there's a slight performance overhead: +* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true}) +* <p>Sparkline: <span class="sparkline" sparkType="bar" sparkBarColor="red">loading</span></p> +* Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionsPrefix) +* +* Supported options: +* lineColor - Color of the line used for the chart +* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart +* width - Width of the chart - Defaults to 3 times the number of values in pixels +* height - Height of the chart - Defaults to the height of the containing element +* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied +* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied +* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax +* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied +* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied +* composite - If true then don't erase any existing chart attached to the tag, but draw +* another chart over the top - Note that width and height are ignored if an +* existing chart is detected. +* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values' +* enableTagOptions - Whether to check tags for sparkline options +* tagOptionsPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark' +* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a +* hidden dom element, avoding a browser reflow +* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled, +* making the plugin perform much like it did in 1.x +* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled) +* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled +* defaults to false (highlights enabled) +* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase +* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body +* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied +* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis +* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis +* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip +* callback is given arguments of (sparkline, options, fields) +* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title +* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries) +* to control the format of the tooltip +* tooltipPrefix - A string to prepend to each field displayed in a tooltip +* tooltipSuffix - A string to append to each field displayed in a tooltip +* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true) +* tooltipValueLookups - An object or range map to map field values to tooltip strings +* (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win") +* numberFormatter - Optional callback for formatting numbers in tooltips +* numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to "," +* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "." +* numberDigitGroupCount - Number of digits between group separator - Defaults to 3 +* +* There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default), +* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box' +* line - Line chart. Options: +* spotColor - Set to '' to not end each line in a circular spot +* minSpotColor - If set, color of spot at minimum value +* maxSpotColor - If set, color of spot at maximum value +* spotRadius - Radius in pixels +* lineWidth - Width of line in pixels +* normalRangeMin +* normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal" +* or expected range of values +* normalRangeColor - Color to use for the above bar +* drawNormalOnTop - Draw the normal range above the chart fill color if true +* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart +* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable +* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable +* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map +* +* bar - Bar chart. Options: +* barColor - Color of bars for postive values +* negBarColor - Color of bars for negative values +* zeroColor - Color of bars with zero values +* nullColor - Color of bars with null values - Defaults to omitting the bar entirely +* barWidth - Width of bars in pixels +* colorMap - Optional mappnig of values to colors to override the *BarColor values above +* can be an Array of values to control the color of individual bars or a range map +* to specify colors for individual ranges of values +* barSpacing - Gap between bars in pixels +* zeroAxis - Centers the y-axis around zero if true +* +* tristate - Charts values of win (>0), lose (<0) or draw (=0) +* posBarColor - Color of win values +* negBarColor - Color of lose values +* zeroBarColor - Color of draw values +* barWidth - Width of bars in pixels +* barSpacing - Gap between bars in pixels +* colorMap - Optional mappnig of values to colors to override the *BarColor values above +* can be an Array of values to control the color of individual bars or a range map +* to specify colors for individual ranges of values +* +* discrete - Options: +* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height +* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor +* thresholdColor +* +* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ... +* options: +* targetColor - The color of the vertical target marker +* targetWidth - The width of the target marker in pixels +* performanceColor - The color of the performance measure horizontal bar +* rangeColors - Colors to use for each qualitative range background color +* +* pie - Pie chart. Options: +* sliceColors - An array of colors to use for pie slices +* offset - Angle in degrees to offset the first slice - Try -90 or +90 +* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border) +* borderColor - Color to use for the pie chart border - Defaults to #000 +* +* box - Box plot. Options: +* raw - Set to true to supply pre-computed plot points as values +* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier +* When set to false you can supply any number of values and the box plot will +* be computed for you. Default is false. +* showOutliers - Set to true (default) to display outliers as circles +* outlierIQR - Interquartile range used to determine outliers. Default 1.5 +* boxLineColor - Outline color of the box +* boxFillColor - Fill color for the box +* whiskerColor - Line color used for whiskers +* outlierLineColor - Outline color of outlier circles +* outlierFillColor - Fill color of the outlier circles +* spotRadius - Radius of outlier circles +* medianColor - Line color of the median line +* target - Draw a target cross hair at the supplied value (default undefined) +* +* +* +* Examples: +* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false }); +* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 }); +* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }): +* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' }); +* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' }); +* $('#pie').sparkline([1,1,2], { type:'pie' }); +*/ + +/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */ + + +(function(document, Math, undefined) { // performance/minified-size optimization +(function(factory) { + if(typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } else if (jQuery && !jQuery.fn.sparkline) { + factory(jQuery); + } +} +(function($) { + 'use strict'; + + var UNSET_OPTION = {}, + getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues, + remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap, + MouseHandler, Tooltip, barHighlightMixin, + line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles, + VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0; + + /** + * Default configuration settings + */ + getDefaults = function () { + return { + // Settings common to most/all chart types + common: { + type: 'line', + lineColor: '#00f', + fillColor: '#cdf', + defaultPixelsPerValue: 3, + width: 'auto', + height: 'auto', + composite: false, + tagValuesAttribute: 'values', + tagOptionsPrefix: 'spark', + enableTagOptions: false, + enableHighlight: true, + highlightLighten: 1.4, + tooltipSkipNull: true, + tooltipPrefix: '', + tooltipSuffix: '', + disableHiddenCheck: false, + numberFormatter: false, + numberDigitGroupCount: 3, + numberDigitGroupSep: ',', + numberDecimalMark: '.', + disableTooltips: false, + disableInteraction: false + }, + // Defaults for line charts + line: { + spotColor: '#f80', + highlightSpotColor: '#5f5', + highlightLineColor: '#f22', + spotRadius: 1.5, + minSpotColor: '#f80', + maxSpotColor: '#f80', + lineWidth: 1, + normalRangeMin: undefined, + normalRangeMax: undefined, + normalRangeColor: '#ccc', + drawNormalOnTop: false, + chartRangeMin: undefined, + chartRangeMax: undefined, + chartRangeMinX: undefined, + chartRangeMaxX: undefined, + tooltipFormat: new SPFormat('<span style="color: {{color}}">●</span> {{prefix}}{{y}}{{suffix}}') + }, + // Defaults for bar charts + bar: { + barColor: '#3366cc', + negBarColor: '#f44', + stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', + '#dd4477', '#0099c6', '#990099'], + zeroColor: undefined, + nullColor: undefined, + zeroAxis: true, + barWidth: 4, + barSpacing: 1, + chartRangeMax: undefined, + chartRangeMin: undefined, + chartRangeClip: false, + colorMap: undefined, + tooltipFormat: new SPFormat('<span style="color: {{color}}">●</span> {{prefix}}{{value}}{{suffix}}') + }, + // Defaults for tristate charts + tristate: { + barWidth: 4, + barSpacing: 1, + posBarColor: '#6f6', + negBarColor: '#f44', + zeroBarColor: '#999', + colorMap: {}, + tooltipFormat: new SPFormat('<span style="color: {{color}}">●</span> {{value:map}}'), + tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } } + }, + // Defaults for discrete charts + discrete: { + lineHeight: 'auto', + thresholdColor: undefined, + thresholdValue: 0, + chartRangeMax: undefined, + chartRangeMin: undefined, + chartRangeClip: false, + tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}') + }, + // Defaults for bullet charts + bullet: { + targetColor: '#f33', + targetWidth: 3, // width of the target bar in pixels + performanceColor: '#33f', + rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'], + base: undefined, // set this to a number to change the base start number + tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'), + tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} } + }, + // Defaults for pie charts + pie: { + offset: 0, + sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00', + '#dd4477', '#0099c6', '#990099'], + borderWidth: 0, + borderColor: '#000', + tooltipFormat: new SPFormat('<span style="color: {{color}}">●</span> {{value}} ({{percent.1}}%)') + }, + // Defaults for box plots + box: { + raw: false, + boxLineColor: '#000', + boxFillColor: '#cdf', + whiskerColor: '#000', + outlierLineColor: '#333', + outlierFillColor: '#fff', + medianColor: '#f00', + showOutliers: true, + outlierIQR: 1.5, + spotRadius: 1.5, + target: undefined, + targetColor: '#4a2', + chartRangeMax: undefined, + chartRangeMin: undefined, + tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'), + tooltipFormatFieldlistKey: 'field', + tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median', + uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier', + lw: 'Left Whisker', rw: 'Right Whisker'} } + } + }; + }; + + // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname + defaultStyles = '.jqstooltip { ' + + 'position: absolute;' + + 'left: 0px;' + + 'top: 0px;' + + 'visibility: hidden;' + + 'background: rgb(0, 0, 0) transparent;' + + 'background-color: rgba(0,0,0,0.6);' + + 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' + + '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' + + 'color: white;' + + 'font: 10px arial, san serif;' + + 'text-align: left;' + + 'white-space: nowrap;' + + 'padding: 5px;' + + 'border: 1px solid white;' + + 'box-sizing: content-box;' + + 'z-index: 10000;' + + '}' + + '.jqsfield { ' + + 'color: white;' + + 'font: 10px arial, san serif;' + + 'text-align: left;' + + '}'; + + /** + * Utilities + */ + + createClass = function (/* [baseclass, [mixin, ...]], definition */) { + var Class, args; + Class = function () { + this.init.apply(this, arguments); + }; + if (arguments.length > 1) { + if (arguments[0]) { + Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]); + Class._super = arguments[0].prototype; + } else { + Class.prototype = arguments[arguments.length - 1]; + } + if (arguments.length > 2) { + args = Array.prototype.slice.call(arguments, 1, -1); + args.unshift(Class.prototype); + $.extend.apply($, args); + } + } else { + Class.prototype = arguments[0]; + } + Class.prototype.cls = Class; + return Class; + }; + + /** + * Wraps a format string for tooltips + * {{x}} + * {{x.2} + * {{x:months}} + */ + $.SPFormatClass = SPFormat = createClass({ + fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g, + precre: /(\w+)\.(\d+)/, + + init: function (format, fclass) { + this.format = format; + this.fclass = fclass; + }, + + render: function (fieldset, lookups, options) { + var self = this, + fields = fieldset, + match, token, lookupkey, fieldvalue, prec; + return this.format.replace(this.fre, function () { + var lookup; + token = arguments[1]; + lookupkey = arguments[3]; + match = self.precre.exec(token); + if (match) { + prec = match[2]; + token = match[1]; + } else { + prec = false; + } + fieldvalue = fields[token]; + if (fieldvalue === undefined) { + return ''; + } + if (lookupkey && lookups && lookups[lookupkey]) { + lookup = lookups[lookupkey]; + if (lookup.get) { // RangeMap + return lookups[lookupkey].get(fieldvalue) || fieldvalue; + } else { + return lookups[lookupkey][fieldvalue] || fieldvalue; + } + } + if (isNumber(fieldvalue)) { + if (options.get('numberFormatter')) { + fieldvalue = options.get('numberFormatter')(fieldvalue); + } else { + fieldvalue = formatNumber(fieldvalue, prec, + options.get('numberDigitGroupCount'), + options.get('numberDigitGroupSep'), + options.get('numberDecimalMark')); + } + } + return fieldvalue; + }); + } + }); + + // convience method to avoid needing the new operator + $.spformat = function(format, fclass) { + return new SPFormat(format, fclass); + }; + + clipval = function (val, min, max) { + if (val < min) { + return min; + } + if (val > max) { + return max; + } + return val; + }; + + quartile = function (values, q) { + var vl; + if (q === 2) { + vl = Math.floor(values.length / 2); + return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2; + } else { + if (values.length % 2 ) { // odd + vl = (values.length * q + q) / 4; + return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1]; + } else { //even + vl = (values.length * q + 2) / 4; + return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1]; + + } + } + }; + + normalizeValue = function (val) { + var nf; + switch (val) { + case 'undefined': + val = undefined; + break; + case 'null': + val = null; + break; + case 'true': + val = true; + break; + case 'false': + val = false; + break; + default: + nf = parseFloat(val); + if (val == nf) { + val = nf; + } + } + return val; + }; + + normalizeValues = function (vals) { + var i, result = []; + for (i = vals.length; i--;) { + result[i] = normalizeValue(vals[i]); + } + return result; + }; + + remove = function (vals, filter) { + var i, vl, result = []; + for (i = 0, vl = vals.length; i < vl; i++) { + if (vals[i] !== filter) { + result.push(vals[i]); + } + } + return result; + }; + + isNumber = function (num) { + return !isNaN(parseFloat(num)) && isFinite(num); + }; + + formatNumber = function (num, prec, groupsize, groupsep, decsep) { + var p, i; + num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split(''); + p = (p = $.inArray('.', num)) < 0 ? num.length : p; + if (p < num.length) { + num[p] = decsep; + } + for (i = p - groupsize; i > 0; i -= groupsize) { + num.splice(i, 0, groupsep); + } + return num.join(''); + }; + + // determine if all values of an array match a value + // returns true if the array is empty + all = function (val, arr, ignoreNull) { + var i; + for (i = arr.length; i--; ) { + if (ignoreNull && arr[i] === null) continue; + if (arr[i] !== val) { + return false; + } + } + return true; + }; + + // sums the numeric values in an array, ignoring other values + sum = function (vals) { + var total = 0, i; + for (i = vals.length; i--;) { + total += typeof vals[i] === 'number' ? vals[i] : 0; + } + return total; + }; + + ensureArray = function (val) { + return $.isArray(val) ? val : [val]; + }; + + // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/ + addCSS = function(css) { + var tag, iefail; + if (document.createStyleSheet) { + try { + document.createStyleSheet().cssText = css; + return; + } catch (e) { + // IE <= 9 maxes out at 31 stylesheets; inject into page instead. + iefail = true; + } + } + tag = document.createElement('style'); + tag.type = 'text/css'; + document.getElementsByTagName('head')[0].appendChild(tag); + if (iefail) { + document.styleSheets[document.styleSheets.length - 1].cssText = css; + } else { + tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css; + } + }; + + // Provide a cross-browser interface to a few simple drawing primitives + $.fn.simpledraw = function (width, height, useExisting, interact) { + var target, mhandler; + if (useExisting && (target = this.data('_jqs_vcanvas'))) { + return target; + } + + if ($.fn.sparkline.canvas === false) { + // We've already determined that neither Canvas nor VML are available + return false; + + } else if ($.fn.sparkline.canvas === undefined) { + // No function defined yet -- need to see if we support Canvas or VML + var el = document.createElement('canvas'); + if (!!(el.getContext && el.getContext('2d'))) { + // Canvas is available + $.fn.sparkline.canvas = function(width, height, target, interact) { + return new VCanvas_canvas(width, height, target, interact); + }; + } else if (document.namespaces && !document.namespaces.v) { + // VML is available + document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML'); + $.fn.sparkline.canvas = function(width, height, target, interact) { + return new VCanvas_vml(width, height, target); + }; + } else { + // Neither Canvas nor VML are available + $.fn.sparkline.canvas = false; + return false; + } + } + + if (width === undefined) { + width = $(this).innerWidth(); + } + if (height === undefined) { + height = $(this).innerHeight(); + } + + target = $.fn.sparkline.canvas(width, height, this, interact); + + mhandler = $(this).data('_jqs_mhandler'); + if (mhandler) { + mhandler.registerCanvas(target); + } + return target; + }; + + $.fn.cleardraw = function () { + var target = this.data('_jqs_vcanvas'); + if (target) { + target.reset(); + } + }; + + $.RangeMapClass = RangeMap = createClass({ + init: function (map) { + var key, range, rangelist = []; + for (key in map) { + if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) { + range = key.split(':'); + range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]); + range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]); + range[2] = map[key]; + rangelist.push(range); + } + } + this.map = map; + this.rangelist = rangelist || false; + }, + + get: function (value) { + var rangelist = this.rangelist, + i, range, result; + if ((result = this.map[value]) !== undefined) { + return result; + } + if (rangelist) { + for (i = rangelist.length; i--;) { + range = rangelist[i]; + if (range[0] <= value && range[1] >= value) { + return range[2]; + } + } + } + return undefined; + } + }); + + // Convenience function + $.range_map = function(map) { + return new RangeMap(map); + }; + + MouseHandler = createClass({ + init: function (el, options) { + var $el = $(el); + this.$el = $el; + this.options = options; + this.currentPageX = 0; + this.currentPageY = 0; + this.el = el; + this.splist = []; + this.tooltip = null; + this.over = false; + this.displayTooltips = !options.get('disableTooltips'); + this.highlightEnabled = !options.get('disableHighlight'); + }, + + registerSparkline: function (sp) { + this.splist.push(sp); + if (this.over) { + this.updateDisplay(); + } + }, + + registerCanvas: function (canvas) { + var $canvas = $(canvas.canvas); + this.canvas = canvas; + this.$canvas = $canvas; + $canvas.mouseenter($.proxy(this.mouseenter, this)); + $canvas.mouseleave($.proxy(this.mouseleave, this)); + $canvas.click($.proxy(this.mouseclick, this)); + }, + + reset: function (removeTooltip) { + this.splist = []; + if (this.tooltip && removeTooltip) { + this.tooltip.remove(); + this.tooltip = undefined; + } + }, + + mouseclick: function (e) { + var clickEvent = $.Event('sparklineClick'); + clickEvent.originalEvent = e; + clickEvent.sparklines = this.splist; + this.$el.trigger(clickEvent); + }, + + mouseenter: function (e) { + $(document.body).unbind('mousemove.jqs'); + $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this)); + this.over = true; + this.currentPageX = e.pageX; + this.currentPageY = e.pageY; + this.currentEl = e.target; + if (!this.tooltip && this.displayTooltips) { + this.tooltip = new Tooltip(this.options); + this.tooltip.updatePosition(e.pageX, e.pageY); + } + this.updateDisplay(); + }, + + mouseleave: function () { + $(document.body).unbind('mousemove.jqs'); + var splist = this.splist, + spcount = splist.length, + needsRefresh = false, + sp, i; + this.over = false; + this.currentEl = null; + + if (this.tooltip) { + this.tooltip.remove(); + this.tooltip = null; + } + + for (i = 0; i < spcount; i++) { + sp = splist[i]; + if (sp.clearRegionHighlight()) { + needsRefresh = true; + } + } + + if (needsRefresh) { + this.canvas.render(); + } + }, + + mousemove: function (e) { + this.currentPageX = e.pageX; + this.currentPageY = e.pageY; + this.currentEl = e.target; + if (this.tooltip) { + this.tooltip.updatePosition(e.pageX, e.pageY); + } + this.updateDisplay(); + }, + + updateDisplay: function () { + var splist = this.splist, + spcount = splist.length, + needsRefresh = false, + offset = this.$canvas.offset(), + localX = this.currentPageX - offset.left, + localY = this.currentPageY - offset.top, + tooltiphtml, sp, i, result, changeEvent; + if (!this.over) { + return; + } + for (i = 0; i < spcount; i++) { + sp = splist[i]; + result = sp.setRegionHighlight(this.currentEl, localX, localY); + if (result) { + needsRefresh = true; + } + } + if (needsRefresh) { + changeEvent = $.Event('sparklineRegionChange'); + changeEvent.sparklines = this.splist; + this.$el.trigger(changeEvent); + if (this.tooltip) { + tooltiphtml = ''; + for (i = 0; i < spcount; i++) { + sp = splist[i]; + tooltiphtml += sp.getCurrentRegionTooltip(); + } + this.tooltip.setContent(tooltiphtml); + } + if (!this.disableHighlight) { + this.canvas.render(); + } + } + if (result === null) { + this.mouseleave(); + } + } + }); + + + Tooltip = createClass({ + sizeStyle: 'position: static !important;' + + 'display: block !important;' + + 'visibility: hidden !important;' + + 'float: left !important;', + + init: function (options) { + var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'), + sizetipStyle = this.sizeStyle, + offset; + this.container = options.get('tooltipContainer') || document.body; + this.tooltipOffsetX = options.get('tooltipOffsetX', 10); + this.tooltipOffsetY = options.get('tooltipOffsetY', 12); + // remove any previous lingering tooltip + $('#jqssizetip').remove(); + $('#jqstooltip').remove(); + this.sizetip = $('<div/>', { + id: 'jqssizetip', + style: sizetipStyle, + 'class': tooltipClassname + }); + this.tooltip = $('<div/>', { + id: 'jqstooltip', + 'class': tooltipClassname + }).appendTo(this.container); + // account for the container's location + offset = this.tooltip.offset(); + this.offsetLeft = offset.left; + this.offsetTop = offset.top; + this.hidden = true; + $(window).unbind('resize.jqs scroll.jqs'); + $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this)); + this.updateWindowDims(); + }, + + updateWindowDims: function () { + this.scrollTop = $(window).scrollTop(); + this.scrollLeft = $(window).scrollLeft(); + this.scrollRight = this.scrollLeft + $(window).width(); + this.updatePosition(); + }, + + getSize: function (content) { + this.sizetip.html(content).appendTo(this.container); + this.width = this.sizetip.width() + 1; + this.height = this.sizetip.height(); + this.sizetip.remove(); + }, + + setContent: function (content) { + if (!content) { + this.tooltip.css('visibility', 'hidden'); + this.hidden = true; + return; + } + this.getSize(content); + this.tooltip.html(content) + .css({ + 'width': this.width, + 'height': this.height, + 'visibility': 'visible' + }); + if (this.hidden) { + this.hidden = false; + this.updatePosition(); + } + }, + + updatePosition: function (x, y) { + if (x === undefined) { + if (this.mousex === undefined) { + return; + } + x = this.mousex - this.offsetLeft; + y = this.mousey - this.offsetTop; + + } else { + this.mousex = x = x - this.offsetLeft; + this.mousey = y = y - this.offsetTop; + } + if (!this.height || !this.width || this.hidden) { + return; + } + + y -= this.height + this.tooltipOffsetY; + x += this.tooltipOffsetX; + + if (y < this.scrollTop) { + y = this.scrollTop; + } + if (x < this.scrollLeft) { + x = this.scrollLeft; + } else if (x + this.width > this.scrollRight) { + x = this.scrollRight - this.width; + } + + this.tooltip.css({ + 'left': x, + 'top': y + }); + }, + + remove: function () { + this.tooltip.remove(); + this.sizetip.remove(); + this.sizetip = this.tooltip = undefined; + $(window).unbind('resize.jqs scroll.jqs'); + } + }); + + initStyles = function() { + addCSS(defaultStyles); + }; + + $(initStyles); + + pending = []; + $.fn.sparkline = function (userValues, userOptions) { + return this.each(function () { + var options = new $.fn.sparkline.options(this, userOptions), + $this = $(this), + render, i; + render = function () { + var values, width, height, tmp, mhandler, sp, vals; + if (userValues === 'html' || userValues === undefined) { + vals = this.getAttribute(options.get('tagValuesAttribute')); + if (vals === undefined || vals === null) { + vals = $this.html(); + } + values = vals.replace(/(^\s*<!--)|(-->\s*$)|\s+/g, '').split(','); + } else { + values = userValues; + } + + width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width'); + if (options.get('height') === 'auto') { + if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) { + // must be a better way to get the line height + tmp = document.createElement('span'); + tmp.innerHTML = 'a'; + $this.html(tmp); + height = $(tmp).innerHeight() || $(tmp).height(); + $(tmp).remove(); + tmp = null; + } + } else { + height = options.get('height'); + } + + if (!options.get('disableInteraction')) { + mhandler = $.data(this, '_jqs_mhandler'); + if (!mhandler) { + mhandler = new MouseHandler(this, options); + $.data(this, '_jqs_mhandler', mhandler); + } else if (!options.get('composite')) { + mhandler.reset(); + } + } else { + mhandler = false; + } + + if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) { + if (!$.data(this, '_jqs_errnotify')) { + alert('Attempted to attach a composite sparkline to an element with no existing sparkline'); + $.data(this, '_jqs_errnotify', true); + } + return; + } + + sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height); + + sp.render(); + + if (mhandler) { + mhandler.registerSparkline(sp); + } + }; + if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) { + if (!options.get('composite') && $.data(this, '_jqs_pending')) { + // remove any existing references to the element + for (i = pending.length; i; i--) { + if (pending[i - 1][0] == this) { + pending.splice(i - 1, 1); + } + } + } + pending.push([this, render]); + $.data(this, '_jqs_pending', true); + } else { + render.call(this); + } + }); + }; + + $.fn.sparkline.defaults = getDefaults(); + + + $.sparkline_display_visible = function () { + var el, i, pl; + var done = []; + for (i = 0, pl = pending.length; i < pl; i++) { + el = pending[i][0]; + if ($(el).is(':visible') && !$(el).parents().is(':hidden')) { + pending[i][1].call(el); + $.data(pending[i][0], '_jqs_pending', false); + done.push(i); + } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) { + // element has been inserted and removed from the DOM + // If it was not yet inserted into the dom then the .data request + // will return true. + // removing from the dom causes the data to be removed. + $.data(pending[i][0], '_jqs_pending', false); + done.push(i); + } + } + for (i = done.length; i; i--) { + pending.splice(done[i - 1], 1); + } + }; + + + /** + * User option handler + */ + $.fn.sparkline.options = createClass({ + init: function (tag, userOptions) { + var extendedOptions, defaults, base, tagOptionType; + this.userOptions = userOptions = userOptions || {}; + this.tag = tag; + this.tagValCache = {}; + defaults = $.fn.sparkline.defaults; + base = defaults.common; + this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix); + + tagOptionType = this.getTagSetting('type'); + if (tagOptionType === UNSET_OPTION) { + extendedOptions = defaults[userOptions.type || base.type]; + } else { + extendedOptions = defaults[tagOptionType]; + } + this.mergedOptions = $.extend({}, base, extendedOptions, userOptions); + }, + + + getTagSetting: function (key) { + var prefix = this.tagOptionsPrefix, + val, i, pairs, keyval; + if (prefix === false || prefix === undefined) { + return UNSET_OPTION; + } + if (this.tagValCache.hasOwnProperty(key)) { + val = this.tagValCache.key; + } else { + val = this.tag.getAttribute(prefix + key); + if (val === undefined || val === null) { + val = UNSET_OPTION; + } else if (val.substr(0, 1) === '[') { + val = val.substr(1, val.length - 2).split(','); + for (i = val.length; i--;) { + val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, '')); + } + } else if (val.substr(0, 1) === '{') { + pairs = val.substr(1, val.length - 2).split(','); + val = {}; + for (i = pairs.length; i--;) { + keyval = pairs[i].split(':', 2); + val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, '')); + } + } else { + val = normalizeValue(val); + } + this.tagValCache.key = val; + } + return val; + }, + + get: function (key, defaultval) { + var tagOption = this.getTagSetting(key), + result; + if (tagOption !== UNSET_OPTION) { + return tagOption; + } + return (result = this.mergedOptions[key]) === undefined ? defaultval : result; + } + }); + + + $.fn.sparkline._base = createClass({ + disabled: false, + + init: function (el, values, options, width, height) { + this.el = el; + this.$el = $(el); + this.values = values; + this.options = options; + this.width = width; + this.height = height; + this.currentRegion = undefined; + }, + + /** + * Setup the canvas + */ + initTarget: function () { + var interactive = !this.options.get('disableInteraction'); + if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) { + this.disabled = true; + } else { + this.canvasWidth = this.target.pixelWidth; + this.canvasHeight = this.target.pixelHeight; + } + }, + + /** + * Actually render the chart to the canvas + */ + render: function () { + if (this.disabled) { + this.el.innerHTML = ''; + return false; + } + return true; + }, + + /** + * Return a region id for a given x/y co-ordinate + */ + getRegion: function (x, y) { + }, + + /** + * Highlight an item based on the moused-over x,y co-ordinate + */ + setRegionHighlight: function (el, x, y) { + var currentRegion = this.currentRegion, + highlightEnabled = !this.options.get('disableHighlight'), + newRegion; + if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) { + return null; + } + newRegion = this.getRegion(el, x, y); + if (currentRegion !== newRegion) { + if (currentRegion !== undefined && highlightEnabled) { + this.removeHighlight(); + } + this.currentRegion = newRegion; + if (newRegion !== undefined && highlightEnabled) { + this.renderHighlight(); + } + return true; + } + return false; + }, + + /** + * Reset any currently highlighted item + */ + clearRegionHighlight: function () { + if (this.currentRegion !== undefined) { + this.removeHighlight(); + this.currentRegion = undefined; + return true; + } + return false; + }, + + renderHighlight: function () { + this.changeHighlight(true); + }, + + removeHighlight: function () { + this.changeHighlight(false); + }, + + changeHighlight: function (highlight) {}, + + /** + * Fetch the HTML to display as a tooltip + */ + getCurrentRegionTooltip: function () { + var options = this.options, + header = '', + entries = [], + fields, formats, formatlen, fclass, text, i, + showFields, showFieldsKey, newFields, fv, + formatter, format, fieldlen, j; + if (this.currentRegion === undefined) { + return ''; + } + fields = this.getCurrentRegionFields(); + formatter = options.get('tooltipFormatter'); + if (formatter) { + return formatter(this, options, fields); + } + if (options.get('tooltipChartTitle')) { + header += '<div class="jqs jqstitle">' + options.get('tooltipChartTitle') + '</div>\n'; + } + formats = this.options.get('tooltipFormat'); + if (!formats) { + return ''; + } + if (!$.isArray(formats)) { + formats = [formats]; + } + if (!$.isArray(fields)) { + fields = [fields]; + } + showFields = this.options.get('tooltipFormatFieldlist'); + showFieldsKey = this.options.get('tooltipFormatFieldlistKey'); + if (showFields && showFieldsKey) { + // user-selected ordering of fields + newFields = []; + for (i = fields.length; i--;) { + fv = fields[i][showFieldsKey]; + if ((j = $.inArray(fv, showFields)) != -1) { + newFields[j] = fields[i]; + } + } + fields = newFields; + } + formatlen = formats.length; + fieldlen = fields.length; + for (i = 0; i < formatlen; i++) { + format = formats[i]; + if (typeof format === 'string') { + format = new SPFormat(format); + } + fclass = format.fclass || 'jqsfield'; + for (j = 0; j < fieldlen; j++) { + if (!fields[j].isNull || !options.get('tooltipSkipNull')) { + $.extend(fields[j], { + prefix: options.get('tooltipPrefix'), + suffix: options.get('tooltipSuffix') + }); + text = format.render(fields[j], options.get('tooltipValueLookups'), options); + entries.push('<div class="' + fclass + '">' + text + '</div>'); + } + } + } + if (entries.length) { + return header + entries.join('\n'); + } + return ''; + }, + + getCurrentRegionFields: function () {}, + + calcHighlightColor: function (color, options) { + var highlightColor = options.get('highlightColor'), + lighten = options.get('highlightLighten'), + parse, mult, rgbnew, i; + if (highlightColor) { + return highlightColor; + } + if (lighten) { + // extract RGB values + parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color); + if (parse) { + rgbnew = []; + mult = color.length === 4 ? 16 : 1; + for (i = 0; i < 3; i++) { + rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255); + } + return 'rgb(' + rgbnew.join(',') + ')'; + } + + } + return color; + } + + }); + + barHighlightMixin = { + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + target = this.target, + shapeids = this.regionShapes[currentRegion], + newShapes; + // will be null if the region value was null + if (shapeids) { + newShapes = this.renderRegion(currentRegion, highlight); + if ($.isArray(newShapes) || $.isArray(shapeids)) { + target.replaceWithShapes(shapeids, newShapes); + this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) { + return newShape.id; + }); + } else { + target.replaceWithShape(shapeids, newShapes); + this.regionShapes[currentRegion] = newShapes.id; + } + } + }, + + render: function () { + var values = this.values, + target = this.target, + regionShapes = this.regionShapes, + shapes, ids, i, j; + + if (!this.cls._super.render.call(this)) { + return; + } + for (i = values.length; i--;) { + shapes = this.renderRegion(i); + if (shapes) { + if ($.isArray(shapes)) { + ids = []; + for (j = shapes.length; j--;) { + shapes[j].append(); + ids.push(shapes[j].id); + } + regionShapes[i] = ids; + } else { + shapes.append(); + regionShapes[i] = shapes.id; // store just the shapeid + } + } else { + // null value + regionShapes[i] = null; + } + } + target.render(); + } + }; + + /** + * Line charts + */ + $.fn.sparkline.line = line = createClass($.fn.sparkline._base, { + type: 'line', + + init: function (el, values, options, width, height) { + line._super.init.call(this, el, values, options, width, height); + this.vertices = []; + this.regionMap = []; + this.xvalues = []; + this.yvalues = []; + this.yminmax = []; + this.hightlightSpotId = null; + this.lastShapeId = null; + this.initTarget(); + }, + + getRegion: function (el, x, y) { + var i, + regionMap = this.regionMap; // maps regions to value positions + for (i = regionMap.length; i--;) { + if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) { + return regionMap[i][2]; + } + } + return undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.yvalues[currentRegion] === null, + x: this.xvalues[currentRegion], + y: this.yvalues[currentRegion], + color: this.options.get('lineColor'), + fillColor: this.options.get('fillColor'), + offset: currentRegion + }; + }, + + renderHighlight: function () { + var currentRegion = this.currentRegion, + target = this.target, + vertex = this.vertices[currentRegion], + options = this.options, + spotRadius = options.get('spotRadius'), + highlightSpotColor = options.get('highlightSpotColor'), + highlightLineColor = options.get('highlightLineColor'), + highlightSpot, highlightLine; + + if (!vertex) { + return; + } + if (spotRadius && highlightSpotColor) { + highlightSpot = target.drawCircle(vertex[0], vertex[1], + spotRadius, undefined, highlightSpotColor); + this.highlightSpotId = highlightSpot.id; + target.insertAfterShape(this.lastShapeId, highlightSpot); + } + if (highlightLineColor) { + highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0], + this.canvasTop + this.canvasHeight, highlightLineColor); + this.highlightLineId = highlightLine.id; + target.insertAfterShape(this.lastShapeId, highlightLine); + } + }, + + removeHighlight: function () { + var target = this.target; + if (this.highlightSpotId) { + target.removeShapeId(this.highlightSpotId); + this.highlightSpotId = null; + } + if (this.highlightLineId) { + target.removeShapeId(this.highlightLineId); + this.highlightLineId = null; + } + }, + + scanValues: function () { + var values = this.values, + valcount = values.length, + xvalues = this.xvalues, + yvalues = this.yvalues, + yminmax = this.yminmax, + i, val, isStr, isArray, sp; + for (i = 0; i < valcount; i++) { + val = values[i]; + isStr = typeof(values[i]) === 'string'; + isArray = typeof(values[i]) === 'object' && values[i] instanceof Array; + sp = isStr && values[i].split(':'); + if (isStr && sp.length === 2) { // x:y + xvalues.push(Number(sp[0])); + yvalues.push(Number(sp[1])); + yminmax.push(Number(sp[1])); + } else if (isArray) { + xvalues.push(val[0]); + yvalues.push(val[1]); + yminmax.push(val[1]); + } else { + xvalues.push(i); + if (values[i] === null || values[i] === 'null') { + yvalues.push(null); + } else { + yvalues.push(Number(val)); + yminmax.push(Number(val)); + } + } + } + if (this.options.get('xvalues')) { + xvalues = this.options.get('xvalues'); + } + + this.maxy = this.maxyorg = Math.max.apply(Math, yminmax); + this.miny = this.minyorg = Math.min.apply(Math, yminmax); + + this.maxx = Math.max.apply(Math, xvalues); + this.minx = Math.min.apply(Math, xvalues); + + this.xvalues = xvalues; + this.yvalues = yvalues; + this.yminmax = yminmax; + + }, + + processRangeOptions: function () { + var options = this.options, + normalRangeMin = options.get('normalRangeMin'), + normalRangeMax = options.get('normalRangeMax'); + + if (normalRangeMin !== undefined) { + if (normalRangeMin < this.miny) { + this.miny = normalRangeMin; + } + if (normalRangeMax > this.maxy) { + this.maxy = normalRangeMax; + } + } + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) { + this.miny = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) { + this.maxy = options.get('chartRangeMax'); + } + if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) { + this.minx = options.get('chartRangeMinX'); + } + if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) { + this.maxx = options.get('chartRangeMaxX'); + } + + }, + + drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) { + var normalRangeMin = this.options.get('normalRangeMin'), + normalRangeMax = this.options.get('normalRangeMax'), + ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))), + height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey); + this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append(); + }, + + render: function () { + var options = this.options, + target = this.target, + canvasWidth = this.canvasWidth, + canvasHeight = this.canvasHeight, + vertices = this.vertices, + spotRadius = options.get('spotRadius'), + regionMap = this.regionMap, + rangex, rangey, yvallast, + canvasTop, canvasLeft, + vertex, path, paths, x, y, xnext, xpos, xposnext, + last, next, yvalcount, lineShapes, fillShapes, plen, + valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i; + + if (!line._super.render.call(this)) { + return; + } + + this.scanValues(); + this.processRangeOptions(); + + xvalues = this.xvalues; + yvalues = this.yvalues; + + if (!this.yminmax.length || this.yvalues.length < 2) { + // empty or all null valuess + return; + } + + canvasTop = canvasLeft = 0; + + rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx; + rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny; + yvallast = this.yvalues.length - 1; + + if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) { + spotRadius = 0; + } + if (spotRadius) { + // adjust the canvas size as required so that spots will fit + hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction'); + if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) { + canvasHeight -= Math.ceil(spotRadius); + } + if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) { + canvasHeight -= Math.ceil(spotRadius); + canvasTop += Math.ceil(spotRadius); + } + if (hlSpotsEnabled || + ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) { + canvasLeft += Math.ceil(spotRadius); + canvasWidth -= Math.ceil(spotRadius); + } + if (hlSpotsEnabled || options.get('spotColor') || + (options.get('minSpotColor') || options.get('maxSpotColor') && + (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) { + canvasWidth -= Math.ceil(spotRadius); + } + } + + + canvasHeight--; + + if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) { + this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); + } + + path = []; + paths = [path]; + last = next = null; + yvalcount = yvalues.length; + for (i = 0; i < yvalcount; i++) { + x = xvalues[i]; + xnext = xvalues[i + 1]; + y = yvalues[i]; + xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)); + xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth; + next = xpos + ((xposnext - xpos) / 2); + regionMap[i] = [last || 0, next, i]; + last = next; + if (y === null) { + if (i) { + if (yvalues[i - 1] !== null) { + path = []; + paths.push(path); + } + vertices.push(null); + } + } else { + if (y < this.miny) { + y = this.miny; + } + if (y > this.maxy) { + y = this.maxy; + } + if (!path.length) { + // previous value was null + path.push([xpos, canvasTop + canvasHeight]); + } + vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))]; + path.push(vertex); + vertices.push(vertex); + } + } + + lineShapes = []; + fillShapes = []; + plen = paths.length; + for (i = 0; i < plen; i++) { + path = paths[i]; + if (path.length) { + if (options.get('fillColor')) { + path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]); + fillShapes.push(path.slice(0)); + path.pop(); + } + // if there's only a single point in this path, then we want to display it + // as a vertical line which means we keep path[0] as is + if (path.length > 2) { + // else we want the first value + path[0] = [path[0][0], path[1][1]]; + } + lineShapes.push(path); + } + } + + // draw the fill first, then optionally the normal range, then the line on top of that + plen = fillShapes.length; + for (i = 0; i < plen; i++) { + target.drawShape(fillShapes[i], + options.get('fillColor'), options.get('fillColor')).append(); + } + + if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) { + this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey); + } + + plen = lineShapes.length; + for (i = 0; i < plen; i++) { + target.drawShape(lineShapes[i], options.get('lineColor'), undefined, + options.get('lineWidth')).append(); + } + + if (spotRadius && options.get('valueSpots')) { + valueSpots = options.get('valueSpots'); + if (valueSpots.get === undefined) { + valueSpots = new RangeMap(valueSpots); + } + for (i = 0; i < yvalcount; i++) { + color = valueSpots.get(yvalues[i]); + if (color) { + target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))), + spotRadius, undefined, + color).append(); + } + } + + } + if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) { + target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))), + spotRadius, undefined, + options.get('spotColor')).append(); + } + if (this.maxy !== this.minyorg) { + if (spotRadius && options.get('minSpotColor')) { + x = xvalues[$.inArray(this.minyorg, yvalues)]; + target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))), + spotRadius, undefined, + options.get('minSpotColor')).append(); + } + if (spotRadius && options.get('maxSpotColor')) { + x = xvalues[$.inArray(this.maxyorg, yvalues)]; + target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)), + canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))), + spotRadius, undefined, + options.get('maxSpotColor')).append(); + } + } + + this.lastShapeId = target.getLastShapeId(); + this.canvasTop = canvasTop; + target.render(); + } + }); + + /** + * Bar charts + */ + $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'bar', + + init: function (el, values, options, width, height) { + var barWidth = parseInt(options.get('barWidth'), 10), + barSpacing = parseInt(options.get('barSpacing'), 10), + chartRangeMin = options.get('chartRangeMin'), + chartRangeMax = options.get('chartRangeMax'), + chartRangeClip = options.get('chartRangeClip'), + stackMin = Infinity, + stackMax = -Infinity, + isStackString, groupMin, groupMax, stackRanges, + numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax, + stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf; + bar._super.init.call(this, el, values, options, width, height); + + // scan values to determine whether to stack bars + for (i = 0, vlen = values.length; i < vlen; i++) { + val = values[i]; + isStackString = typeof(val) === 'string' && val.indexOf(':') > -1; + if (isStackString || $.isArray(val)) { + stacked = true; + if (isStackString) { + val = values[i] = normalizeValues(val.split(':')); + } + val = remove(val, null); // min/max will treat null as zero + groupMin = Math.min.apply(Math, val); + groupMax = Math.max.apply(Math, val); + if (groupMin < stackMin) { + stackMin = groupMin; + } + if (groupMax > stackMax) { + stackMax = groupMax; + } + } + } + + this.stacked = stacked; + this.regionShapes = {}; + this.barWidth = barWidth; + this.barSpacing = barSpacing; + this.totalBarWidth = barWidth + barSpacing; + this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); + + this.initTarget(); + + if (chartRangeClip) { + clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin; + clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax; + } + + numValues = []; + stackRanges = stacked ? [] : numValues; + var stackTotals = []; + var stackRangesNeg = []; + for (i = 0, vlen = values.length; i < vlen; i++) { + if (stacked) { + vlist = values[i]; + values[i] = svals = []; + stackTotals[i] = 0; + stackRanges[i] = stackRangesNeg[i] = 0; + for (j = 0, slen = vlist.length; j < slen; j++) { + val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j]; + if (val !== null) { + if (val > 0) { + stackTotals[i] += val; + } + if (stackMin < 0 && stackMax > 0) { + if (val < 0) { + stackRangesNeg[i] += Math.abs(val); + } else { + stackRanges[i] += val; + } + } else { + stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin)); + } + numValues.push(val); + } + } + } else { + val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i]; + val = values[i] = normalizeValue(val); + if (val !== null) { + numValues.push(val); + } + } + } + this.max = max = Math.max.apply(Math, numValues); + this.min = min = Math.min.apply(Math, numValues); + this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max; + this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min; + + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) { + min = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) { + max = options.get('chartRangeMax'); + } + + this.zeroAxis = zeroAxis = options.get('zeroAxis', true); + if (min <= 0 && max >= 0 && zeroAxis) { + xaxisOffset = 0; + } else if (zeroAxis == false) { + xaxisOffset = min; + } else if (min > 0) { + xaxisOffset = min; + } else { + xaxisOffset = max; + } + this.xaxisOffset = xaxisOffset; + + range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min; + + // as we plot zero/min values a single pixel line, we add a pixel to all other + // values - Reduce the effective canvas size to suit + this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1; + + if (min < xaxisOffset) { + yMaxCalc = (stacked && max >= 0) ? stackMax : max; + yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight; + if (yoffset !== Math.ceil(yoffset)) { + this.canvasHeightEf -= 2; + yoffset = Math.ceil(yoffset); + } + } else { + yoffset = this.canvasHeight; + } + this.yoffset = yoffset; + + if ($.isArray(options.get('colorMap'))) { + this.colorMapByIndex = options.get('colorMap'); + this.colorMapByValue = null; + } else { + this.colorMapByIndex = null; + this.colorMapByValue = options.get('colorMap'); + if (this.colorMapByValue && this.colorMapByValue.get === undefined) { + this.colorMapByValue = new RangeMap(this.colorMapByValue); + } + } + + this.range = range; + }, + + getRegion: function (el, x, y) { + var result = Math.floor(x / this.totalBarWidth); + return (result < 0 || result >= this.values.length) ? undefined : result; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion, + values = ensureArray(this.values[currentRegion]), + result = [], + value, i; + for (i = values.length; i--;) { + value = values[i]; + result.push({ + isNull: value === null, + value: value, + color: this.calcColor(i, value, currentRegion), + offset: currentRegion + }); + } + return result; + }, + + calcColor: function (stacknum, value, valuenum) { + var colorMapByIndex = this.colorMapByIndex, + colorMapByValue = this.colorMapByValue, + options = this.options, + color, newColor; + if (this.stacked) { + color = options.get('stackedBarColor'); + } else { + color = (value < 0) ? options.get('negBarColor') : options.get('barColor'); + } + if (value === 0 && options.get('zeroColor') !== undefined) { + color = options.get('zeroColor'); + } + if (colorMapByValue && (newColor = colorMapByValue.get(value))) { + color = newColor; + } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { + color = colorMapByIndex[valuenum]; + } + return $.isArray(color) ? color[stacknum % color.length] : color; + }, + + /** + * Render bar(s) for a region + */ + renderRegion: function (valuenum, highlight) { + var vals = this.values[valuenum], + options = this.options, + xaxisOffset = this.xaxisOffset, + result = [], + range = this.range, + stacked = this.stacked, + target = this.target, + x = valuenum * this.totalBarWidth, + canvasHeightEf = this.canvasHeightEf, + yoffset = this.yoffset, + y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin; + + vals = $.isArray(vals) ? vals : [vals]; + valcount = vals.length; + val = vals[0]; + isNull = all(null, vals); + allMin = all(xaxisOffset, vals, true); + + if (isNull) { + if (options.get('nullColor')) { + color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options); + y = (yoffset > 0) ? yoffset - 1 : yoffset; + return target.drawRect(x, y, this.barWidth - 1, 0, color, color); + } else { + return undefined; + } + } + yoffsetNeg = yoffset; + for (i = 0; i < valcount; i++) { + val = vals[i]; + + if (stacked && val === xaxisOffset) { + if (!allMin || minPlotted) { + continue; + } + minPlotted = true; + } + + if (range > 0) { + height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1; + } else { + height = 1; + } + if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) { + y = yoffsetNeg; + yoffsetNeg += height; + } else { + y = yoffset - height; + yoffset -= height; + } + color = this.calcColor(i, val, valuenum); + if (highlight) { + color = this.calcHighlightColor(color, options); + } + result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color)); + } + if (result.length === 1) { + return result[0]; + } + return result; + } + }); + + /** + * Tristate charts + */ + $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'tristate', + + init: function (el, values, options, width, height) { + var barWidth = parseInt(options.get('barWidth'), 10), + barSpacing = parseInt(options.get('barSpacing'), 10); + tristate._super.init.call(this, el, values, options, width, height); + + this.regionShapes = {}; + this.barWidth = barWidth; + this.barSpacing = barSpacing; + this.totalBarWidth = barWidth + barSpacing; + this.values = $.map(values, Number); + this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing); + + if ($.isArray(options.get('colorMap'))) { + this.colorMapByIndex = options.get('colorMap'); + this.colorMapByValue = null; + } else { + this.colorMapByIndex = null; + this.colorMapByValue = options.get('colorMap'); + if (this.colorMapByValue && this.colorMapByValue.get === undefined) { + this.colorMapByValue = new RangeMap(this.colorMapByValue); + } + } + this.initTarget(); + }, + + getRegion: function (el, x, y) { + return Math.floor(x / this.totalBarWidth); + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + color: this.calcColor(this.values[currentRegion], currentRegion), + offset: currentRegion + }; + }, + + calcColor: function (value, valuenum) { + var values = this.values, + options = this.options, + colorMapByIndex = this.colorMapByIndex, + colorMapByValue = this.colorMapByValue, + color, newColor; + + if (colorMapByValue && (newColor = colorMapByValue.get(value))) { + color = newColor; + } else if (colorMapByIndex && colorMapByIndex.length > valuenum) { + color = colorMapByIndex[valuenum]; + } else if (values[valuenum] < 0) { + color = options.get('negBarColor'); + } else if (values[valuenum] > 0) { + color = options.get('posBarColor'); + } else { + color = options.get('zeroBarColor'); + } + return color; + }, + + renderRegion: function (valuenum, highlight) { + var values = this.values, + options = this.options, + target = this.target, + canvasHeight, height, halfHeight, + x, y, color; + + canvasHeight = target.pixelHeight; + halfHeight = Math.round(canvasHeight / 2); + + x = valuenum * this.totalBarWidth; + if (values[valuenum] < 0) { + y = halfHeight; + height = halfHeight - 1; + } else if (values[valuenum] > 0) { + y = 0; + height = halfHeight - 1; + } else { + y = halfHeight - 1; + height = 2; + } + color = this.calcColor(values[valuenum], valuenum); + if (color === null) { + return; + } + if (highlight) { + color = this.calcHighlightColor(color, options); + } + return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color); + } + }); + + /** + * Discrete charts + */ + $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, { + type: 'discrete', + + init: function (el, values, options, width, height) { + discrete._super.init.call(this, el, values, options, width, height); + + this.regionShapes = {}; + this.values = values = $.map(values, Number); + this.min = Math.min.apply(Math, values); + this.max = Math.max.apply(Math, values); + this.range = this.max - this.min; + this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width; + this.interval = Math.floor(width / values.length); + this.itemWidth = width / values.length; + if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) { + this.min = options.get('chartRangeMin'); + } + if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) { + this.max = options.get('chartRangeMax'); + } + this.initTarget(); + if (this.target) { + this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight'); + } + }, + + getRegion: function (el, x, y) { + return Math.floor(x / this.itemWidth); + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + offset: currentRegion + }; + }, + + renderRegion: function (valuenum, highlight) { + var values = this.values, + options = this.options, + min = this.min, + max = this.max, + range = this.range, + interval = this.interval, + target = this.target, + canvasHeight = this.canvasHeight, + lineHeight = this.lineHeight, + pheight = canvasHeight - lineHeight, + ytop, val, color, x; + + val = clipval(values[valuenum], min, max); + x = valuenum * interval; + ytop = Math.round(pheight - pheight * ((val - min) / range)); + color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor'); + if (highlight) { + color = this.calcHighlightColor(color, options); + } + return target.drawLine(x, ytop, x, ytop + lineHeight, color); + } + }); + + /** + * Bullet charts + */ + $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, { + type: 'bullet', + + init: function (el, values, options, width, height) { + var min, max, vals; + bullet._super.init.call(this, el, values, options, width, height); + + // values: target, performance, range1, range2, range3 + this.values = values = normalizeValues(values); + // target or performance could be null + vals = values.slice(); + vals[0] = vals[0] === null ? vals[2] : vals[0]; + vals[1] = values[1] === null ? vals[2] : vals[1]; + min = Math.min.apply(Math, values); + max = Math.max.apply(Math, values); + if (options.get('base') === undefined) { + min = min < 0 ? min : 0; + } else { + min = options.get('base'); + } + this.min = min; + this.max = max; + this.range = max - min; + this.shapes = {}; + this.valueShapes = {}; + this.regiondata = {}; + this.width = width = options.get('width') === 'auto' ? '4.0em' : width; + this.target = this.$el.simpledraw(width, height, options.get('composite')); + if (!values.length) { + this.disabled = true; + } + this.initTarget(); + }, + + getRegion: function (el, x, y) { + var shapeid = this.target.getShapeAt(el, x, y); + return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + fieldkey: currentRegion.substr(0, 1), + value: this.values[currentRegion.substr(1)], + region: currentRegion + }; + }, + + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + shapeid = this.valueShapes[currentRegion], + shape; + delete this.shapes[shapeid]; + switch (currentRegion.substr(0, 1)) { + case 'r': + shape = this.renderRange(currentRegion.substr(1), highlight); + break; + case 'p': + shape = this.renderPerformance(highlight); + break; + case 't': + shape = this.renderTarget(highlight); + break; + } + this.valueShapes[currentRegion] = shape.id; + this.shapes[shape.id] = currentRegion; + this.target.replaceWithShape(shapeid, shape); + }, + + renderRange: function (rn, highlight) { + var rangeval = this.values[rn], + rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)), + color = this.options.get('rangeColors')[rn - 2]; + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color); + }, + + renderPerformance: function (highlight) { + var perfval = this.values[1], + perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)), + color = this.options.get('performanceColor'); + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1, + Math.round(this.canvasHeight * 0.4) - 1, color, color); + }, + + renderTarget: function (highlight) { + var targetval = this.values[0], + x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)), + targettop = Math.round(this.canvasHeight * 0.10), + targetheight = this.canvasHeight - (targettop * 2), + color = this.options.get('targetColor'); + if (highlight) { + color = this.calcHighlightColor(color, this.options); + } + return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color); + }, + + render: function () { + var vlen = this.values.length, + target = this.target, + i, shape; + if (!bullet._super.render.call(this)) { + return; + } + for (i = 2; i < vlen; i++) { + shape = this.renderRange(i).append(); + this.shapes[shape.id] = 'r' + i; + this.valueShapes['r' + i] = shape.id; + } + if (this.values[1] !== null) { + shape = this.renderPerformance().append(); + this.shapes[shape.id] = 'p1'; + this.valueShapes.p1 = shape.id; + } + if (this.values[0] !== null) { + shape = this.renderTarget().append(); + this.shapes[shape.id] = 't0'; + this.valueShapes.t0 = shape.id; + } + target.render(); + } + }); + + /** + * Pie charts + */ + $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, { + type: 'pie', + + init: function (el, values, options, width, height) { + var total = 0, i; + + pie._super.init.call(this, el, values, options, width, height); + + this.shapes = {}; // map shape ids to value offsets + this.valueShapes = {}; // maps value offsets to shape ids + this.values = values = $.map(values, Number); + + if (options.get('width') === 'auto') { + this.width = this.height; + } + + if (values.length > 0) { + for (i = values.length; i--;) { + total += values[i]; + } + } + this.total = total; + this.initTarget(); + this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2); + }, + + getRegion: function (el, x, y) { + var shapeid = this.target.getShapeAt(el, x, y); + return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined; + }, + + getCurrentRegionFields: function () { + var currentRegion = this.currentRegion; + return { + isNull: this.values[currentRegion] === undefined, + value: this.values[currentRegion], + percent: this.values[currentRegion] / this.total * 100, + color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length], + offset: currentRegion + }; + }, + + changeHighlight: function (highlight) { + var currentRegion = this.currentRegion, + newslice = this.renderSlice(currentRegion, highlight), + shapeid = this.valueShapes[currentRegion]; + delete this.shapes[shapeid]; + this.target.replaceWithShape(shapeid, newslice); + this.valueShapes[currentRegion] = newslice.id; + this.shapes[newslice.id] = currentRegion; + }, + + renderSlice: function (valuenum, highlight) { + var target = this.target, + options = this.options, + radius = this.radius, + borderWidth = options.get('borderWidth'), + offset = options.get('offset'), + circle = 2 * Math.PI, + values = this.values, + total = this.total, + next = offset ? (2*Math.PI)*(offset/360) : 0, + start, end, i, vlen, color; + + vlen = values.length; + for (i = 0; i < vlen; i++) { + start = next; + end = next; + if (total > 0) { // avoid divide by zero + end = next + (circle * (values[i] / total)); + } + if (valuenum === i) { + color = options.get('sliceColors')[i % options.get('sliceColors').length]; + if (highlight) { + color = this.calcHighlightColor(color, options); + } + + return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color); + } + next = end; + } + }, + + render: function () { + var target = this.target, + values = this.values, + options = this.options, + radius = this.radius, + borderWidth = options.get('borderWidth'), + shape, i; + + if (!pie._super.render.call(this)) { + return; + } + if (borderWidth) { + target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)), + options.get('borderColor'), undefined, borderWidth).append(); + } + for (i = values.length; i--;) { + if (values[i]) { // don't render zero values + shape = this.renderSlice(i).append(); + this.valueShapes[i] = shape.id; // store just the shapeid + this.shapes[shape.id] = i; + } + } + target.render(); + } + }); + + /** + * Box plots + */ + $.fn.sparkline.box = box = createClass($.fn.sparkline._base, { + type: 'box', + + init: function (el, values, options, width, height) { + box._super.init.call(this, el, values, options, width, height); + this.values = $.map(values, Number); + this.width = options.get('width') === 'auto' ? '4.0em' : width; + this.initTarget(); + if (!this.values.length) { + this.disabled = 1; + } + }, + + /** + * Simulate a single region + */ + getRegion: function () { + return 1; + }, + + getCurrentRegionFields: function () { + var result = [ + { field: 'lq', value: this.quartiles[0] }, + { field: 'med', value: this.quartiles[1] }, + { field: 'uq', value: this.quartiles[2] } + ]; + if (this.loutlier !== undefined) { + result.push({ field: 'lo', value: this.loutlier}); + } + if (this.routlier !== undefined) { + result.push({ field: 'ro', value: this.routlier}); + } + if (this.lwhisker !== undefined) { + result.push({ field: 'lw', value: this.lwhisker}); + } + if (this.rwhisker !== undefined) { + result.push({ field: 'rw', value: this.rwhisker}); + } + return result; + }, + + render: function () { + var target = this.target, + values = this.values, + vlen = values.length, + options = this.options, + canvasWidth = this.canvasWidth, + canvasHeight = this.canvasHeight, + minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'), + maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'), + canvasLeft = 0, + lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i, + size, unitSize; + + if (!box._super.render.call(this)) { + return; + } + + if (options.get('raw')) { + if (options.get('showOutliers') && values.length > 5) { + loutlier = values[0]; + lwhisker = values[1]; + q1 = values[2]; + q2 = values[3]; + q3 = values[4]; + rwhisker = values[5]; + routlier = values[6]; + } else { + lwhisker = values[0]; + q1 = values[1]; + q2 = values[2]; + q3 = values[3]; + rwhisker = values[4]; + } + } else { + values.sort(function (a, b) { return a - b; }); + q1 = quartile(values, 1); + q2 = quartile(values, 2); + q3 = quartile(values, 3); + iqr = q3 - q1; + if (options.get('showOutliers')) { + lwhisker = rwhisker = undefined; + for (i = 0; i < vlen; i++) { + if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) { + lwhisker = values[i]; + } + if (values[i] < q3 + (iqr * options.get('outlierIQR'))) { + rwhisker = values[i]; + } + } + loutlier = values[0]; + routlier = values[vlen - 1]; + } else { + lwhisker = values[0]; + rwhisker = values[vlen - 1]; + } + } + this.quartiles = [q1, q2, q3]; + this.lwhisker = lwhisker; + this.rwhisker = rwhisker; + this.loutlier = loutlier; + this.routlier = routlier; + + unitSize = canvasWidth / (maxValue - minValue + 1); + if (options.get('showOutliers')) { + canvasLeft = Math.ceil(options.get('spotRadius')); + canvasWidth -= 2 * Math.ceil(options.get('spotRadius')); + unitSize = canvasWidth / (maxValue - minValue + 1); + if (loutlier < lwhisker) { + target.drawCircle((loutlier - minValue) * unitSize + canvasLeft, + canvasHeight / 2, + options.get('spotRadius'), + options.get('outlierLineColor'), + options.get('outlierFillColor')).append(); + } + if (routlier > rwhisker) { + target.drawCircle((routlier - minValue) * unitSize + canvasLeft, + canvasHeight / 2, + options.get('spotRadius'), + options.get('outlierLineColor'), + options.get('outlierFillColor')).append(); + } + } + + // box + target.drawRect( + Math.round((q1 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.1), + Math.round((q3 - q1) * unitSize), + Math.round(canvasHeight * 0.8), + options.get('boxLineColor'), + options.get('boxFillColor')).append(); + // left whisker + target.drawLine( + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + Math.round((q1 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + options.get('lineColor')).append(); + target.drawLine( + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 4), + Math.round((lwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight - canvasHeight / 4), + options.get('whiskerColor')).append(); + // right whisker + target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + Math.round((q3 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 2), + options.get('lineColor')).append(); + target.drawLine( + Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight / 4), + Math.round((rwhisker - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight - canvasHeight / 4), + options.get('whiskerColor')).append(); + // median line + target.drawLine( + Math.round((q2 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.1), + Math.round((q2 - minValue) * unitSize + canvasLeft), + Math.round(canvasHeight * 0.9), + options.get('medianColor')).append(); + if (options.get('target')) { + size = Math.ceil(options.get('spotRadius')); + target.drawLine( + Math.round((options.get('target') - minValue) * unitSize + canvasLeft), + Math.round((canvasHeight / 2) - size), + Math.round((options.get('target') - minValue) * unitSize + canvasLeft), + Math.round((canvasHeight / 2) + size), + options.get('targetColor')).append(); + target.drawLine( + Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size), + Math.round(canvasHeight / 2), + Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size), + Math.round(canvasHeight / 2), + options.get('targetColor')).append(); + } + target.render(); + } + }); + + // Setup a very simple "virtual canvas" to make drawing the few shapes we need easier + // This is accessible as $(foo).simpledraw() + + VShape = createClass({ + init: function (target, id, type, args) { + this.target = target; + this.id = id; + this.type = type; + this.args = args; + }, + append: function () { + this.target.appendShape(this); + return this; + } + }); + + VCanvas_base = createClass({ + _pxregex: /(\d+)(px)?\s*$/i, + + init: function (width, height, target) { + if (!width) { + return; + } + this.width = width; + this.height = height; + this.target = target; + this.lastShapeId = null; + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + }, + + drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) { + return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth); + }, + + drawShape: function (path, lineColor, fillColor, lineWidth) { + return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]); + }, + + drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) { + return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]); + }, + + drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) { + return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]); + }, + + drawRect: function (x, y, width, height, lineColor, fillColor) { + return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]); + }, + + getElement: function () { + return this.canvas; + }, + + /** + * Return the most recently inserted shape id + */ + getLastShapeId: function () { + return this.lastShapeId; + }, + + /** + * Clear and reset the canvas + */ + reset: function () { + alert('reset not implemented'); + }, + + _insert: function (el, target) { + $(target).html(el); + }, + + /** + * Calculate the pixel dimensions of the canvas + */ + _calculatePixelDims: function (width, height, canvas) { + // XXX This should probably be a configurable option + var match; + match = this._pxregex.exec(height); + if (match) { + this.pixelHeight = match[1]; + } else { + this.pixelHeight = $(canvas).height(); + } + match = this._pxregex.exec(width); + if (match) { + this.pixelWidth = match[1]; + } else { + this.pixelWidth = $(canvas).width(); + } + }, + + /** + * Generate a shape object and id for later rendering + */ + _genShape: function (shapetype, shapeargs) { + var id = shapeCount++; + shapeargs.unshift(id); + return new VShape(this, id, shapetype, shapeargs); + }, + + /** + * Add a shape to the end of the render queue + */ + appendShape: function (shape) { + alert('appendShape not implemented'); + }, + + /** + * Replace one shape with another + */ + replaceWithShape: function (shapeid, shape) { + alert('replaceWithShape not implemented'); + }, + + /** + * Insert one shape after another in the render queue + */ + insertAfterShape: function (shapeid, shape) { + alert('insertAfterShape not implemented'); + }, + + /** + * Remove a shape from the queue + */ + removeShapeId: function (shapeid) { + alert('removeShapeId not implemented'); + }, + + /** + * Find a shape at the specified x/y co-ordinates + */ + getShapeAt: function (el, x, y) { + alert('getShapeAt not implemented'); + }, + + /** + * Render all queued shapes onto the canvas + */ + render: function () { + alert('render not implemented'); + } + }); + + VCanvas_canvas = createClass(VCanvas_base, { + init: function (width, height, target, interact) { + VCanvas_canvas._super.init.call(this, width, height, target); + this.canvas = document.createElement('canvas'); + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' }); + this._insert(this.canvas, target); + this._calculatePixelDims(width, height, this.canvas); + this.canvas.width = this.pixelWidth; + this.canvas.height = this.pixelHeight; + this.interact = interact; + this.shapes = {}; + this.shapeseq = []; + this.currentTargetShapeId = undefined; + $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight}); + }, + + _getContext: function (lineColor, fillColor, lineWidth) { + var context = this.canvas.getContext('2d'); + if (lineColor !== undefined) { + context.strokeStyle = lineColor; + } + context.lineWidth = lineWidth === undefined ? 1 : lineWidth; + if (fillColor !== undefined) { + context.fillStyle = fillColor; + } + return context; + }, + + reset: function () { + var context = this._getContext(); + context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); + this.shapes = {}; + this.shapeseq = []; + this.currentTargetShapeId = undefined; + }, + + _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { + var context = this._getContext(lineColor, fillColor, lineWidth), + i, plen; + context.beginPath(); + context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5); + for (i = 1, plen = path.length; i < plen; i++) { + context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines + } + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor !== undefined) { + context.fill(); + } + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + }, + + _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { + var context = this._getContext(lineColor, fillColor, lineWidth); + context.beginPath(); + context.arc(x, y, radius, 0, 2 * Math.PI, false); + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor !== undefined) { + context.fill(); + } + }, + + _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { + var context = this._getContext(lineColor, fillColor); + context.beginPath(); + context.moveTo(x, y); + context.arc(x, y, radius, startAngle, endAngle, false); + context.lineTo(x, y); + context.closePath(); + if (lineColor !== undefined) { + context.stroke(); + } + if (fillColor) { + context.fill(); + } + if (this.targetX !== undefined && this.targetY !== undefined && + context.isPointInPath(this.targetX, this.targetY)) { + this.currentTargetShapeId = shapeid; + } + }, + + _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { + return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor); + }, + + appendShape: function (shape) { + this.shapes[shape.id] = shape; + this.shapeseq.push(shape.id); + this.lastShapeId = shape.id; + return shape.id; + }, + + replaceWithShape: function (shapeid, shape) { + var shapeseq = this.shapeseq, + i; + this.shapes[shape.id] = shape; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] == shapeid) { + shapeseq[i] = shape.id; + } + } + delete this.shapes[shapeid]; + }, + + replaceWithShapes: function (shapeids, shapes) { + var shapeseq = this.shapeseq, + shapemap = {}, + sid, i, first; + + for (i = shapeids.length; i--;) { + shapemap[shapeids[i]] = true; + } + for (i = shapeseq.length; i--;) { + sid = shapeseq[i]; + if (shapemap[sid]) { + shapeseq.splice(i, 1); + delete this.shapes[sid]; + first = i; + } + } + for (i = shapes.length; i--;) { + shapeseq.splice(first, 0, shapes[i].id); + this.shapes[shapes[i].id] = shapes[i]; + } + + }, + + insertAfterShape: function (shapeid, shape) { + var shapeseq = this.shapeseq, + i; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] === shapeid) { + shapeseq.splice(i + 1, 0, shape.id); + this.shapes[shape.id] = shape; + return; + } + } + }, + + removeShapeId: function (shapeid) { + var shapeseq = this.shapeseq, + i; + for (i = shapeseq.length; i--;) { + if (shapeseq[i] === shapeid) { + shapeseq.splice(i, 1); + break; + } + } + delete this.shapes[shapeid]; + }, + + getShapeAt: function (el, x, y) { + this.targetX = x; + this.targetY = y; + this.render(); + return this.currentTargetShapeId; + }, + + render: function () { + var shapeseq = this.shapeseq, + shapes = this.shapes, + shapeCount = shapeseq.length, + context = this._getContext(), + shapeid, shape, i; + context.clearRect(0, 0, this.pixelWidth, this.pixelHeight); + for (i = 0; i < shapeCount; i++) { + shapeid = shapeseq[i]; + shape = shapes[shapeid]; + this['_draw' + shape.type].apply(this, shape.args); + } + if (!this.interact) { + // not interactive so no need to keep the shapes array + this.shapes = {}; + this.shapeseq = []; + } + } + + }); + + VCanvas_vml = createClass(VCanvas_base, { + init: function (width, height, target) { + var groupel; + VCanvas_vml._super.init.call(this, width, height, target); + if (target[0]) { + target = target[0]; + } + $.data(target, '_jqs_vcanvas', this); + this.canvas = document.createElement('span'); + $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'}); + this._insert(this.canvas, target); + this._calculatePixelDims(width, height, this.canvas); + this.canvas.width = this.pixelWidth; + this.canvas.height = this.pixelHeight; + groupel = '<v:group coordorigin="0 0" coordsize="' + this.pixelWidth + ' ' + this.pixelHeight + '"' + + ' style="position:absolute;top:0;left:0;width:' + this.pixelWidth + 'px;height=' + this.pixelHeight + 'px;"></v:group>'; + this.canvas.insertAdjacentHTML('beforeEnd', groupel); + this.group = $(this.canvas).children()[0]; + this.rendered = false; + this.prerender = ''; + }, + + _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) { + var vpath = [], + initial, stroke, fill, closed, vel, plen, i; + for (i = 0, plen = path.length; i < plen; i++) { + vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]); + } + initial = vpath.splice(0, 1); + lineWidth = lineWidth === undefined ? 1 : lineWidth; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : ''; + vel = '<v:shape coordorigin="0 0" coordsize="' + this.pixelWidth + ' ' + this.pixelHeight + '" ' + + ' id="jqsshape' + shapeid + '" ' + + stroke + + fill + + ' style="position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;" ' + + ' path="m ' + initial + ' l ' + vpath.join(', ') + ' ' + closed + 'e">' + + ' </v:shape>'; + return vel; + }, + + _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) { + var stroke, fill, vel; + x -= radius; + y -= radius; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + vel = '<v:oval ' + + ' id="jqsshape' + shapeid + '" ' + + stroke + + fill + + ' style="position:absolute;top:' + y + 'px; left:' + x + 'px; width:' + (radius * 2) + 'px; height:' + (radius * 2) + 'px"></v:oval>'; + return vel; + + }, + + _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) { + var vpath, startx, starty, endx, endy, stroke, fill, vel; + if (startAngle === endAngle) { + return ''; // VML seems to have problem when start angle equals end angle. + } + if ((endAngle - startAngle) === (2 * Math.PI)) { + startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0 + endAngle = (2 * Math.PI); + } + + startx = x + Math.round(Math.cos(startAngle) * radius); + starty = y + Math.round(Math.sin(startAngle) * radius); + endx = x + Math.round(Math.cos(endAngle) * radius); + endy = y + Math.round(Math.sin(endAngle) * radius); + + if (startx === endx && starty === endy) { + if ((endAngle - startAngle) < Math.PI) { + // Prevent very small slices from being mistaken as a whole pie + return ''; + } + // essentially going to be the entire circle, so ignore startAngle + startx = endx = x + radius; + starty = endy = y; + } + + if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) { + return ''; + } + + vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy]; + stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + lineColor + '" '; + fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" '; + vel = '<v:shape coordorigin="0 0" coordsize="' + this.pixelWidth + ' ' + this.pixelHeight + '" ' + + ' id="jqsshape' + shapeid + '" ' + + stroke + + fill + + ' style="position:absolute;left:0px;top:0px;height:' + this.pixelHeight + 'px;width:' + this.pixelWidth + 'px;padding:0px;margin:0px;" ' + + ' path="m ' + x + ',' + y + ' wa ' + vpath.join(', ') + ' x e">' + + ' </v:shape>'; + return vel; + }, + + _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) { + return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor); + }, + + reset: function () { + this.group.innerHTML = ''; + }, + + appendShape: function (shape) { + var vel = this['_draw' + shape.type].apply(this, shape.args); + if (this.rendered) { + this.group.insertAdjacentHTML('beforeEnd', vel); + } else { + this.prerender += vel; + } + this.lastShapeId = shape.id; + return shape.id; + }, + + replaceWithShape: function (shapeid, shape) { + var existing = $('#jqsshape' + shapeid), + vel = this['_draw' + shape.type].apply(this, shape.args); + existing[0].outerHTML = vel; + }, + + replaceWithShapes: function (shapeids, shapes) { + // replace the first shapeid with all the new shapes then toast the remaining old shapes + var existing = $('#jqsshape' + shapeids[0]), + replace = '', + slen = shapes.length, + i; + for (i = 0; i < slen; i++) { + replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args); + } + existing[0].outerHTML = replace; + for (i = 1; i < shapeids.length; i++) { + $('#jqsshape' + shapeids[i]).remove(); + } + }, + + insertAfterShape: function (shapeid, shape) { + var existing = $('#jqsshape' + shapeid), + vel = this['_draw' + shape.type].apply(this, shape.args); + existing[0].insertAdjacentHTML('afterEnd', vel); + }, + + removeShapeId: function (shapeid) { + var existing = $('#jqsshape' + shapeid); + this.group.removeChild(existing[0]); + }, + + getShapeAt: function (el, x, y) { + var shapeid = el.id.substr(8); + return shapeid; + }, + + render: function () { + if (!this.rendered) { + // batch the intial render into a single repaint + this.group.innerHTML = this.prerender; + this.rendered = true; + } + } + }); + +}))}(document, Math)); +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +} ( function( $ ) { + +$.ui = $.ui || {}; + +return $.ui.version = "1.12.1"; + +} ) ); + + +/*! + * jQuery UI Keycode 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Keycode +//>>group: Core +//>>description: Provide keycodes as keynames +//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery", "./version" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +} ( function( $ ) { +return $.ui.keyCode = { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 +}; + +} ) ); + + +/*! + * jQuery UI Position 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +//>>label: Position +//>>group: Core +//>>description: Positions elements relative to other elements. +//>>docs: http://api.jqueryui.com/position/ +//>>demos: http://jqueryui.com/position/ + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery", "./version" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}( function( $ ) { +( function() { +var cachedScrollbarWidth, + max = Math.max, + abs = Math.abs, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[ 0 ]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( $.isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "<div " + + "style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" + + "<div style='height:100px;width:auto;'></div></div>" ), + innerDiv = div.children()[ 0 ]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[ 0 ].clientWidth; + } + + div.remove(); + + return ( cachedScrollbarWidth = w1 - w2 ); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isWindow = $.isWindow( withinElement[ 0 ] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, + hasOffset = !isWindow && !isDocument; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + width: withinElement.outerWidth(), + height: withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // Make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[ 0 ].preventDefault ) { + + // Force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + + // Clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // Force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1 ) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // Calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // Reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + } ); + + // Normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each( function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem: elem + } ); + } + } ); + + if ( options.using ) { + + // Adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + } ); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // Element is wider than within + if ( data.collisionWidth > outerWidth ) { + + // Element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - + withinOffset; + position.left += overLeft - newOverRight; + + // Element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + + // Element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + + // Too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + + // Too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + + // Adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // Element is taller than within + if ( data.collisionHeight > outerHeight ) { + + // Element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - + withinOffset; + position.top += overTop - newOverBottom; + + // Element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + + // Element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + + // Too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + + // Too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + + // Adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - + outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - + outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +} )(); + +return $.ui.position; + +} ) ); + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery", "./version" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +} ( function( $ ) { +return $.ui.safeActiveElement = function( document ) { + var activeElement; + + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe> + try { + activeElement = document.activeElement; + } catch ( error ) { + activeElement = document.body; + } + + // Support: IE 9 - 11 only + // IE may return null instead of an element + // Interestingly, this only seems to occur when NOT in an iframe + if ( !activeElement ) { + activeElement = document.body; + } + + // Support: IE 11 only + // IE11 returns a seemingly empty object in some cases when accessing + // document.activeElement from an <iframe> + if ( !activeElement.nodeName ) { + activeElement = document.body; + } + + return activeElement; +}; + +} ) ); + + +/*! + * jQuery UI Unique ID 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: uniqueId +//>>group: Core +//>>description: Functions to generate and remove uniqueId's +//>>docs: http://api.jqueryui.com/uniqueId/ + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery", "./version" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +} ( function( $ ) { + +return $.fn.extend( { + uniqueId: ( function() { + var uuid = 0; + + return function() { + return this.each( function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + } ); + }; + } )(), + + removeUniqueId: function() { + return this.each( function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + } ); + } +} ); + +} ) ); + + +/*! + * jQuery UI Widget 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Widget +//>>group: Core +//>>description: Provides a factory for creating stateful widgets with a common API. +//>>docs: http://api.jqueryui.com/jQuery.widget/ +//>>demos: http://jqueryui.com/widget/ + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery", "./version" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}( function( $ ) { + +var widgetUuid = 0; +var widgetSlice = Array.prototype.slice; + +$.cleanData = ( function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // Http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; +} )( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var existingConstructor, constructor, basePrototype; + + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + var proxiedPrototype = {}; + + var namespace = name.split( "." )[ 0 ]; + name = name.split( "." )[ 1 ]; + var fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + if ( $.isArray( prototype ) ) { + prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); + } + + // Create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + + // Allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // Allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + // Extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + + // Copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + + // Track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + } ); + + basePrototype = new base(); + + // We need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = ( function() { + function _super() { + return base.prototype[ prop ].apply( this, arguments ); + } + + function _superApply( args ) { + return base.prototype[ prop ].apply( this, args ); + } + + return function() { + var __super = this._super; + var __superApply = this._superApply; + var returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + } )(); + } ); + constructor.prototype = $.widget.extend( basePrototype, { + + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + } ); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // Redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, + child._proto ); + } ); + + // Remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; +}; + +$.widget.extend = function( target ) { + var input = widgetSlice.call( arguments, 1 ); + var inputIndex = 0; + var inputLength = input.length; + var key; + var value; + + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string"; + var args = widgetSlice.call( arguments, 1 ); + var returnValue = this; + + if ( isMethodCall ) { + + // If this is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + if ( !this.length && options === "instance" ) { + returnValue = undefined; + } else { + this.each( function() { + var methodValue; + var instance = $.data( this, fullName ); + + if ( options === "instance" ) { + returnValue = instance; + return false; + } + + if ( !instance ) { + return $.error( "cannot call methods on " + name + + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + + if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + + " widget instance" ); + } + + methodValue = instance[ options ].apply( instance, args ); + + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + } ); + } + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat( args ) ); + } + + this.each( function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + } ); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "<div>", + + options: { + classes: {}, + disabled: false, + + // Callbacks + create: null + }, + + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widgetUuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + this.classesElementLookup = {}; + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + } ); + this.document = $( element.style ? + + // Element within the document + element.ownerDocument : + + // Element is window or document + element.document || element ); + this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + + if ( this.options.disabled ) { + this._setOptionDisabled( this.options.disabled ); + } + + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + + _getCreateOptions: function() { + return {}; + }, + + _getCreateEventData: $.noop, + + _create: $.noop, + + _init: $.noop, + + destroy: function() { + var that = this; + + this._destroy(); + $.each( this.classesElementLookup, function( key, value ) { + that._removeClass( value, key ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); + this.widget() + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + this.bindings.off( this.eventNamespace ); + }, + + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + var parts; + var curOption; + var i; + + if ( arguments.length === 0 ) { + + // Don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + + // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + + _setOption: function( key, value ) { + if ( key === "classes" ) { + this._setOptionClasses( value ); + } + + this.options[ key ] = value; + + if ( key === "disabled" ) { + this._setOptionDisabled( value ); + } + + return this; + }, + + _setOptionClasses: function( value ) { + var classKey, elements, currentElements; + + for ( classKey in value ) { + currentElements = this.classesElementLookup[ classKey ]; + if ( value[ classKey ] === this.options.classes[ classKey ] || + !currentElements || + !currentElements.length ) { + continue; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + elements.addClass( this._classes( { + element: elements, + keys: classKey, + classes: value, + add: true + } ) ); + } + }, + + _setOptionDisabled: function( value ) { + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this._removeClass( this.hoverable, null, "ui-state-hover" ); + this._removeClass( this.focusable, null, "ui-state-focus" ); + } + }, + + enable: function() { + return this._setOptions( { disabled: false } ); + }, + + disable: function() { + return this._setOptions( { disabled: true } ); + }, + + _classes: function( options ) { + var full = []; + var that = this; + + options = $.extend( { + element: this.element, + classes: this.options.classes || {} + }, options ); + + function processClassString( classes, checkOption ) { + var current, i; + for ( i = 0; i < classes.length; i++ ) { + current = that.classesElementLookup[ classes[ i ] ] || $(); + if ( options.add ) { + current = $( $.unique( current.get().concat( options.element.get() ) ) ); + } else { + current = $( current.not( options.element ).get() ); + } + that.classesElementLookup[ classes[ i ] ] = current; + full.push( classes[ i ] ); + if ( checkOption && options.classes[ classes[ i ] ] ) { + full.push( options.classes[ classes[ i ] ] ); + } + } + } + + this._on( options.element, { + "remove": "_untrackClassesElement" + } ); + + if ( options.keys ) { + processClassString( options.keys.match( /\S+/g ) || [], true ); + } + if ( options.extra ) { + processClassString( options.extra.match( /\S+/g ) || [] ); + } + + return full.join( " " ); + }, + + _untrackClassesElement: function( event ) { + var that = this; + $.each( that.classesElementLookup, function( key, value ) { + if ( $.inArray( event.target, value ) !== -1 ) { + that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); + } + } ); + }, + + _removeClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, false ); + }, + + _addClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, true ); + }, + + _toggleClass: function( element, keys, extra, add ) { + add = ( typeof add === "boolean" ) ? add : extra; + var shift = ( typeof element === "string" || element === null ), + options = { + extra: shift ? keys : extra, + keys: shift ? element : keys, + element: shift ? this.element : element, + add: add + }; + options.element.toggleClass( this._classes( options ), add ); + return this; + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement; + var instance = this; + + // No suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // No element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + + // Allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // Copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ); + var eventName = match[ 1 ] + instance.eventNamespace; + var selector = match[ 2 ]; + + if ( selector ) { + delegateElement.on( eventName, selector, handlerProxy ); + } else { + element.on( eventName, handlerProxy ); + } + } ); + }, + + _off: function( element, eventName ) { + eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.off( eventName ).off( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); + }, + mouseleave: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); + } + } ); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); + }, + focusout: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); + } + } ); + }, + + _trigger: function( type, event, data ) { + var prop, orig; + var callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + + // The original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // Copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + + var hasOptions; + var effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + + if ( options.delay ) { + element.delay( options.delay ); + } + + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue( function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + } ); + } + }; +} ); + +return $.widget; + +} ) ); + + + + + + + +/*! + * jQuery UI Menu 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Menu +//>>group: Widgets +//>>description: Creates nestable menus. +//>>docs: http://api.jqueryui.com/menu/ +//>>demos: http://jqueryui.com/menu/ +//>>css.structure: ../../themes/base/core.css +//>>css.structure: ../../themes/base/menu.css +//>>css.theme: ../../themes/base/theme.css + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ + "jquery", + "../keycode", + "../position", + "../safe-active-element", + "../unique-id", + "../version", + "../widget" + ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}( function( $ ) { + +return $.widget( "ui.menu", { + version: "1.12.1", + defaultElement: "<ul>", + delay: 300, + options: { + icons: { + submenu: "ui-icon-caret-1-e" + }, + items: "> *", + menus: "ul", + position: { + my: "left top", + at: "right top" + }, + role: "menu", + + // Callbacks + blur: null, + focus: null, + select: null + }, + + _create: function() { + this.activeMenu = this.element; + + // Flag used to prevent firing of the click handler + // as the event bubbles up through nested menus + this.mouseHandled = false; + this.element + .uniqueId() + .attr( { + role: this.options.role, + tabIndex: 0 + } ); + + this._addClass( "ui-menu", "ui-widget ui-widget-content" ); + this._on( { + + // Prevent focus from sticking to links inside menu after clicking + // them (focus should always stay on UL during navigation). + "mousedown .ui-menu-item": function( event ) { + event.preventDefault(); + }, + "click .ui-menu-item": function( event ) { + var target = $( event.target ); + var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) ); + if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { + this.select( event ); + + // Only set the mouseHandled flag if the event will bubble, see #9469. + if ( !event.isPropagationStopped() ) { + this.mouseHandled = true; + } + + // Open submenu on click + if ( target.has( ".ui-menu" ).length ) { + this.expand( event ); + } else if ( !this.element.is( ":focus" ) && + active.closest( ".ui-menu" ).length ) { + + // Redirect focus to the menu + this.element.trigger( "focus", [ true ] ); + + // If the active item is on the top level, let it stay active. + // Otherwise, blur the active item since it is no longer visible. + if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { + clearTimeout( this.timer ); + } + } + } + }, + "mouseenter .ui-menu-item": function( event ) { + + // Ignore mouse events while typeahead is active, see #10458. + // Prevents focusing the wrong item when typeahead causes a scroll while the mouse + // is over an item in the menu + if ( this.previousFilter ) { + return; + } + + var actualTarget = $( event.target ).closest( ".ui-menu-item" ), + target = $( event.currentTarget ); + + // Ignore bubbled events on parent items, see #11641 + if ( actualTarget[ 0 ] !== target[ 0 ] ) { + return; + } + + // Remove ui-state-active class from siblings of the newly focused menu item + // to avoid a jump caused by adjacent elements both having a class with a border + this._removeClass( target.siblings().children( ".ui-state-active" ), + null, "ui-state-active" ); + this.focus( event, target ); + }, + mouseleave: "collapseAll", + "mouseleave .ui-menu": "collapseAll", + focus: function( event, keepActiveItem ) { + + // If there's already an active item, keep it active + // If not, activate the first item + var item = this.active || this.element.find( this.options.items ).eq( 0 ); + + if ( !keepActiveItem ) { + this.focus( event, item ); + } + }, + blur: function( event ) { + this._delay( function() { + var notContained = !$.contains( + this.element[ 0 ], + $.ui.safeActiveElement( this.document[ 0 ] ) + ); + if ( notContained ) { + this.collapseAll( event ); + } + } ); + }, + keydown: "_keydown" + } ); + + this.refresh(); + + // Clicks outside of a menu collapse any open menus + this._on( this.document, { + click: function( event ) { + if ( this._closeOnDocumentClick( event ) ) { + this.collapseAll( event ); + } + + // Reset the mouseHandled flag + this.mouseHandled = false; + } + } ); + }, + + _destroy: function() { + var items = this.element.find( ".ui-menu-item" ) + .removeAttr( "role aria-disabled" ), + submenus = items.children( ".ui-menu-item-wrapper" ) + .removeUniqueId() + .removeAttr( "tabIndex role aria-haspopup" ); + + // Destroy (sub)menus + this.element + .removeAttr( "aria-activedescendant" ) + .find( ".ui-menu" ).addBack() + .removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " + + "tabIndex" ) + .removeUniqueId() + .show(); + + submenus.children().each( function() { + var elem = $( this ); + if ( elem.data( "ui-menu-submenu-caret" ) ) { + elem.remove(); + } + } ); + }, + + _keydown: function( event ) { + var match, prev, character, skip, + preventDefault = true; + + switch ( event.keyCode ) { + case $.ui.keyCode.PAGE_UP: + this.previousPage( event ); + break; + case $.ui.keyCode.PAGE_DOWN: + this.nextPage( event ); + break; + case $.ui.keyCode.HOME: + this._move( "first", "first", event ); + break; + case $.ui.keyCode.END: + this._move( "last", "last", event ); + break; + case $.ui.keyCode.UP: + this.previous( event ); + break; + case $.ui.keyCode.DOWN: + this.next( event ); + break; + case $.ui.keyCode.LEFT: + this.collapse( event ); + break; + case $.ui.keyCode.RIGHT: + if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { + this.expand( event ); + } + break; + case $.ui.keyCode.ENTER: + case $.ui.keyCode.SPACE: + this._activate( event ); + break; + case $.ui.keyCode.ESCAPE: + this.collapse( event ); + break; + default: + preventDefault = false; + prev = this.previousFilter || ""; + skip = false; + + // Support number pad values + character = event.keyCode >= 96 && event.keyCode <= 105 ? + ( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode ); + + clearTimeout( this.filterTimer ); + + if ( character === prev ) { + skip = true; + } else { + character = prev + character; + } + + match = this._filterMenuItems( character ); + match = skip && match.index( this.active.next() ) !== -1 ? + this.active.nextAll( ".ui-menu-item" ) : + match; + + // If no matches on the current filter, reset to the last character pressed + // to move down the menu to the first item that starts with that character + if ( !match.length ) { + character = String.fromCharCode( event.keyCode ); + match = this._filterMenuItems( character ); + } + + if ( match.length ) { + this.focus( event, match ); + this.previousFilter = character; + this.filterTimer = this._delay( function() { + delete this.previousFilter; + }, 1000 ); + } else { + delete this.previousFilter; + } + } + + if ( preventDefault ) { + event.preventDefault(); + } + }, + + _activate: function( event ) { + if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { + if ( this.active.children( "[aria-haspopup='true']" ).length ) { + this.expand( event ); + } else { + this.select( event ); + } + } + }, + + refresh: function() { + var menus, items, newSubmenus, newItems, newWrappers, + that = this, + icon = this.options.icons.submenu, + submenus = this.element.find( this.options.menus ); + + this._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length ); + + // Initialize nested menus + newSubmenus = submenus.filter( ":not(.ui-menu)" ) + .hide() + .attr( { + role: this.options.role, + "aria-hidden": "true", + "aria-expanded": "false" + } ) + .each( function() { + var menu = $( this ), + item = menu.prev(), + submenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true ); + + that._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon ); + item + .attr( "aria-haspopup", "true" ) + .prepend( submenuCaret ); + menu.attr( "aria-labelledby", item.attr( "id" ) ); + } ); + + this._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" ); + + menus = submenus.add( this.element ); + items = menus.find( this.options.items ); + + // Initialize menu-items containing spaces and/or dashes only as dividers + items.not( ".ui-menu-item" ).each( function() { + var item = $( this ); + if ( that._isDivider( item ) ) { + that._addClass( item, "ui-menu-divider", "ui-widget-content" ); + } + } ); + + // Don't refresh list items that are already adapted + newItems = items.not( ".ui-menu-item, .ui-menu-divider" ); + newWrappers = newItems.children() + .not( ".ui-menu" ) + .uniqueId() + .attr( { + tabIndex: -1, + role: this._itemRole() + } ); + this._addClass( newItems, "ui-menu-item" ) + ._addClass( newWrappers, "ui-menu-item-wrapper" ); + + // Add aria-disabled attribute to any disabled menu item + items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); + + // If the active item has been removed, blur the menu + if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + this.blur(); + } + }, + + _itemRole: function() { + return { + menu: "menuitem", + listbox: "option" + }[ this.options.role ]; + }, + + _setOption: function( key, value ) { + if ( key === "icons" ) { + var icons = this.element.find( ".ui-menu-icon" ); + this._removeClass( icons, null, this.options.icons.submenu ) + ._addClass( icons, null, value.submenu ); + } + this._super( key, value ); + }, + + _setOptionDisabled: function( value ) { + this._super( value ); + + this.element.attr( "aria-disabled", String( value ) ); + this._toggleClass( null, "ui-state-disabled", !!value ); + }, + + focus: function( event, item ) { + var nested, focused, activeParent; + this.blur( event, event && event.type === "focus" ); + + this._scrollIntoView( item ); + + this.active = item.first(); + + focused = this.active.children( ".ui-menu-item-wrapper" ); + this._addClass( focused, null, "ui-state-active" ); + + // Only update aria-activedescendant if there's a role + // otherwise we assume focus is managed elsewhere + if ( this.options.role ) { + this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); + } + + // Highlight active parent menu item, if any + activeParent = this.active + .parent() + .closest( ".ui-menu-item" ) + .children( ".ui-menu-item-wrapper" ); + this._addClass( activeParent, null, "ui-state-active" ); + + if ( event && event.type === "keydown" ) { + this._close(); + } else { + this.timer = this._delay( function() { + this._close(); + }, this.delay ); + } + + nested = item.children( ".ui-menu" ); + if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) { + this._startOpening( nested ); + } + this.activeMenu = item.parent(); + + this._trigger( "focus", event, { item: item } ); + }, + + _scrollIntoView: function( item ) { + var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; + if ( this._hasScroll() ) { + borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; + paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; + offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; + scroll = this.activeMenu.scrollTop(); + elementHeight = this.activeMenu.height(); + itemHeight = item.outerHeight(); + + if ( offset < 0 ) { + this.activeMenu.scrollTop( scroll + offset ); + } else if ( offset + itemHeight > elementHeight ) { + this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); + } + } + }, + + blur: function( event, fromFocus ) { + if ( !fromFocus ) { + clearTimeout( this.timer ); + } + + if ( !this.active ) { + return; + } + + this._removeClass( this.active.children( ".ui-menu-item-wrapper" ), + null, "ui-state-active" ); + + this._trigger( "blur", event, { item: this.active } ); + this.active = null; + }, + + _startOpening: function( submenu ) { + clearTimeout( this.timer ); + + // Don't open if already open fixes a Firefox bug that caused a .5 pixel + // shift in the submenu position when mousing over the caret icon + if ( submenu.attr( "aria-hidden" ) !== "true" ) { + return; + } + + this.timer = this._delay( function() { + this._close(); + this._open( submenu ); + }, this.delay ); + }, + + _open: function( submenu ) { + var position = $.extend( { + of: this.active + }, this.options.position ); + + clearTimeout( this.timer ); + this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) + .hide() + .attr( "aria-hidden", "true" ); + + submenu + .show() + .removeAttr( "aria-hidden" ) + .attr( "aria-expanded", "true" ) + .position( position ); + }, + + collapseAll: function( event, all ) { + clearTimeout( this.timer ); + this.timer = this._delay( function() { + + // If we were passed an event, look for the submenu that contains the event + var currentMenu = all ? this.element : + $( event && event.target ).closest( this.element.find( ".ui-menu" ) ); + + // If we found no valid submenu ancestor, use the main menu to close all + // sub menus anyway + if ( !currentMenu.length ) { + currentMenu = this.element; + } + + this._close( currentMenu ); + + this.blur( event ); + + // Work around active item staying active after menu is blurred + this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" ); + + this.activeMenu = currentMenu; + }, this.delay ); + }, + + // With no arguments, closes the currently active menu - if nothing is active + // it closes all menus. If passed an argument, it will search for menus BELOW + _close: function( startMenu ) { + if ( !startMenu ) { + startMenu = this.active ? this.active.parent() : this.element; + } + + startMenu.find( ".ui-menu" ) + .hide() + .attr( "aria-hidden", "true" ) + .attr( "aria-expanded", "false" ); + }, + + _closeOnDocumentClick: function( event ) { + return !$( event.target ).closest( ".ui-menu" ).length; + }, + + _isDivider: function( item ) { + + // Match hyphen, em dash, en dash + return !/[^\-\u2014\u2013\s]/.test( item.text() ); + }, + + collapse: function( event ) { + var newItem = this.active && + this.active.parent().closest( ".ui-menu-item", this.element ); + if ( newItem && newItem.length ) { + this._close(); + this.focus( event, newItem ); + } + }, + + expand: function( event ) { + var newItem = this.active && + this.active + .children( ".ui-menu " ) + .find( this.options.items ) + .first(); + + if ( newItem && newItem.length ) { + this._open( newItem.parent() ); + + // Delay so Firefox will not hide activedescendant change in expanding submenu from AT + this._delay( function() { + this.focus( event, newItem ); + } ); + } + }, + + next: function( event ) { + this._move( "next", "first", event ); + }, + + previous: function( event ) { + this._move( "prev", "last", event ); + }, + + isFirstItem: function() { + return this.active && !this.active.prevAll( ".ui-menu-item" ).length; + }, + + isLastItem: function() { + return this.active && !this.active.nextAll( ".ui-menu-item" ).length; + }, + + _move: function( direction, filter, event ) { + var next; + if ( this.active ) { + if ( direction === "first" || direction === "last" ) { + next = this.active + [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) + .eq( -1 ); + } else { + next = this.active + [ direction + "All" ]( ".ui-menu-item" ) + .eq( 0 ); + } + } + if ( !next || !next.length || !this.active ) { + next = this.activeMenu.find( this.options.items )[ filter ](); + } + + this.focus( event, next ); + }, + + nextPage: function( event ) { + var item, base, height; + + if ( !this.active ) { + this.next( event ); + return; + } + if ( this.isLastItem() ) { + return; + } + if ( this._hasScroll() ) { + base = this.active.offset().top; + height = this.element.height(); + this.active.nextAll( ".ui-menu-item" ).each( function() { + item = $( this ); + return item.offset().top - base - height < 0; + } ); + + this.focus( event, item ); + } else { + this.focus( event, this.activeMenu.find( this.options.items ) + [ !this.active ? "first" : "last" ]() ); + } + }, + + previousPage: function( event ) { + var item, base, height; + if ( !this.active ) { + this.next( event ); + return; + } + if ( this.isFirstItem() ) { + return; + } + if ( this._hasScroll() ) { + base = this.active.offset().top; + height = this.element.height(); + this.active.prevAll( ".ui-menu-item" ).each( function() { + item = $( this ); + return item.offset().top - base + height > 0; + } ); + + this.focus( event, item ); + } else { + this.focus( event, this.activeMenu.find( this.options.items ).first() ); + } + }, + + _hasScroll: function() { + return this.element.outerHeight() < this.element.prop( "scrollHeight" ); + }, + + select: function( event ) { + + // TODO: It should never be possible to not have an active item at this + // point, but the tests don't trigger mouseenter before click. + this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); + var ui = { item: this.active }; + if ( !this.active.has( ".ui-menu" ).length ) { + this.collapseAll( event, true ); + } + this._trigger( "select", event, ui ); + }, + + _filterMenuItems: function( character ) { + var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ), + regex = new RegExp( "^" + escapedCharacter, "i" ); + + return this.activeMenu + .find( this.options.items ) + + // Only match on items, not dividers or other content (#10571) + .filter( ".ui-menu-item" ) + .filter( function() { + return regex.test( + $.trim( $( this ).children( ".ui-menu-item-wrapper" ).text() ) ); + } ); + } +} ); + +} ) ); + + + + + + + +/*! + * jQuery UI Autocomplete 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Autocomplete +//>>group: Widgets +//>>description: Lists suggested words as the user is typing. +//>>docs: http://api.jqueryui.com/autocomplete/ +//>>demos: http://jqueryui.com/autocomplete/ +//>>css.structure: ../../themes/base/core.css +//>>css.structure: ../../themes/base/autocomplete.css +//>>css.theme: ../../themes/base/theme.css + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ + "jquery", + "./menu", + "../keycode", + "../position", + "../safe-active-element", + "../version", + "../widget" + ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}( function( $ ) { + +$.widget( "ui.autocomplete", { + version: "1.12.1", + defaultElement: "<input>", + options: { + appendTo: null, + autoFocus: false, + delay: 300, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null, + + // Callbacks + change: null, + close: null, + focus: null, + open: null, + response: null, + search: null, + select: null + }, + + requestIndex: 0, + pending: 0, + + _create: function() { + + // Some browsers only repeat keydown events, not keypress events, + // so we use the suppressKeyPress flag to determine if we've already + // handled the keydown event. #7269 + // Unfortunately the code for & in keypress is the same as the up arrow, + // so we use the suppressKeyPressRepeat flag to avoid handling keypress + // events when we know the keydown event was used to modify the + // search term. #7799 + var suppressKeyPress, suppressKeyPressRepeat, suppressInput, + nodeName = this.element[ 0 ].nodeName.toLowerCase(), + isTextarea = nodeName === "textarea", + isInput = nodeName === "input"; + + // Textareas are always multi-line + // Inputs are always single-line, even if inside a contentEditable element + // IE also treats inputs as contentEditable + // All other element types are determined by whether or not they're contentEditable + this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element ); + + this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; + this.isNewMenu = true; + + this._addClass( "ui-autocomplete-input" ); + this.element.attr( "autocomplete", "off" ); + + this._on( this.element, { + keydown: function( event ) { + if ( this.element.prop( "readOnly" ) ) { + suppressKeyPress = true; + suppressInput = true; + suppressKeyPressRepeat = true; + return; + } + + suppressKeyPress = false; + suppressInput = false; + suppressKeyPressRepeat = false; + var keyCode = $.ui.keyCode; + switch ( event.keyCode ) { + case keyCode.PAGE_UP: + suppressKeyPress = true; + this._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + suppressKeyPress = true; + this._move( "nextPage", event ); + break; + case keyCode.UP: + suppressKeyPress = true; + this._keyEvent( "previous", event ); + break; + case keyCode.DOWN: + suppressKeyPress = true; + this._keyEvent( "next", event ); + break; + case keyCode.ENTER: + + // when menu is open and has focus + if ( this.menu.active ) { + + // #6055 - Opera still allows the keypress to occur + // which causes forms to submit + suppressKeyPress = true; + event.preventDefault(); + this.menu.select( event ); + } + break; + case keyCode.TAB: + if ( this.menu.active ) { + this.menu.select( event ); + } + break; + case keyCode.ESCAPE: + if ( this.menu.element.is( ":visible" ) ) { + if ( !this.isMultiLine ) { + this._value( this.term ); + } + this.close( event ); + + // Different browsers have different default behavior for escape + // Single press can mean undo or clear + // Double press in IE means clear the whole form + event.preventDefault(); + } + break; + default: + suppressKeyPressRepeat = true; + + // search timeout should be triggered before the input value is changed + this._searchTimeout( event ); + break; + } + }, + keypress: function( event ) { + if ( suppressKeyPress ) { + suppressKeyPress = false; + if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { + event.preventDefault(); + } + return; + } + if ( suppressKeyPressRepeat ) { + return; + } + + // Replicate some key handlers to allow them to repeat in Firefox and Opera + var keyCode = $.ui.keyCode; + switch ( event.keyCode ) { + case keyCode.PAGE_UP: + this._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + this._move( "nextPage", event ); + break; + case keyCode.UP: + this._keyEvent( "previous", event ); + break; + case keyCode.DOWN: + this._keyEvent( "next", event ); + break; + } + }, + input: function( event ) { + if ( suppressInput ) { + suppressInput = false; + event.preventDefault(); + return; + } + this._searchTimeout( event ); + }, + focus: function() { + this.selectedItem = null; + this.previous = this._value(); + }, + blur: function( event ) { + if ( this.cancelBlur ) { + delete this.cancelBlur; + return; + } + + clearTimeout( this.searching ); + this.close( event ); + this._change( event ); + } + } ); + + this._initSource(); + this.menu = $( "<ul>" ) + .appendTo( this._appendTo() ) + .menu( { + + // disable ARIA support, the live region takes care of that + role: null + } ) + .hide() + .menu( "instance" ); + + this._addClass( this.menu.element, "ui-autocomplete", "ui-front" ); + this._on( this.menu.element, { + mousedown: function( event ) { + + // prevent moving focus out of the text field + event.preventDefault(); + + // IE doesn't prevent moving focus even with event.preventDefault() + // so we set a flag to know when we should ignore the blur event + this.cancelBlur = true; + this._delay( function() { + delete this.cancelBlur; + + // Support: IE 8 only + // Right clicking a menu item or selecting text from the menu items will + // result in focus moving out of the input. However, we've already received + // and ignored the blur event because of the cancelBlur flag set above. So + // we restore focus to ensure that the menu closes properly based on the user's + // next actions. + if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) { + this.element.trigger( "focus" ); + } + } ); + }, + menufocus: function( event, ui ) { + var label, item; + + // support: Firefox + // Prevent accidental activation of menu items in Firefox (#7024 #9118) + if ( this.isNewMenu ) { + this.isNewMenu = false; + if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) { + this.menu.blur(); + + this.document.one( "mousemove", function() { + $( event.target ).trigger( event.originalEvent ); + } ); + + return; + } + } + + item = ui.item.data( "ui-autocomplete-item" ); + if ( false !== this._trigger( "focus", event, { item: item } ) ) { + + // use value to match what will end up in the input, if it was a key event + if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) { + this._value( item.value ); + } + } + + // Announce the value in the liveRegion + label = ui.item.attr( "aria-label" ) || item.value; + if ( label && $.trim( label ).length ) { + this.liveRegion.children().hide(); + $( "<div>" ).text( label ).appendTo( this.liveRegion ); + } + }, + menuselect: function( event, ui ) { + var item = ui.item.data( "ui-autocomplete-item" ), + previous = this.previous; + + // Only trigger when focus was lost (click on menu) + if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) { + this.element.trigger( "focus" ); + this.previous = previous; + + // #6109 - IE triggers two focus events and the second + // is asynchronous, so we need to reset the previous + // term synchronously and asynchronously :-( + this._delay( function() { + this.previous = previous; + this.selectedItem = item; + } ); + } + + if ( false !== this._trigger( "select", event, { item: item } ) ) { + this._value( item.value ); + } + + // reset the term after the select event + // this allows custom select handling to work properly + this.term = this._value(); + + this.close( event ); + this.selectedItem = item; + } + } ); + + this.liveRegion = $( "<div>", { + role: "status", + "aria-live": "assertive", + "aria-relevant": "additions" + } ) + .appendTo( this.document[ 0 ].body ); + + this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" ); + + // Turning off autocomplete prevents the browser from remembering the + // value when navigating through history, so we re-enable autocomplete + // if the page is unloaded before the widget is destroyed. #7790 + this._on( this.window, { + beforeunload: function() { + this.element.removeAttr( "autocomplete" ); + } + } ); + }, + + _destroy: function() { + clearTimeout( this.searching ); + this.element.removeAttr( "autocomplete" ); + this.menu.element.remove(); + this.liveRegion.remove(); + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "source" ) { + this._initSource(); + } + if ( key === "appendTo" ) { + this.menu.element.appendTo( this._appendTo() ); + } + if ( key === "disabled" && value && this.xhr ) { + this.xhr.abort(); + } + }, + + _isEventTargetInWidget: function( event ) { + var menuElement = this.menu.element[ 0 ]; + + return event.target === this.element[ 0 ] || + event.target === menuElement || + $.contains( menuElement, event.target ); + }, + + _closeOnClickOutside: function( event ) { + if ( !this._isEventTargetInWidget( event ) ) { + this.close(); + } + }, + + _appendTo: function() { + var element = this.options.appendTo; + + if ( element ) { + element = element.jquery || element.nodeType ? + $( element ) : + this.document.find( element ).eq( 0 ); + } + + if ( !element || !element[ 0 ] ) { + element = this.element.closest( ".ui-front, dialog" ); + } + + if ( !element.length ) { + element = this.document[ 0 ].body; + } + + return element; + }, + + _initSource: function() { + var array, url, + that = this; + if ( $.isArray( this.options.source ) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter( array, request.term ) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + if ( that.xhr ) { + that.xhr.abort(); + } + that.xhr = $.ajax( { + url: url, + data: request, + dataType: "json", + success: function( data ) { + response( data ); + }, + error: function() { + response( [] ); + } + } ); + }; + } else { + this.source = this.options.source; + } + }, + + _searchTimeout: function( event ) { + clearTimeout( this.searching ); + this.searching = this._delay( function() { + + // Search if the value has changed, or if the user retypes the same value (see #7434) + var equalValues = this.term === this._value(), + menuVisible = this.menu.element.is( ":visible" ), + modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; + + if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) { + this.selectedItem = null; + this.search( null, event ); + } + }, this.options.delay ); + }, + + search: function( value, event ) { + value = value != null ? value : this._value(); + + // Always save the actual value, not the one passed as an argument + this.term = this._value(); + + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + if ( this._trigger( "search", event ) === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.pending++; + this._addClass( "ui-autocomplete-loading" ); + this.cancelSearch = false; + + this.source( { term: value }, this._response() ); + }, + + _response: function() { + var index = ++this.requestIndex; + + return $.proxy( function( content ) { + if ( index === this.requestIndex ) { + this.__response( content ); + } + + this.pending--; + if ( !this.pending ) { + this._removeClass( "ui-autocomplete-loading" ); + } + }, this ); + }, + + __response: function( content ) { + if ( content ) { + content = this._normalize( content ); + } + this._trigger( "response", null, { content: content } ); + if ( !this.options.disabled && content && content.length && !this.cancelSearch ) { + this._suggest( content ); + this._trigger( "open" ); + } else { + + // use ._close() instead of .close() so we don't cancel future searches + this._close(); + } + }, + + close: function( event ) { + this.cancelSearch = true; + this._close( event ); + }, + + _close: function( event ) { + + // Remove the handler that closes the menu on outside clicks + this._off( this.document, "mousedown" ); + + if ( this.menu.element.is( ":visible" ) ) { + this.menu.element.hide(); + this.menu.blur(); + this.isNewMenu = true; + this._trigger( "close", event ); + } + }, + + _change: function( event ) { + if ( this.previous !== this._value() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + + // assume all items have the right format when the first item is complete + if ( items.length && items[ 0 ].label && items[ 0 ].value ) { + return items; + } + return $.map( items, function( item ) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend( {}, item, { + label: item.label || item.value, + value: item.value || item.label + } ); + } ); + }, + + _suggest: function( items ) { + var ul = this.menu.element.empty(); + this._renderMenu( ul, items ); + this.isNewMenu = true; + this.menu.refresh(); + + // Size and position menu + ul.show(); + this._resizeMenu(); + ul.position( $.extend( { + of: this.element + }, this.options.position ) ); + + if ( this.options.autoFocus ) { + this.menu.next(); + } + + // Listen for interactions outside of the widget (#6642) + this._on( this.document, { + mousedown: "_closeOnClickOutside" + } ); + }, + + _resizeMenu: function() { + var ul = this.menu.element; + ul.outerWidth( Math.max( + + // Firefox wraps long text (possibly a rounding bug) + // so we add 1px to avoid the wrapping (#7513) + ul.width( "" ).outerWidth() + 1, + this.element.outerWidth() + ) ); + }, + + _renderMenu: function( ul, items ) { + var that = this; + $.each( items, function( index, item ) { + that._renderItemData( ul, item ); + } ); + }, + + _renderItemData: function( ul, item ) { + return this._renderItem( ul, item ).data( "ui-autocomplete-item", item ); + }, + + _renderItem: function( ul, item ) { + return $( "<li>" ) + .append( $( "<div>" ).text( item.label ) ) + .appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is( ":visible" ) ) { + this.search( null, event ); + return; + } + if ( this.menu.isFirstItem() && /^previous/.test( direction ) || + this.menu.isLastItem() && /^next/.test( direction ) ) { + + if ( !this.isMultiLine ) { + this._value( this.term ); + } + + this.menu.blur(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + }, + + _value: function() { + return this.valueMethod.apply( this.element, arguments ); + }, + + _keyEvent: function( keyEvent, event ) { + if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { + this._move( keyEvent, event ); + + // Prevents moving cursor to beginning/end of the text field in some browsers + event.preventDefault(); + } + }, + + // Support: Chrome <=50 + // We should be able to just use this.element.prop( "isContentEditable" ) + // but hidden elements always report false in Chrome. + // https://code.google.com/p/chromium/issues/detail?id=313082 + _isContentEditable: function( element ) { + if ( !element.length ) { + return false; + } + + var editable = element.prop( "contentEditable" ); + + if ( editable === "inherit" ) { + return this._isContentEditable( element.parent() ); + } + + return editable === "true"; + } +} ); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); + }, + filter: function( array, term ) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" ); + return $.grep( array, function( value ) { + return matcher.test( value.label || value.value || value ); + } ); + } +} ); + +// Live region extension, adding a `messages` option +// NOTE: This is an experimental API. We are still investigating +// a full solution for string manipulation and internationalization. +$.widget( "ui.autocomplete", $.ui.autocomplete, { + options: { + messages: { + noResults: "No search results.", + results: function( amount ) { + return amount + ( amount > 1 ? " results are" : " result is" ) + + " available, use up and down arrow keys to navigate."; + } + } + }, + + __response: function( content ) { + var message; + this._superApply( arguments ); + if ( this.options.disabled || this.cancelSearch ) { + return; + } + if ( content && content.length ) { + message = this.options.messages.results( content.length ); + } else { + message = this.options.messages.noResults; + } + this.liveRegion.children().hide(); + $( "<div>" ).text( message ).appendTo( this.liveRegion ); + } +} ); + +return $.ui.autocomplete; + +} ) ); +/* + + jQuery Tags Input Plugin 1.3.3 + + Copyright (c) 2011 XOXCO, Inc + + Documentation for this plugin lives here: + http://xoxco.com/clickable/jquery-tags-input + + Licensed under the MIT license: + http://www.opensource.org/licenses/mit-license.php + + ben@xoxco.com + +*/ + + +(function($) { + + var delimiter = new Array(); + var tags_callbacks = new Array(); + $.fn.doAutosize = function(o){ + var minWidth = $(this).data('minwidth'), + maxWidth = $(this).data('maxwidth'), + val = '', + input = $(this), + testSubject = $('#'+$(this).data('tester_id')); + + if (val === (val = input.val())) {return;} + + // Enter new content into testSubject + var escaped = val.replace(/&/g, '&').replace(/\s/g,' ').replace(/</g, '<').replace(/>/g, '>'); + testSubject.html(escaped); + // Calculate new width + whether to change + var testerWidth = testSubject.width(), + newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth, + currentWidth = input.width(), + isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth) + || (newWidth > minWidth && newWidth < maxWidth); + + // Animate width + if (isValidWidthChange) { + input.width(newWidth); + } + + + }; + $.fn.resetAutosize = function(options){ + // alert(JSON.stringify(options)); + var minWidth = $(this).data('minwidth') || options.minInputWidth || $(this).width(), + maxWidth = $(this).data('maxwidth') || options.maxInputWidth || ($(this).closest('.tagsinput').width() - options.inputPadding), + val = '', + input = $(this), + testSubject = $('<tester/>').css({ + position: 'absolute', + top: -9999, + left: -9999, + width: 'auto', + fontSize: input.css('fontSize'), + fontFamily: input.css('fontFamily'), + fontWeight: input.css('fontWeight'), + letterSpacing: input.css('letterSpacing'), + whiteSpace: 'nowrap' + }), + testerId = $(this).attr('id')+'_autosize_tester'; + if(! $('#'+testerId).length > 0){ + testSubject.attr('id', testerId); + testSubject.appendTo('body'); + } + + input.data('minwidth', minWidth); + input.data('maxwidth', maxWidth); + input.data('tester_id', testerId); + input.css('width', minWidth); + }; + + $.fn.addTag = function(value,options) { + options = jQuery.extend({focus:false,callback:true},options); + this.each(function() { + var id = $(this).attr('id'); + + var tagslist = $(this).val().split(delimiter[id]); + if (tagslist[0] == '') { + tagslist = new Array(); + } + + value = jQuery.trim(value); + + if (options.unique) { + var skipTag = $(this).tagExist(value); + if(skipTag == true) { + //Marks fake input as not_valid to let styling it + $('#'+id+'_tag').addClass('not_valid'); + } + } else { + var skipTag = false; + } + + if (value !='' && skipTag != true) { + $('<span>').addClass('tag').append( + $('<span>').text(value).append(' '), + $('<a>', { + href : '#', + title : 'Removing tag', + text : 'x' + }).click(function () { + return $('#' + id).removeTag(escape(value)); + }) + ).insertBefore('#' + id + '_addTag'); + + tagslist.push(value); + + $('#'+id+'_tag').val(''); + if (options.focus) { + $('#'+id+'_tag').focus(); + } else { + $('#'+id+'_tag').blur(); + } + + $.fn.tagsInput.updateTagsField(this,tagslist); + + if (options.callback && tags_callbacks[id] && tags_callbacks[id]['onAddTag']) { + var f = tags_callbacks[id]['onAddTag']; + f.call(this, value); + } + if(tags_callbacks[id] && tags_callbacks[id]['onChange']) + { + var i = tagslist.length; + var f = tags_callbacks[id]['onChange']; + f.call(this, $(this), tagslist[i-1]); + } + } + + }); + + return false; + }; + + $.fn.removeTag = function(value) { + value = unescape(value); + this.each(function() { + var id = $(this).attr('id'); + + var old = $(this).val().split(delimiter[id]); + + $('#'+id+'_tagsinput .tag').remove(); + str = ''; + for (i=0; i< old.length; i++) { + if (old[i]!=value) { + str = str + delimiter[id] +old[i]; + } + } + + $.fn.tagsInput.importTags(this,str); + + if (tags_callbacks[id] && tags_callbacks[id]['onRemoveTag']) { + var f = tags_callbacks[id]['onRemoveTag']; + f.call(this, value); + } + }); + + return false; + }; + + $.fn.tagExist = function(val) { + var id = $(this).attr('id'); + var tagslist = $(this).val().split(delimiter[id]); + return (jQuery.inArray(val, tagslist) >= 0); //true when tag exists, false when not + }; + + // clear all existing tags and import new ones from a string + $.fn.importTags = function(str) { + var id = $(this).attr('id'); + $('#'+id+'_tagsinput .tag').remove(); + $.fn.tagsInput.importTags(this,str); + } + + $.fn.tagsInput = function(options) { + var settings = jQuery.extend({ + interactive:true, + defaultText:'add a tag', + minChars:0, + width:'300px', + height:'100px', + autocomplete: {selectFirst: false }, + hide:true, + delimiter: ',', + unique:true, + removeWithBackspace:true, + placeholderColor:'#666666', + autosize: true, + comfortZone: 20, + inputPadding: 6*2 + },options); + + var uniqueIdCounter = 0; + + this.each(function() { + // If we have already initialized the field, do not do it again + if (typeof $(this).attr('data-tagsinput-init') !== 'undefined') { + return; + } + + // Mark the field as having been initialized + $(this).attr('data-tagsinput-init', true); + + if (settings.hide) { + $(this).hide(); + } + var id = $(this).attr('id'); + if (!id || delimiter[$(this).attr('id')]) { + id = $(this).attr('id', 'tags' + new Date().getTime() + (uniqueIdCounter++)).attr('id'); + } + + var data = jQuery.extend({ + pid:id, + real_input: '#'+id, + holder: '#'+id+'_tagsinput', + input_wrapper: '#'+id+'_addTag', + fake_input: '#'+id+'_tag' + },settings); + + delimiter[id] = data.delimiter; + + if (settings.onAddTag || settings.onRemoveTag || settings.onChange) { + tags_callbacks[id] = new Array(); + tags_callbacks[id]['onAddTag'] = settings.onAddTag; + tags_callbacks[id]['onRemoveTag'] = settings.onRemoveTag; + tags_callbacks[id]['onChange'] = settings.onChange; + } + + var markup = '<div id="'+id+'_tagsinput" class="tagsinput"><div id="'+id+'_addTag">'; + + if (settings.interactive) { + markup = markup + '<input id="'+id+'_tag" value="" data-default="'+settings.defaultText+'" />'; + } + + markup = markup + '</div><div class="tags_clear"></div></div>'; + + $(markup).insertAfter(this); + + $(data.holder).css('width',settings.width); + $(data.holder).css('min-height',settings.height); + $(data.holder).css('height',settings.height); + + if ($(data.real_input).val()!='') { + $.fn.tagsInput.importTags($(data.real_input),$(data.real_input).val()); + } + if (settings.interactive) { + $(data.fake_input).val($(data.fake_input).attr('data-default')); + $(data.fake_input).css('color',settings.placeholderColor); + $(data.fake_input).resetAutosize(settings); + + $(data.holder).bind('click',data,function(event) { + $(event.data.fake_input).focus(); + }); + + $(data.fake_input).bind('focus',data,function(event) { + if ($(event.data.fake_input).val()==$(event.data.fake_input).attr('data-default')) { + $(event.data.fake_input).val(''); + } + $(event.data.fake_input).css('color','#000000'); + }); + + if (settings.autocomplete_url != undefined) { + autocomplete_options = {source: settings.autocomplete_url}; + for (attrname in settings.autocomplete) { + autocomplete_options[attrname] = settings.autocomplete[attrname]; + } + + if (jQuery.Autocompleter !== undefined) { + $(data.fake_input).autocomplete(settings.autocomplete_url, settings.autocomplete); + $(data.fake_input).bind('result',data,function(event,data,formatted) { + if (data) { + $('#'+id).addTag(data[0] + "",{focus:true,unique:(settings.unique)}); + } + }); + } else if (jQuery.ui.autocomplete !== undefined) { + $(data.fake_input).autocomplete(autocomplete_options); + $(data.fake_input).bind('autocompleteselect',data,function(event,ui) { + $(event.data.real_input).addTag(ui.item.value,{focus:true,unique:(settings.unique)}); + return false; + }); + } + + + } else { + // if a user tabs out of the field, create a new tag + // this is only available if autocomplete is not used. + $(data.fake_input).bind('blur',data,function(event) { + var d = $(this).attr('data-default'); + if ($(event.data.fake_input).val()!='' && $(event.data.fake_input).val()!=d) { + if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) ) + $(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)}); + } else { + $(event.data.fake_input).val($(event.data.fake_input).attr('data-default')); + $(event.data.fake_input).css('color',settings.placeholderColor); + } + return false; + }); + + } + // if user types a default delimiter like comma,semicolon and then create a new tag + $(data.fake_input).bind('keypress',data,function(event) { + if (_checkDelimiter(event)) { + event.preventDefault(); + if( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) ) + $(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)}); + $(event.data.fake_input).resetAutosize(settings); + return false; + } else if (event.data.autosize) { + $(event.data.fake_input).doAutosize(settings); + + } + }); + //Delete last tag on backspace + data.removeWithBackspace && $(data.fake_input).bind('keydown', function(event) + { + if(event.keyCode == 8 && $(this).val() == '') + { + event.preventDefault(); + var last_tag = $(this).closest('.tagsinput').find('.tag:last').text(); + var id = $(this).attr('id').replace(/_tag$/, ''); + last_tag = last_tag.replace(/[\s]+x$/, ''); + $('#' + id).removeTag(escape(last_tag)); + $(this).trigger('focus'); + } + }); + $(data.fake_input).blur(); + + //Removes the not_valid class when user changes the value of the fake input + if(data.unique) { + $(data.fake_input).keydown(function(event){ + if(event.keyCode == 8 || String.fromCharCode(event.which).match(/\w+|[áéÃóúÃÉÃÓÚñÑ,/]+/)) { + $(this).removeClass('not_valid'); + } + }); + } + } // if settings.interactive + }); + + return this; + + }; + + $.fn.tagsInput.updateTagsField = function(obj,tagslist) { + var id = $(obj).attr('id'); + $(obj).val(tagslist.join(delimiter[id])); + }; + + $.fn.tagsInput.importTags = function(obj,val) { + $(obj).val(''); + var id = $(obj).attr('id'); + var tags = val.split(delimiter[id]); + for (i=0; i<tags.length; i++) { + $(obj).addTag(tags[i],{focus:false,callback:false}); + } + if(tags_callbacks[id] && tags_callbacks[id]['onChange']) + { + var f = tags_callbacks[id]['onChange']; + f.call(obj, obj, tags[i]); + } + }; + + /** + * check delimiter Array + * @param event + * @returns {boolean} + * @private + */ + var _checkDelimiter = function(event){ + var found = false; + if (event.which == 13) { + return true; + } + + if (typeof event.data.delimiter === 'string') { + if (event.which == event.data.delimiter.charCodeAt(0)) { + found = true; + } + } else { + $.each(event.data.delimiter, function(index, delimiter) { + if (event.which == delimiter.charCodeAt(0)) { + found = true; + } + }); + } + + return found; + } +})(jQuery); +(function($){ + + /** + * Copyright 2012, Digital Fusion + * Licensed under the MIT license. + * http://teamdf.com/jquery-plugins/license/ + * + * @author Sam Sehnert + * @desc A small plugin that checks whether elements are within + * the user visible viewport of a web browser. + * only accounts for vertical position, not horizontal. + */ + var $w = $(window); + $.fn.visible = function(partial,hidden,direction){ + + if (this.length < 1) + return; + + var $t = this.length > 1 ? this.eq(0) : this, + t = $t.get(0), + vpWidth = $w.width(), + vpHeight = $w.height(), + direction = (direction) ? direction : 'both', + clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true; + + if (typeof t.getBoundingClientRect === 'function'){ + + // Use this native browser method, if available. + var rec = t.getBoundingClientRect(), + tViz = rec.top >= 0 && rec.top < vpHeight, + bViz = rec.bottom > 0 && rec.bottom <= vpHeight, + lViz = rec.left >= 0 && rec.left < vpWidth, + rViz = rec.right > 0 && rec.right <= vpWidth, + vVisible = partial ? tViz || bViz : tViz && bViz, + hVisible = partial ? lViz || rViz : lViz && rViz; + + if(direction === 'both') + return clientSize && vVisible && hVisible; + else if(direction === 'vertical') + return clientSize && vVisible; + else if(direction === 'horizontal') + return clientSize && hVisible; + } else { + + var viewTop = $w.scrollTop(), + viewBottom = viewTop + vpHeight, + viewLeft = $w.scrollLeft(), + viewRight = viewLeft + vpWidth, + offset = $t.offset(), + _top = offset.top, + _bottom = _top + $t.height(), + _left = offset.left, + _right = _left + $t.width(), + compareTop = partial === true ? _bottom : _top, + compareBottom = partial === true ? _top : _bottom, + compareLeft = partial === true ? _right : _left, + compareRight = partial === true ? _left : _right; + + if(direction === 'both') + return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)) && ((compareRight <= viewRight) && (compareLeft >= viewLeft)); + else if(direction === 'vertical') + return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)); + else if(direction === 'horizontal') + return !!clientSize && ((compareRight <= viewRight) && (compareLeft >= viewLeft)); + } + }; + +})(jQuery); +/* +Turbolinks 5.2.0 +Copyright © 2018 Basecamp, LLC + */ + +(function(){var t=this;(function(){(function(){this.Turbolinks={supported:function(){return null!=window.history.pushState&&null!=window.requestAnimationFrame&&null!=window.addEventListener}(),visit:function(t,r){return e.controller.visit(t,r)},clearCache:function(){return e.controller.clearCache()},setProgressBarDelay:function(t){return e.controller.setProgressBarDelay(t)}}}).call(this)}).call(t);var e=t.Turbolinks;(function(){(function(){var t,r,n,o=[].slice;e.copyObject=function(t){var e,r,n;r={};for(e in t)n=t[e],r[e]=n;return r},e.closest=function(e,r){return t.call(e,r)},t=function(){var t,e;return t=document.documentElement,null!=(e=t.closest)?e:function(t){var e;for(e=this;e;){if(e.nodeType===Node.ELEMENT_NODE&&r.call(e,t))return e;e=e.parentNode}}}(),e.defer=function(t){return setTimeout(t,1)},e.throttle=function(t){var e;return e=null,function(){var r;return r=1<=arguments.length?o.call(arguments,0):[],null!=e?e:e=requestAnimationFrame(function(n){return function(){return e=null,t.apply(n,r)}}(this))}},e.dispatch=function(t,e){var r,o,i,s,a,u;return a=null!=e?e:{},u=a.target,r=a.cancelable,o=a.data,i=document.createEvent("Events"),i.initEvent(t,!0,r===!0),i.data=null!=o?o:{},i.cancelable&&!n&&(s=i.preventDefault,i.preventDefault=function(){return this.defaultPrevented||Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}}),s.call(this)}),(null!=u?u:document).dispatchEvent(i),i},n=function(){var t;return t=document.createEvent("Events"),t.initEvent("test",!0,!0),t.preventDefault(),t.defaultPrevented}(),e.match=function(t,e){return r.call(t,e)},r=function(){var t,e,r,n;return t=document.documentElement,null!=(e=null!=(r=null!=(n=t.matchesSelector)?n:t.webkitMatchesSelector)?r:t.msMatchesSelector)?e:t.mozMatchesSelector}(),e.uuid=function(){var t,e,r;for(r="",t=e=1;36>=e;t=++e)r+=9===t||14===t||19===t||24===t?"-":15===t?"4":20===t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16);return r}}).call(this),function(){e.Location=function(){function t(t){var e,r;null==t&&(t=""),r=document.createElement("a"),r.href=t.toString(),this.absoluteURL=r.href,e=r.hash.length,2>e?this.requestURL=this.absoluteURL:(this.requestURL=this.absoluteURL.slice(0,-e),this.anchor=r.hash.slice(1))}var e,r,n,o;return t.wrap=function(t){return t instanceof this?t:new this(t)},t.prototype.getOrigin=function(){return this.absoluteURL.split("/",3).join("/")},t.prototype.getPath=function(){var t,e;return null!=(t=null!=(e=this.requestURL.match(/\/\/[^\/]*(\/[^?;]*)/))?e[1]:void 0)?t:"/"},t.prototype.getPathComponents=function(){return this.getPath().split("/").slice(1)},t.prototype.getLastPathComponent=function(){return this.getPathComponents().slice(-1)[0]},t.prototype.getExtension=function(){var t,e;return null!=(t=null!=(e=this.getLastPathComponent().match(/\.[^.]*$/))?e[0]:void 0)?t:""},t.prototype.isHTML=function(){return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)},t.prototype.isPrefixedBy=function(t){var e;return e=r(t),this.isEqualTo(t)||o(this.absoluteURL,e)},t.prototype.isEqualTo=function(t){return this.absoluteURL===(null!=t?t.absoluteURL:void 0)},t.prototype.toCacheKey=function(){return this.requestURL},t.prototype.toJSON=function(){return this.absoluteURL},t.prototype.toString=function(){return this.absoluteURL},t.prototype.valueOf=function(){return this.absoluteURL},r=function(t){return e(t.getOrigin()+t.getPath())},e=function(t){return n(t,"/")?t:t+"/"},o=function(t,e){return t.slice(0,e.length)===e},n=function(t,e){return t.slice(-e.length)===e},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.HttpRequest=function(){function r(r,n,o){this.delegate=r,this.requestCanceled=t(this.requestCanceled,this),this.requestTimedOut=t(this.requestTimedOut,this),this.requestFailed=t(this.requestFailed,this),this.requestLoaded=t(this.requestLoaded,this),this.requestProgressed=t(this.requestProgressed,this),this.url=e.Location.wrap(n).requestURL,this.referrer=e.Location.wrap(o).absoluteURL,this.createXHR()}return r.NETWORK_FAILURE=0,r.TIMEOUT_FAILURE=-1,r.timeout=60,r.prototype.send=function(){var t;return this.xhr&&!this.sent?(this.notifyApplicationBeforeRequestStart(),this.setProgress(0),this.xhr.send(),this.sent=!0,"function"==typeof(t=this.delegate).requestStarted?t.requestStarted():void 0):void 0},r.prototype.cancel=function(){return this.xhr&&this.sent?this.xhr.abort():void 0},r.prototype.requestProgressed=function(t){return t.lengthComputable?this.setProgress(t.loaded/t.total):void 0},r.prototype.requestLoaded=function(){return this.endRequest(function(t){return function(){var e;return 200<=(e=t.xhr.status)&&300>e?t.delegate.requestCompletedWithResponse(t.xhr.responseText,t.xhr.getResponseHeader("Turbolinks-Location")):(t.failed=!0,t.delegate.requestFailedWithStatusCode(t.xhr.status,t.xhr.responseText))}}(this))},r.prototype.requestFailed=function(){return this.endRequest(function(t){return function(){return t.failed=!0,t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE)}}(this))},r.prototype.requestTimedOut=function(){return this.endRequest(function(t){return function(){return t.failed=!0,t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE)}}(this))},r.prototype.requestCanceled=function(){return this.endRequest()},r.prototype.notifyApplicationBeforeRequestStart=function(){return e.dispatch("turbolinks:request-start",{data:{url:this.url,xhr:this.xhr}})},r.prototype.notifyApplicationAfterRequestEnd=function(){return e.dispatch("turbolinks:request-end",{data:{url:this.url,xhr:this.xhr}})},r.prototype.createXHR=function(){return this.xhr=new XMLHttpRequest,this.xhr.open("GET",this.url,!0),this.xhr.timeout=1e3*this.constructor.timeout,this.xhr.setRequestHeader("Accept","text/html, application/xhtml+xml"),this.xhr.setRequestHeader("Turbolinks-Referrer",this.referrer),this.xhr.onprogress=this.requestProgressed,this.xhr.onload=this.requestLoaded,this.xhr.onerror=this.requestFailed,this.xhr.ontimeout=this.requestTimedOut,this.xhr.onabort=this.requestCanceled},r.prototype.endRequest=function(t){return this.xhr?(this.notifyApplicationAfterRequestEnd(),null!=t&&t.call(this),this.destroy()):void 0},r.prototype.setProgress=function(t){var e;return this.progress=t,"function"==typeof(e=this.delegate).requestProgressed?e.requestProgressed(this.progress):void 0},r.prototype.destroy=function(){var t;return this.setProgress(1),"function"==typeof(t=this.delegate).requestFinished&&t.requestFinished(),this.delegate=null,this.xhr=null},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.ProgressBar=function(){function e(){this.trickle=t(this.trickle,this),this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement()}var r;return r=300,e.defaultCSS=".turbolinks-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 9999;\n transition: width "+r+"ms ease-out, opacity "+r/2+"ms "+r/2+"ms ease-in;\n transform: translate3d(0, 0, 0);\n}",e.prototype.show=function(){return this.visible?void 0:(this.visible=!0,this.installStylesheetElement(),this.installProgressElement(),this.startTrickling())},e.prototype.hide=function(){return this.visible&&!this.hiding?(this.hiding=!0,this.fadeProgressElement(function(t){return function(){return t.uninstallProgressElement(),t.stopTrickling(),t.visible=!1,t.hiding=!1}}(this))):void 0},e.prototype.setValue=function(t){return this.value=t,this.refresh()},e.prototype.installStylesheetElement=function(){return document.head.insertBefore(this.stylesheetElement,document.head.firstChild)},e.prototype.installProgressElement=function(){return this.progressElement.style.width=0,this.progressElement.style.opacity=1,document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()},e.prototype.fadeProgressElement=function(t){return this.progressElement.style.opacity=0,setTimeout(t,1.5*r)},e.prototype.uninstallProgressElement=function(){return this.progressElement.parentNode?document.documentElement.removeChild(this.progressElement):void 0},e.prototype.startTrickling=function(){return null!=this.trickleInterval?this.trickleInterval:this.trickleInterval=setInterval(this.trickle,r)},e.prototype.stopTrickling=function(){return clearInterval(this.trickleInterval),this.trickleInterval=null},e.prototype.trickle=function(){return this.setValue(this.value+Math.random()/100)},e.prototype.refresh=function(){return requestAnimationFrame(function(t){return function(){return t.progressElement.style.width=10+90*t.value+"%"}}(this))},e.prototype.createStylesheetElement=function(){var t;return t=document.createElement("style"),t.type="text/css",t.textContent=this.constructor.defaultCSS,t},e.prototype.createProgressElement=function(){var t;return t=document.createElement("div"),t.className="turbolinks-progress-bar",t},e}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.BrowserAdapter=function(){function r(r){this.controller=r,this.showProgressBar=t(this.showProgressBar,this),this.progressBar=new e.ProgressBar}var n,o,i;return i=e.HttpRequest,n=i.NETWORK_FAILURE,o=i.TIMEOUT_FAILURE,r.prototype.visitProposedToLocationWithAction=function(t,e){return this.controller.startVisitToLocationWithAction(t,e)},r.prototype.visitStarted=function(t){return t.issueRequest(),t.changeHistory(),t.loadCachedSnapshot()},r.prototype.visitRequestStarted=function(t){return this.progressBar.setValue(0),t.hasCachedSnapshot()||"restore"!==t.action?this.showProgressBarAfterDelay():this.showProgressBar()},r.prototype.visitRequestProgressed=function(t){return this.progressBar.setValue(t.progress)},r.prototype.visitRequestCompleted=function(t){return t.loadResponse()},r.prototype.visitRequestFailedWithStatusCode=function(t,e){switch(e){case n:case o:return this.reload();default:return t.loadResponse()}},r.prototype.visitRequestFinished=function(t){return this.hideProgressBar()},r.prototype.visitCompleted=function(t){return t.followRedirect()},r.prototype.pageInvalidated=function(){return this.reload()},r.prototype.showProgressBarAfterDelay=function(){return this.progressBarTimeout=setTimeout(this.showProgressBar,this.controller.progressBarDelay)},r.prototype.showProgressBar=function(){return this.progressBar.show()},r.prototype.hideProgressBar=function(){return this.progressBar.hide(),clearTimeout(this.progressBarTimeout)},r.prototype.reload=function(){return window.location.reload()},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.History=function(){function r(e){this.delegate=e,this.onPageLoad=t(this.onPageLoad,this),this.onPopState=t(this.onPopState,this)}return r.prototype.start=function(){return this.started?void 0:(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0)},r.prototype.stop=function(){return this.started?(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1):void 0},r.prototype.push=function(t,r){return t=e.Location.wrap(t),this.update("push",t,r)},r.prototype.replace=function(t,r){return t=e.Location.wrap(t),this.update("replace",t,r)},r.prototype.onPopState=function(t){var r,n,o,i;return this.shouldHandlePopState()&&(i=null!=(n=t.state)?n.turbolinks:void 0)?(r=e.Location.wrap(window.location),o=i.restorationIdentifier,this.delegate.historyPoppedToLocationWithRestorationIdentifier(r,o)):void 0},r.prototype.onPageLoad=function(t){return e.defer(function(t){return function(){return t.pageLoaded=!0}}(this))},r.prototype.shouldHandlePopState=function(){return this.pageIsLoaded()},r.prototype.pageIsLoaded=function(){return this.pageLoaded||"complete"===document.readyState},r.prototype.update=function(t,e,r){var n;return n={turbolinks:{restorationIdentifier:r}},history[t+"State"](n,null,e)},r}()}.call(this),function(){e.HeadDetails=function(){function t(t){var e,r,n,s,a,u;for(this.elements={},n=0,a=t.length;a>n;n++)u=t[n],u.nodeType===Node.ELEMENT_NODE&&(s=u.outerHTML,r=null!=(e=this.elements)[s]?e[s]:e[s]={type:i(u),tracked:o(u),elements:[]},r.elements.push(u))}var e,r,n,o,i;return t.fromHeadElement=function(t){var e;return new this(null!=(e=null!=t?t.childNodes:void 0)?e:[])},t.prototype.hasElementWithKey=function(t){return t in this.elements},t.prototype.getTrackedElementSignature=function(){var t,e;return function(){var r,n;r=this.elements,n=[];for(t in r)e=r[t].tracked,e&&n.push(t);return n}.call(this).join("")},t.prototype.getScriptElementsNotInDetails=function(t){return this.getElementsMatchingTypeNotInDetails("script",t)},t.prototype.getStylesheetElementsNotInDetails=function(t){return this.getElementsMatchingTypeNotInDetails("stylesheet",t)},t.prototype.getElementsMatchingTypeNotInDetails=function(t,e){var r,n,o,i,s,a;o=this.elements,s=[];for(n in o)i=o[n],a=i.type,r=i.elements,a!==t||e.hasElementWithKey(n)||s.push(r[0]);return s},t.prototype.getProvisionalElements=function(){var t,e,r,n,o,i,s;r=[],n=this.elements;for(e in n)o=n[e],s=o.type,i=o.tracked,t=o.elements,null!=s||i?t.length>1&&r.push.apply(r,t.slice(1)):r.push.apply(r,t);return r},t.prototype.getMetaValue=function(t){var e;return null!=(e=this.findMetaElementByName(t))?e.getAttribute("content"):void 0},t.prototype.findMetaElementByName=function(t){var r,n,o,i;r=void 0,i=this.elements;for(o in i)n=i[o].elements,e(n[0],t)&&(r=n[0]);return r},i=function(t){return r(t)?"script":n(t)?"stylesheet":void 0},o=function(t){return"reload"===t.getAttribute("data-turbolinks-track")},r=function(t){var e;return e=t.tagName.toLowerCase(),"script"===e},n=function(t){var e;return e=t.tagName.toLowerCase(),"style"===e||"link"===e&&"stylesheet"===t.getAttribute("rel")},e=function(t,e){var r;return r=t.tagName.toLowerCase(),"meta"===r&&t.getAttribute("name")===e},t}()}.call(this),function(){e.Snapshot=function(){function t(t,e){this.headDetails=t,this.bodyElement=e}return t.wrap=function(t){return t instanceof this?t:"string"==typeof t?this.fromHTMLString(t):this.fromHTMLElement(t)},t.fromHTMLString=function(t){var e;return e=document.createElement("html"),e.innerHTML=t,this.fromHTMLElement(e)},t.fromHTMLElement=function(t){var r,n,o,i;return o=t.querySelector("head"),r=null!=(i=t.querySelector("body"))?i:document.createElement("body"),n=e.HeadDetails.fromHeadElement(o),new this(n,r)},t.prototype.clone=function(){return new this.constructor(this.headDetails,this.bodyElement.cloneNode(!0))},t.prototype.getRootLocation=function(){var t,r;return r=null!=(t=this.getSetting("root"))?t:"/",new e.Location(r)},t.prototype.getCacheControlValue=function(){return this.getSetting("cache-control")},t.prototype.getElementForAnchor=function(t){try{return this.bodyElement.querySelector("[id='"+t+"'], a[name='"+t+"']")}catch(e){}},t.prototype.getPermanentElements=function(){return this.bodyElement.querySelectorAll("[id][data-turbolinks-permanent]")},t.prototype.getPermanentElementById=function(t){return this.bodyElement.querySelector("#"+t+"[data-turbolinks-permanent]")},t.prototype.getPermanentElementsPresentInSnapshot=function(t){var e,r,n,o,i;for(o=this.getPermanentElements(),i=[],r=0,n=o.length;n>r;r++)e=o[r],t.getPermanentElementById(e.id)&&i.push(e);return i},t.prototype.findFirstAutofocusableElement=function(){return this.bodyElement.querySelector("[autofocus]")},t.prototype.hasAnchor=function(t){return null!=this.getElementForAnchor(t)},t.prototype.isPreviewable=function(){return"no-preview"!==this.getCacheControlValue()},t.prototype.isCacheable=function(){return"no-cache"!==this.getCacheControlValue()},t.prototype.isVisitable=function(){return"reload"!==this.getSetting("visit-control")},t.prototype.getSetting=function(t){return this.headDetails.getMetaValue("turbolinks-"+t)},t}()}.call(this),function(){var t=[].slice;e.Renderer=function(){function e(){}var r;return e.render=function(){var e,r,n,o;return n=arguments[0],r=arguments[1],e=3<=arguments.length?t.call(arguments,2):[],o=function(t,e,r){r.prototype=t.prototype;var n=new r,o=t.apply(n,e);return Object(o)===o?o:n}(this,e,function(){}),o.delegate=n,o.render(r),o},e.prototype.renderView=function(t){return this.delegate.viewWillRender(this.newBody),t(),this.delegate.viewRendered(this.newBody)},e.prototype.invalidateView=function(){return this.delegate.viewInvalidated()},e.prototype.createScriptElement=function(t){var e;return"false"===t.getAttribute("data-turbolinks-eval")?t:(e=document.createElement("script"),e.textContent=t.textContent,e.async=!1,r(e,t),e)},r=function(t,e){var r,n,o,i,s,a,u;for(i=e.attributes,a=[],r=0,n=i.length;n>r;r++)s=i[r],o=s.name,u=s.value,a.push(t.setAttribute(o,u));return a},e}()}.call(this),function(){var t,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;e.SnapshotRenderer=function(e){function o(t,e,r){this.currentSnapshot=t,this.newSnapshot=e,this.isPreview=r,this.currentHeadDetails=this.currentSnapshot.headDetails,this.newHeadDetails=this.newSnapshot.headDetails,this.currentBody=this.currentSnapshot.bodyElement,this.newBody=this.newSnapshot.bodyElement}return n(o,e),o.prototype.render=function(t){return this.shouldRender()?(this.mergeHead(),this.renderView(function(e){return function(){return e.replaceBody(),e.isPreview||e.focusFirstAutofocusableElement(),t()}}(this))):this.invalidateView()},o.prototype.mergeHead=function(){return this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()},o.prototype.replaceBody=function(){var t;return t=this.relocateCurrentBodyPermanentElements(),this.activateNewBodyScriptElements(),this.assignNewBody(),this.replacePlaceholderElementsWithClonedPermanentElements(t)},o.prototype.shouldRender=function(){return this.newSnapshot.isVisitable()&&this.trackedElementsAreIdentical()},o.prototype.trackedElementsAreIdentical=function(){return this.currentHeadDetails.getTrackedElementSignature()===this.newHeadDetails.getTrackedElementSignature()},o.prototype.copyNewHeadStylesheetElements=function(){var t,e,r,n,o;for(n=this.getNewHeadStylesheetElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(t));return o},o.prototype.copyNewHeadScriptElements=function(){var t,e,r,n,o;for(n=this.getNewHeadScriptElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(this.createScriptElement(t)));return o},o.prototype.removeCurrentHeadProvisionalElements=function(){var t,e,r,n,o;for(n=this.getCurrentHeadProvisionalElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.removeChild(t));return o},o.prototype.copyNewHeadProvisionalElements=function(){var t,e,r,n,o;for(n=this.getNewHeadProvisionalElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(t));return o},o.prototype.relocateCurrentBodyPermanentElements=function(){var e,n,o,i,s,a,u;for(a=this.getCurrentBodyPermanentElements(),u=[],e=0,n=a.length;n>e;e++)i=a[e],s=t(i),o=this.newSnapshot.getPermanentElementById(i.id),r(i,s.element),r(o,i),u.push(s);return u},o.prototype.replacePlaceholderElementsWithClonedPermanentElements=function(t){var e,n,o,i,s,a,u;for(u=[],o=0,i=t.length;i>o;o++)a=t[o],n=a.element,s=a.permanentElement,e=s.cloneNode(!0),u.push(r(n,e));return u},o.prototype.activateNewBodyScriptElements=function(){var t,e,n,o,i,s;for(i=this.getNewBodyScriptElements(),s=[],e=0,o=i.length;o>e;e++)n=i[e],t=this.createScriptElement(n),s.push(r(n,t));return s},o.prototype.assignNewBody=function(){return document.body=this.newBody},o.prototype.focusFirstAutofocusableElement=function(){var t;return null!=(t=this.newSnapshot.findFirstAutofocusableElement())?t.focus():void 0},o.prototype.getNewHeadStylesheetElements=function(){return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails)},o.prototype.getNewHeadScriptElements=function(){return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails)},o.prototype.getCurrentHeadProvisionalElements=function(){return this.currentHeadDetails.getProvisionalElements()},o.prototype.getNewHeadProvisionalElements=function(){return this.newHeadDetails.getProvisionalElements()},o.prototype.getCurrentBodyPermanentElements=function(){return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot)},o.prototype.getNewBodyScriptElements=function(){return this.newBody.querySelectorAll("script")},o}(e.Renderer),t=function(t){var e;return e=document.createElement("meta"),e.setAttribute("name","turbolinks-permanent-placeholder"),e.setAttribute("content",t.id),{element:e,permanentElement:t}},r=function(t,e){var r;return(r=t.parentNode)?r.replaceChild(e,t):void 0}}.call(this),function(){var t=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;e.ErrorRenderer=function(e){function r(t){var e;e=document.createElement("html"),e.innerHTML=t,this.newHead=e.querySelector("head"),this.newBody=e.querySelector("body")}return t(r,e),r.prototype.render=function(t){return this.renderView(function(e){return function(){return e.replaceHeadAndBody(),e.activateBodyScriptElements(),t()}}(this))},r.prototype.replaceHeadAndBody=function(){var t,e;return e=document.head,t=document.body,e.parentNode.replaceChild(this.newHead,e),t.parentNode.replaceChild(this.newBody,t)},r.prototype.activateBodyScriptElements=function(){var t,e,r,n,o,i;for(n=this.getScriptElements(),i=[],e=0,r=n.length;r>e;e++)o=n[e],t=this.createScriptElement(o),i.push(o.parentNode.replaceChild(t,o));return i},r.prototype.getScriptElements=function(){return document.documentElement.querySelectorAll("script")},r}(e.Renderer)}.call(this),function(){e.View=function(){function t(t){this.delegate=t,this.htmlElement=document.documentElement}return t.prototype.getRootLocation=function(){return this.getSnapshot().getRootLocation()},t.prototype.getElementForAnchor=function(t){return this.getSnapshot().getElementForAnchor(t)},t.prototype.getSnapshot=function(){return e.Snapshot.fromHTMLElement(this.htmlElement)},t.prototype.render=function(t,e){var r,n,o;return o=t.snapshot,r=t.error,n=t.isPreview,this.markAsPreview(n),null!=o?this.renderSnapshot(o,n,e):this.renderError(r,e)},t.prototype.markAsPreview=function(t){return t?this.htmlElement.setAttribute("data-turbolinks-preview",""):this.htmlElement.removeAttribute("data-turbolinks-preview")},t.prototype.renderSnapshot=function(t,r,n){return e.SnapshotRenderer.render(this.delegate,n,this.getSnapshot(),e.Snapshot.wrap(t),r)},t.prototype.renderError=function(t,r){return e.ErrorRenderer.render(this.delegate,r,t)},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.ScrollManager=function(){function r(r){this.delegate=r,this.onScroll=t(this.onScroll,this),this.onScroll=e.throttle(this.onScroll)}return r.prototype.start=function(){return this.started?void 0:(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)},r.prototype.stop=function(){return this.started?(removeEventListener("scroll",this.onScroll,!1),this.started=!1):void 0},r.prototype.scrollToElement=function(t){return t.scrollIntoView()},r.prototype.scrollToPosition=function(t){var e,r;return e=t.x,r=t.y,window.scrollTo(e,r)},r.prototype.onScroll=function(t){return this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},r.prototype.updatePosition=function(t){var e;return this.position=t,null!=(e=this.delegate)?e.scrollPositionChanged(this.position):void 0},r}()}.call(this),function(){e.SnapshotCache=function(){function t(t){this.size=t,this.keys=[],this.snapshots={}}var r;return t.prototype.has=function(t){var e;return e=r(t),e in this.snapshots},t.prototype.get=function(t){var e;if(this.has(t))return e=this.read(t),this.touch(t),e},t.prototype.put=function(t,e){return this.write(t,e),this.touch(t),e},t.prototype.read=function(t){var e;return e=r(t),this.snapshots[e]},t.prototype.write=function(t,e){var n;return n=r(t),this.snapshots[n]=e},t.prototype.touch=function(t){var e,n;return n=r(t),e=this.keys.indexOf(n),e>-1&&this.keys.splice(e,1),this.keys.unshift(n),this.trim()},t.prototype.trim=function(){var t,e,r,n,o;for(n=this.keys.splice(this.size),o=[],t=0,r=n.length;r>t;t++)e=n[t],o.push(delete this.snapshots[e]);return o},r=function(t){return e.Location.wrap(t).toCacheKey()},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.Visit=function(){function r(r,n,o){this.controller=r,this.action=o,this.performScroll=t(this.performScroll,this),this.identifier=e.uuid(),this.location=e.Location.wrap(n),this.adapter=this.controller.adapter,this.state="initialized",this.timingMetrics={}}var n;return r.prototype.start=function(){return"initialized"===this.state?(this.recordTimingMetric("visitStart"),this.state="started",this.adapter.visitStarted(this)):void 0},r.prototype.cancel=function(){var t;return"started"===this.state?(null!=(t=this.request)&&t.cancel(),this.cancelRender(),this.state="canceled"):void 0},r.prototype.complete=function(){var t;return"started"===this.state?(this.recordTimingMetric("visitEnd"),this.state="completed","function"==typeof(t=this.adapter).visitCompleted&&t.visitCompleted(this),this.controller.visitCompleted(this)):void 0},r.prototype.fail=function(){var t;return"started"===this.state?(this.state="failed","function"==typeof(t=this.adapter).visitFailed?t.visitFailed(this):void 0):void 0},r.prototype.changeHistory=function(){var t,e;return this.historyChanged?void 0:(t=this.location.isEqualTo(this.referrer)?"replace":this.action,e=n(t),this.controller[e](this.location,this.restorationIdentifier),this.historyChanged=!0)},r.prototype.issueRequest=function(){return this.shouldIssueRequest()&&null==this.request?(this.progress=0,this.request=new e.HttpRequest(this,this.location,this.referrer),this.request.send()):void 0},r.prototype.getCachedSnapshot=function(){var t;return!(t=this.controller.getCachedSnapshotForLocation(this.location))||null!=this.location.anchor&&!t.hasAnchor(this.location.anchor)||"restore"!==this.action&&!t.isPreviewable()?void 0:t},r.prototype.hasCachedSnapshot=function(){return null!=this.getCachedSnapshot()},r.prototype.loadCachedSnapshot=function(){var t,e;return(e=this.getCachedSnapshot())?(t=this.shouldIssueRequest(),this.render(function(){var r;return this.cacheSnapshot(),this.controller.render({snapshot:e,isPreview:t},this.performScroll),"function"==typeof(r=this.adapter).visitRendered&&r.visitRendered(this),t?void 0:this.complete()})):void 0},r.prototype.loadResponse=function(){return null!=this.response?this.render(function(){var t,e;return this.cacheSnapshot(),this.request.failed?(this.controller.render({error:this.response},this.performScroll),"function"==typeof(t=this.adapter).visitRendered&&t.visitRendered(this),this.fail()):(this.controller.render({snapshot:this.response},this.performScroll),"function"==typeof(e=this.adapter).visitRendered&&e.visitRendered(this),this.complete())}):void 0},r.prototype.followRedirect=function(){return this.redirectedToLocation&&!this.followedRedirect?(this.location=this.redirectedToLocation,this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation,this.restorationIdentifier),this.followedRedirect=!0):void 0},r.prototype.requestStarted=function(){var t;return this.recordTimingMetric("requestStart"),"function"==typeof(t=this.adapter).visitRequestStarted?t.visitRequestStarted(this):void 0},r.prototype.requestProgressed=function(t){var e;return this.progress=t,"function"==typeof(e=this.adapter).visitRequestProgressed?e.visitRequestProgressed(this):void 0},r.prototype.requestCompletedWithResponse=function(t,r){return this.response=t,null!=r&&(this.redirectedToLocation=e.Location.wrap(r)),this.adapter.visitRequestCompleted(this)},r.prototype.requestFailedWithStatusCode=function(t,e){return this.response=e,this.adapter.visitRequestFailedWithStatusCode(this,t)},r.prototype.requestFinished=function(){var t;return this.recordTimingMetric("requestEnd"),"function"==typeof(t=this.adapter).visitRequestFinished?t.visitRequestFinished(this):void 0},r.prototype.performScroll=function(){return this.scrolled?void 0:("restore"===this.action?this.scrollToRestoredPosition()||this.scrollToTop():this.scrollToAnchor()||this.scrollToTop(),this.scrolled=!0)},r.prototype.scrollToRestoredPosition=function(){var t,e;return t=null!=(e=this.restorationData)?e.scrollPosition:void 0,null!=t?(this.controller.scrollToPosition(t),!0):void 0},r.prototype.scrollToAnchor=function(){return null!=this.location.anchor?(this.controller.scrollToAnchor(this.location.anchor),!0):void 0},r.prototype.scrollToTop=function(){return this.controller.scrollToPosition({x:0,y:0})},r.prototype.recordTimingMetric=function(t){var e;return null!=(e=this.timingMetrics)[t]?e[t]:e[t]=(new Date).getTime()},r.prototype.getTimingMetrics=function(){return e.copyObject(this.timingMetrics)},n=function(t){switch(t){case"replace":return"replaceHistoryWithLocationAndRestorationIdentifier";case"advance":case"restore":return"pushHistoryWithLocationAndRestorationIdentifier"}},r.prototype.shouldIssueRequest=function(){return"restore"===this.action?!this.hasCachedSnapshot():!0},r.prototype.cacheSnapshot=function(){return this.snapshotCached?void 0:(this.controller.cacheSnapshot(),this.snapshotCached=!0)},r.prototype.render=function(t){return this.cancelRender(),this.frame=requestAnimationFrame(function(e){return function(){return e.frame=null,t.call(e)}}(this))},r.prototype.cancelRender=function(){return this.frame?cancelAnimationFrame(this.frame):void 0},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.Controller=function(){function r(){this.clickBubbled=t(this.clickBubbled,this),this.clickCaptured=t(this.clickCaptured,this),this.pageLoaded=t(this.pageLoaded,this),this.history=new e.History(this),this.view=new e.View(this),this.scrollManager=new e.ScrollManager(this),this.restorationData={},this.clearCache(),this.setProgressBarDelay(500)}return r.prototype.start=function(){return e.supported&&!this.started?(addEventListener("click",this.clickCaptured,!0),addEventListener("DOMContentLoaded",this.pageLoaded,!1),this.scrollManager.start(),this.startHistory(),this.started=!0,this.enabled=!0):void 0},r.prototype.disable=function(){return this.enabled=!1},r.prototype.stop=function(){return this.started?(removeEventListener("click",this.clickCaptured,!0),removeEventListener("DOMContentLoaded",this.pageLoaded,!1),this.scrollManager.stop(),this.stopHistory(),this.started=!1):void 0},r.prototype.clearCache=function(){return this.cache=new e.SnapshotCache(10)},r.prototype.visit=function(t,r){var n,o;return null==r&&(r={}),t=e.Location.wrap(t),this.applicationAllowsVisitingLocation(t)?this.locationIsVisitable(t)?(n=null!=(o=r.action)?o:"advance",this.adapter.visitProposedToLocationWithAction(t,n)):window.location=t:void 0},r.prototype.startVisitToLocationWithAction=function(t,r,n){var o;return e.supported?(o=this.getRestorationDataForIdentifier(n),this.startVisit(t,r,{restorationData:o})):window.location=t},r.prototype.setProgressBarDelay=function(t){return this.progressBarDelay=t},r.prototype.startHistory=function(){return this.location=e.Location.wrap(window.location),this.restorationIdentifier=e.uuid(),this.history.start(),this.history.replace(this.location,this.restorationIdentifier)},r.prototype.stopHistory=function(){return this.history.stop()},r.prototype.pushHistoryWithLocationAndRestorationIdentifier=function(t,r){return this.restorationIdentifier=r,this.location=e.Location.wrap(t),this.history.push(this.location,this.restorationIdentifier)},r.prototype.replaceHistoryWithLocationAndRestorationIdentifier=function(t,r){return this.restorationIdentifier=r,this.location=e.Location.wrap(t),this.history.replace(this.location,this.restorationIdentifier)},r.prototype.historyPoppedToLocationWithRestorationIdentifier=function(t,r){var n;return this.restorationIdentifier=r,this.enabled?(n=this.getRestorationDataForIdentifier(this.restorationIdentifier),this.startVisit(t,"restore",{restorationIdentifier:this.restorationIdentifier,restorationData:n,historyChanged:!0}),this.location=e.Location.wrap(t)):this.adapter.pageInvalidated()},r.prototype.getCachedSnapshotForLocation=function(t){var e;return null!=(e=this.cache.get(t))?e.clone():void 0},r.prototype.shouldCacheSnapshot=function(){return this.view.getSnapshot().isCacheable(); +},r.prototype.cacheSnapshot=function(){var t,r;return this.shouldCacheSnapshot()?(this.notifyApplicationBeforeCachingSnapshot(),r=this.view.getSnapshot(),t=this.lastRenderedLocation,e.defer(function(e){return function(){return e.cache.put(t,r.clone())}}(this))):void 0},r.prototype.scrollToAnchor=function(t){var e;return(e=this.view.getElementForAnchor(t))?this.scrollToElement(e):this.scrollToPosition({x:0,y:0})},r.prototype.scrollToElement=function(t){return this.scrollManager.scrollToElement(t)},r.prototype.scrollToPosition=function(t){return this.scrollManager.scrollToPosition(t)},r.prototype.scrollPositionChanged=function(t){var e;return e=this.getCurrentRestorationData(),e.scrollPosition=t},r.prototype.render=function(t,e){return this.view.render(t,e)},r.prototype.viewInvalidated=function(){return this.adapter.pageInvalidated()},r.prototype.viewWillRender=function(t){return this.notifyApplicationBeforeRender(t)},r.prototype.viewRendered=function(){return this.lastRenderedLocation=this.currentVisit.location,this.notifyApplicationAfterRender()},r.prototype.pageLoaded=function(){return this.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()},r.prototype.clickCaptured=function(){return removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},r.prototype.clickBubbled=function(t){var e,r,n;return this.enabled&&this.clickEventIsSignificant(t)&&(r=this.getVisitableLinkForNode(t.target))&&(n=this.getVisitableLocationForLink(r))&&this.applicationAllowsFollowingLinkToLocation(r,n)?(t.preventDefault(),e=this.getActionForLink(r),this.visit(n,{action:e})):void 0},r.prototype.applicationAllowsFollowingLinkToLocation=function(t,e){var r;return r=this.notifyApplicationAfterClickingLinkToLocation(t,e),!r.defaultPrevented},r.prototype.applicationAllowsVisitingLocation=function(t){var e;return e=this.notifyApplicationBeforeVisitingLocation(t),!e.defaultPrevented},r.prototype.notifyApplicationAfterClickingLinkToLocation=function(t,r){return e.dispatch("turbolinks:click",{target:t,data:{url:r.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationBeforeVisitingLocation=function(t){return e.dispatch("turbolinks:before-visit",{data:{url:t.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationAfterVisitingLocation=function(t){return e.dispatch("turbolinks:visit",{data:{url:t.absoluteURL}})},r.prototype.notifyApplicationBeforeCachingSnapshot=function(){return e.dispatch("turbolinks:before-cache")},r.prototype.notifyApplicationBeforeRender=function(t){return e.dispatch("turbolinks:before-render",{data:{newBody:t}})},r.prototype.notifyApplicationAfterRender=function(){return e.dispatch("turbolinks:render")},r.prototype.notifyApplicationAfterPageLoad=function(t){return null==t&&(t={}),e.dispatch("turbolinks:load",{data:{url:this.location.absoluteURL,timing:t}})},r.prototype.startVisit=function(t,e,r){var n;return null!=(n=this.currentVisit)&&n.cancel(),this.currentVisit=this.createVisit(t,e,r),this.currentVisit.start(),this.notifyApplicationAfterVisitingLocation(t)},r.prototype.createVisit=function(t,r,n){var o,i,s,a,u;return i=null!=n?n:{},a=i.restorationIdentifier,s=i.restorationData,o=i.historyChanged,u=new e.Visit(this,t,r),u.restorationIdentifier=null!=a?a:e.uuid(),u.restorationData=e.copyObject(s),u.historyChanged=o,u.referrer=this.location,u},r.prototype.visitCompleted=function(t){return this.notifyApplicationAfterPageLoad(t.getTimingMetrics())},r.prototype.clickEventIsSignificant=function(t){return!(t.defaultPrevented||t.target.isContentEditable||t.which>1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey)},r.prototype.getVisitableLinkForNode=function(t){return this.nodeIsVisitable(t)?e.closest(t,"a[href]:not([target]):not([download])"):void 0},r.prototype.getVisitableLocationForLink=function(t){var r;return r=new e.Location(t.getAttribute("href")),this.locationIsVisitable(r)?r:void 0},r.prototype.getActionForLink=function(t){var e;return null!=(e=t.getAttribute("data-turbolinks-action"))?e:"advance"},r.prototype.nodeIsVisitable=function(t){var r;return(r=e.closest(t,"[data-turbolinks]"))?"false"!==r.getAttribute("data-turbolinks"):!0},r.prototype.locationIsVisitable=function(t){return t.isPrefixedBy(this.view.getRootLocation())&&t.isHTML()},r.prototype.getCurrentRestorationData=function(){return this.getRestorationDataForIdentifier(this.restorationIdentifier)},r.prototype.getRestorationDataForIdentifier=function(t){var e;return null!=(e=this.restorationData)[t]?e[t]:e[t]={}},r}()}.call(this),function(){!function(){var t,e;if((t=e=document.currentScript)&&!e.hasAttribute("data-turbolinks-suppress-warning"))for(;t=t.parentNode;)if(t===document.body)return console.warn("You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\n\nLoad your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\nFor more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements\n\n\u2014\u2014\nSuppress this warning by adding a `data-turbolinks-suppress-warning` attribute to: %s",e.outerHTML)}()}.call(this),function(){var t,r,n;e.start=function(){return r()?(null==e.controller&&(e.controller=t()),e.controller.start()):void 0},r=function(){return null==window.Turbolinks&&(window.Turbolinks=e),n()},t=function(){var t;return t=new e.Controller,t.adapter=new e.BrowserAdapter(t),t},n=function(){return window.Turbolinks===e},n()&&e.start()}.call(this)}).call(this),"object"==typeof module&&module.exports?module.exports=e:"function"==typeof define&&define.amd&&define(e)}).call(this); +window.TinyMCERails = { + configuration: { + default: {} + }, + + initialize: function(config, options) { + if (typeof tinyMCE != 'undefined') { + // Merge the custom options with the given configuration + var configuration = TinyMCERails.configuration[config || 'default']; + configuration = TinyMCERails._merge(configuration, options); + + tinyMCE.init(configuration); + } else { + // Wait until TinyMCE is loaded + setTimeout(function() { + TinyMCERails.initialize(config, options); + }, 50); + } + }, + + setupTurbolinks: function() { + // Remove all TinyMCE instances before rendering + document.addEventListener('turbolinks:before-render', function() { + tinymce.remove(); + }); + }, + + _merge: function() { + var result = {}; + + for (var i = 0; i < arguments.length; ++i) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + if (Object.prototype.toString.call(source[key]) === '[object Object]') { + result[key] = TinyMCERails._merge(result[key], source[key]); + } else { + result[key] = source[key]; + } + } + } + } + + return result; + } +}; + +if (typeof Turbolinks != 'undefined' && Turbolinks.supported) { + TinyMCERails.setupTurbolinks(); +} +; +window.tinymce = window.tinymce || { + base: '/assets/tinymce', + suffix: '' +}; +/** + * 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/ + * + * Version: 5.0.5 (2019-05-09) + */ + +(function () { +(function (domGlobals) { + 'use strict'; + + var noop = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + }; + var noarg = function (f) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return f(); + }; + }; + var compose = function (fa, fb) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return fa(fb.apply(null, args)); + }; + }; + var constant = function (value) { + return function () { + return value; + }; + }; + var identity = function (x) { + return x; + }; + var tripleEquals = function (a, b) { + return a === b; + }; + function curry(fn) { + var initialArgs = []; + for (var _i = 1; _i < arguments.length; _i++) { + initialArgs[_i - 1] = arguments[_i]; + } + return function () { + var restArgs = []; + for (var _i = 0; _i < arguments.length; _i++) { + restArgs[_i] = arguments[_i]; + } + var all = initialArgs.concat(restArgs); + return fn.apply(null, all); + }; + } + var not = function (f) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return !f.apply(null, args); + }; + }; + var die = function (msg) { + return function () { + throw new Error(msg); + }; + }; + var apply = function (f) { + return f(); + }; + var call = function (f) { + f(); + }; + var never = constant(false); + var always = constant(true); + + var Fun = /*#__PURE__*/Object.freeze({ + noop: noop, + noarg: noarg, + compose: compose, + constant: constant, + identity: identity, + tripleEquals: tripleEquals, + curry: curry, + not: not, + die: die, + apply: apply, + call: call, + never: never, + always: always + }); + + var never$1 = never; + var always$1 = always; + var none = function () { + return NONE; + }; + var NONE = function () { + var eq = function (o) { + return o.isNone(); + }; + var call = function (thunk) { + return thunk(); + }; + var id = function (n) { + return n; + }; + var noop = function () { + }; + var nul = function () { + return null; + }; + var undef = function () { + return undefined; + }; + var me = { + fold: function (n, s) { + return n(); + }, + is: never$1, + isSome: never$1, + isNone: always$1, + getOr: id, + getOrThunk: call, + getOrDie: function (msg) { + throw new Error(msg || 'error: getOrDie called on none.'); + }, + getOrNull: nul, + getOrUndefined: undef, + or: id, + orThunk: call, + map: none, + ap: none, + each: noop, + bind: none, + flatten: none, + exists: never$1, + forall: always$1, + filter: none, + equals: eq, + equals_: eq, + toArray: function () { + return []; + }, + toString: constant('none()') + }; + if (Object.freeze) + Object.freeze(me); + return me; + }(); + var some = function (a) { + var constant_a = function () { + return a; + }; + var self = function () { + return me; + }; + var map = function (f) { + return some(f(a)); + }; + var bind = function (f) { + return f(a); + }; + var me = { + fold: function (n, s) { + return s(a); + }, + is: function (v) { + return a === v; + }, + isSome: always$1, + isNone: never$1, + getOr: constant_a, + getOrThunk: constant_a, + getOrDie: constant_a, + getOrNull: constant_a, + getOrUndefined: constant_a, + or: self, + orThunk: self, + map: map, + ap: function (optfab) { + return optfab.fold(none, function (fab) { + return some(fab(a)); + }); + }, + each: function (f) { + f(a); + }, + bind: bind, + flatten: constant_a, + exists: bind, + forall: bind, + filter: function (f) { + return f(a) ? me : NONE; + }, + equals: function (o) { + return o.is(a); + }, + equals_: function (o, elementEq) { + return o.fold(never$1, function (b) { + return elementEq(a, b); + }); + }, + toArray: function () { + return [a]; + }, + toString: function () { + return 'some(' + a + ')'; + } + }; + return me; + }; + var from = function (value) { + return value === null || value === undefined ? NONE : some(value); + }; + var Option = { + some: some, + none: none, + from: from + }; + + var typeOf = function (x) { + if (x === null) + return 'null'; + var t = typeof x; + if (t === 'object' && Array.prototype.isPrototypeOf(x)) + return 'array'; + if (t === 'object' && String.prototype.isPrototypeOf(x)) + return 'string'; + return t; + }; + var isType = function (type) { + return function (value) { + return typeOf(value) === type; + }; + }; + var isString = isType('string'); + var isObject = isType('object'); + var isArray = isType('array'); + var isNull = isType('null'); + var isBoolean = isType('boolean'); + var isFunction = isType('function'); + var isNumber = isType('number'); + + var rawIndexOf = function () { + var pIndexOf = Array.prototype.indexOf; + var fastIndex = function (xs, x) { + return pIndexOf.call(xs, x); + }; + var slowIndex = function (xs, x) { + return slowIndexOf(xs, x); + }; + return pIndexOf === undefined ? slowIndex : fastIndex; + }(); + var indexOf = function (xs, x) { + var r = rawIndexOf(xs, x); + return r === -1 ? Option.none() : Option.some(r); + }; + var contains = function (xs, x) { + return rawIndexOf(xs, x) > -1; + }; + var exists = function (xs, pred) { + return findIndex(xs, pred).isSome(); + }; + var range = function (num, f) { + var r = []; + for (var i = 0; i < num; i++) { + r.push(f(i)); + } + return r; + }; + var chunk = function (array, size) { + var r = []; + for (var i = 0; i < array.length; i += size) { + var s = array.slice(i, i + size); + r.push(s); + } + return r; + }; + var map = function (xs, f) { + var len = xs.length; + var r = new Array(len); + for (var i = 0; i < len; i++) { + var x = xs[i]; + r[i] = f(x, i, xs); + } + return r; + }; + var each = function (xs, f) { + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + f(x, i, xs); + } + }; + var eachr = function (xs, f) { + for (var i = xs.length - 1; i >= 0; i--) { + var x = xs[i]; + f(x, i, xs); + } + }; + var partition = function (xs, pred) { + var pass = []; + var fail = []; + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + var arr = pred(x, i, xs) ? pass : fail; + arr.push(x); + } + return { + pass: pass, + fail: fail + }; + }; + var filter = function (xs, pred) { + var r = []; + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + if (pred(x, i, xs)) { + r.push(x); + } + } + return r; + }; + var groupBy = function (xs, f) { + if (xs.length === 0) { + return []; + } else { + var wasType = f(xs[0]); + var r = []; + var group = []; + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + var type = f(x); + if (type !== wasType) { + r.push(group); + group = []; + } + wasType = type; + group.push(x); + } + if (group.length !== 0) { + r.push(group); + } + return r; + } + }; + var foldr = function (xs, f, acc) { + eachr(xs, function (x) { + acc = f(acc, x); + }); + return acc; + }; + var foldl = function (xs, f, acc) { + each(xs, function (x) { + acc = f(acc, x); + }); + return acc; + }; + var find = function (xs, pred) { + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + if (pred(x, i, xs)) { + return Option.some(x); + } + } + return Option.none(); + }; + var findIndex = function (xs, pred) { + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + if (pred(x, i, xs)) { + return Option.some(i); + } + } + return Option.none(); + }; + var slowIndexOf = function (xs, x) { + for (var i = 0, len = xs.length; i < len; ++i) { + if (xs[i] === x) { + return i; + } + } + return -1; + }; + var push = Array.prototype.push; + var flatten = function (xs) { + var r = []; + for (var i = 0, len = xs.length; i < len; ++i) { + if (!Array.prototype.isPrototypeOf(xs[i])) + throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); + push.apply(r, xs[i]); + } + return r; + }; + var bind = function (xs, f) { + var output = map(xs, f); + return flatten(output); + }; + var forall = function (xs, pred) { + for (var i = 0, len = xs.length; i < len; ++i) { + var x = xs[i]; + if (pred(x, i, xs) !== true) { + return false; + } + } + return true; + }; + var equal = function (a1, a2) { + return a1.length === a2.length && forall(a1, function (x, i) { + return x === a2[i]; + }); + }; + var slice = Array.prototype.slice; + var reverse = function (xs) { + var r = slice.call(xs, 0); + r.reverse(); + return r; + }; + var difference = function (a1, a2) { + return filter(a1, function (x) { + return !contains(a2, x); + }); + }; + var mapToObject = function (xs, f) { + var r = {}; + for (var i = 0, len = xs.length; i < len; i++) { + var x = xs[i]; + r[String(x)] = f(x, i); + } + return r; + }; + var pure = function (x) { + return [x]; + }; + var sort = function (xs, comparator) { + var copy = slice.call(xs, 0); + copy.sort(comparator); + return copy; + }; + var head = function (xs) { + return xs.length === 0 ? Option.none() : Option.some(xs[0]); + }; + var last = function (xs) { + return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]); + }; + var from$1 = isFunction(Array.from) ? Array.from : function (x) { + return slice.call(x); + }; + + var Arr = /*#__PURE__*/Object.freeze({ + indexOf: indexOf, + contains: contains, + exists: exists, + range: range, + chunk: chunk, + map: map, + each: each, + eachr: eachr, + partition: partition, + filter: filter, + groupBy: groupBy, + foldr: foldr, + foldl: foldl, + find: find, + findIndex: findIndex, + flatten: flatten, + bind: bind, + forall: forall, + equal: equal, + reverse: reverse, + difference: difference, + mapToObject: mapToObject, + pure: pure, + sort: sort, + head: head, + last: last, + from: from$1 + }); + + var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')(); + + var path = function (parts, scope) { + var o = scope !== undefined && scope !== null ? scope : Global; + for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) + o = o[parts[i]]; + return o; + }; + var resolve = function (p, scope) { + var parts = p.split('.'); + return path(parts, scope); + }; + + var unsafe = function (name, scope) { + return resolve(name, scope); + }; + var getOrDie = function (name, scope) { + var actual = unsafe(name, scope); + if (actual === undefined || actual === null) + throw name + ' not available on this browser'; + return actual; + }; + var Global$1 = { getOrDie: getOrDie }; + + var url = function () { + return Global$1.getOrDie('URL'); + }; + var createObjectURL = function (blob) { + return url().createObjectURL(blob); + }; + var revokeObjectURL = function (u) { + url().revokeObjectURL(u); + }; + var URL = { + createObjectURL: createObjectURL, + revokeObjectURL: revokeObjectURL + }; + + var nav = domGlobals.navigator, userAgent = nav.userAgent; + var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet, windowsPhone; + var matchMediaQuery = function (query) { + return 'matchMedia' in domGlobals.window ? domGlobals.matchMedia(query).matches : false; + }; + opera = false; + android = /Android/.test(userAgent); + webkit = /WebKit/.test(userAgent); + ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName); + ie = ie && /MSIE (\w+)\./.exec(userAgent)[1]; + ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false; + ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false; + ie = ie || ie11 || ie12; + gecko = !webkit && !ie11 && /Gecko/.test(userAgent); + mac = userAgent.indexOf('Mac') !== -1; + iDevice = /(iPad|iPhone)/.test(userAgent); + fileApi = 'FormData' in domGlobals.window && 'FileReader' in domGlobals.window && 'URL' in domGlobals.window && !!URL.createObjectURL; + phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice); + tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice); + windowsPhone = userAgent.indexOf('Windows Phone') !== -1; + if (ie12) { + webkit = false; + } + var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\/(\d*)/)[1], 10) >= 534; + var Env = { + opera: opera, + webkit: webkit, + ie: ie, + gecko: gecko, + mac: mac, + iOS: iDevice, + android: android, + contentEditable: contentEditable, + transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', + caretAfter: ie !== 8, + range: domGlobals.window.getSelection && 'Range' in domGlobals.window, + documentMode: ie && !ie12 ? domGlobals.document.documentMode || 7 : 10, + fileApi: fileApi, + ceFalse: ie === false || ie > 8, + cacheSuffix: null, + container: null, + overrideViewPort: null, + experimentalShadowDom: false, + canHaveCSP: ie === false || ie > 11, + desktop: !phone && !tablet, + windowsPhone: windowsPhone + }; + + var promise = function () { + function bind(fn, thisArg) { + return function () { + fn.apply(thisArg, arguments); + }; + } + var isArray = Array.isArray || function (value) { + return Object.prototype.toString.call(value) === '[object Array]'; + }; + var Promise = function (fn) { + if (typeof this !== 'object') { + throw new TypeError('Promises must be constructed via new'); + } + if (typeof fn !== 'function') { + throw new TypeError('not a function'); + } + this._state = null; + this._value = null; + this._deferreds = []; + doResolve(fn, bind(resolve, this), bind(reject, this)); + }; + var asap = Promise.immediateFn || typeof domGlobals.setImmediate === 'function' && domGlobals.setImmediate || function (fn) { + domGlobals.setTimeout(fn, 1); + }; + function handle(deferred) { + var me = this; + if (this._state === null) { + this._deferreds.push(deferred); + return; + } + asap(function () { + var cb = me._state ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + (me._state ? deferred.resolve : deferred.reject)(me._value); + return; + } + var ret; + try { + ret = cb(me._value); + } catch (e) { + deferred.reject(e); + return; + } + deferred.resolve(ret); + }); + } + function resolve(newValue) { + try { + if (newValue === this) { + throw new TypeError('A promise cannot be resolved with itself.'); + } + if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) { + var then = newValue.then; + if (typeof then === 'function') { + doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this)); + return; + } + } + this._state = true; + this._value = newValue; + finale.call(this); + } catch (e) { + reject.call(this, e); + } + } + function reject(newValue) { + this._state = false; + this._value = newValue; + finale.call(this); + } + function finale() { + for (var i = 0, len = this._deferreds.length; i < len; i++) { + handle.call(this, this._deferreds[i]); + } + this._deferreds = null; + } + function Handler(onFulfilled, onRejected, resolve, reject) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + } + function doResolve(fn, onFulfilled, onRejected) { + var done = false; + try { + fn(function (value) { + if (done) { + return; + } + done = true; + onFulfilled(value); + }, function (reason) { + if (done) { + return; + } + done = true; + onRejected(reason); + }); + } catch (ex) { + if (done) { + return; + } + done = true; + onRejected(ex); + } + } + Promise.prototype.catch = function (onRejected) { + return this.then(null, onRejected); + }; + Promise.prototype.then = function (onFulfilled, onRejected) { + var me = this; + return new Promise(function (resolve, reject) { + handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject)); + }); + }; + Promise.all = function () { + var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments); + return new Promise(function (resolve, reject) { + if (args.length === 0) { + return resolve([]); + } + var remaining = args.length; + function res(i, val) { + try { + if (val && (typeof val === 'object' || typeof val === 'function')) { + var then = val.then; + if (typeof then === 'function') { + then.call(val, function (val) { + res(i, val); + }, reject); + return; + } + } + args[i] = val; + if (--remaining === 0) { + resolve(args); + } + } catch (ex) { + reject(ex); + } + } + for (var i = 0; i < args.length; i++) { + res(i, args[i]); + } + }); + }; + Promise.resolve = function (value) { + if (value && typeof value === 'object' && value.constructor === Promise) { + return value; + } + return new Promise(function (resolve) { + resolve(value); + }); + }; + Promise.reject = function (value) { + return new Promise(function (resolve, reject) { + reject(value); + }); + }; + Promise.race = function (values) { + return new Promise(function (resolve, reject) { + for (var i = 0, len = values.length; i < len; i++) { + values[i].then(resolve, reject); + } + }); + }; + return Promise; + }; + var promiseObj = window.Promise ? window.Promise : promise(); + + var requestAnimationFramePromise; + var requestAnimationFrame = function (callback, element) { + var i, requestAnimationFrameFunc = domGlobals.window.requestAnimationFrame; + var vendors = [ + 'ms', + 'moz', + 'webkit' + ]; + var featurefill = function (callback) { + domGlobals.window.setTimeout(callback, 0); + }; + for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) { + requestAnimationFrameFunc = domGlobals.window[vendors[i] + 'RequestAnimationFrame']; + } + if (!requestAnimationFrameFunc) { + requestAnimationFrameFunc = featurefill; + } + requestAnimationFrameFunc(callback, element); + }; + var wrappedSetTimeout = function (callback, time) { + if (typeof time !== 'number') { + time = 0; + } + return domGlobals.setTimeout(callback, time); + }; + var wrappedSetInterval = function (callback, time) { + if (typeof time !== 'number') { + time = 1; + } + return domGlobals.setInterval(callback, time); + }; + var wrappedClearTimeout = function (id) { + return domGlobals.clearTimeout(id); + }; + var wrappedClearInterval = function (id) { + return domGlobals.clearInterval(id); + }; + var debounce = function (callback, time) { + var timer, func; + func = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + domGlobals.clearTimeout(timer); + timer = wrappedSetTimeout(function () { + callback.apply(this, args); + }, time); + }; + func.stop = function () { + domGlobals.clearTimeout(timer); + }; + return func; + }; + var Delay = { + requestAnimationFrame: function (callback, element) { + if (requestAnimationFramePromise) { + requestAnimationFramePromise.then(callback); + return; + } + requestAnimationFramePromise = new promiseObj(function (resolve) { + if (!element) { + element = domGlobals.document.body; + } + requestAnimationFrame(resolve, element); + }).then(callback); + }, + setTimeout: wrappedSetTimeout, + setInterval: wrappedSetInterval, + setEditorTimeout: function (editor, callback, time) { + return wrappedSetTimeout(function () { + if (!editor.removed) { + callback(); + } + }, time); + }, + setEditorInterval: function (editor, callback, time) { + var timer; + timer = wrappedSetInterval(function () { + if (!editor.removed) { + callback(); + } else { + domGlobals.clearInterval(timer); + } + }, time); + return timer; + }, + debounce: debounce, + throttle: debounce, + clearInterval: wrappedClearInterval, + clearTimeout: wrappedClearTimeout + }; + + var eventExpandoPrefix = 'mce-data-'; + var mouseEventRe = /^(?:mouse|contextmenu)|click/; + var deprecated = { + keyLocation: 1, + layerX: 1, + layerY: 1, + returnValue: 1, + webkitMovementX: 1, + webkitMovementY: 1, + keyIdentifier: 1 + }; + var hasIsDefaultPrevented = function (event) { + return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse; + }; + var returnFalse = function () { + return false; + }; + var returnTrue = function () { + return true; + }; + var addEvent = function (target, name, callback, capture) { + if (target.addEventListener) { + target.addEventListener(name, callback, capture || false); + } else if (target.attachEvent) { + target.attachEvent('on' + name, callback); + } + }; + var removeEvent = function (target, name, callback, capture) { + if (target.removeEventListener) { + target.removeEventListener(name, callback, capture || false); + } else if (target.detachEvent) { + target.detachEvent('on' + name, callback); + } + }; + var getTargetFromShadowDom = function (event, defaultTarget) { + if (event.composedPath) { + var composedPath = event.composedPath(); + if (composedPath && composedPath.length > 0) { + return composedPath[0]; + } + } + return defaultTarget; + }; + var fix = function (originalEvent, data) { + var name; + var event = data || {}; + for (name in originalEvent) { + if (!deprecated[name]) { + event[name] = originalEvent[name]; + } + } + if (!event.target) { + event.target = event.srcElement || domGlobals.document; + } + if (Env.experimentalShadowDom) { + event.target = getTargetFromShadowDom(originalEvent, event.target); + } + if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) { + var eventDoc = event.target.ownerDocument || domGlobals.document; + var doc = eventDoc.documentElement; + var body = eventDoc.body; + event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + event.preventDefault = function () { + event.isDefaultPrevented = returnTrue; + if (originalEvent) { + if (originalEvent.preventDefault) { + originalEvent.preventDefault(); + } else { + originalEvent.returnValue = false; + } + } + }; + event.stopPropagation = function () { + event.isPropagationStopped = returnTrue; + if (originalEvent) { + if (originalEvent.stopPropagation) { + originalEvent.stopPropagation(); + } else { + originalEvent.cancelBubble = true; + } + } + }; + event.stopImmediatePropagation = function () { + event.isImmediatePropagationStopped = returnTrue; + event.stopPropagation(); + }; + if (hasIsDefaultPrevented(event) === false) { + event.isDefaultPrevented = returnFalse; + event.isPropagationStopped = returnFalse; + event.isImmediatePropagationStopped = returnFalse; + } + if (typeof event.metaKey === 'undefined') { + event.metaKey = false; + } + return event; + }; + var bindOnReady = function (win, callback, eventUtils) { + var doc = win.document, event = { type: 'ready' }; + if (eventUtils.domLoaded) { + callback(event); + return; + } + var isDocReady = function () { + return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body; + }; + var readyHandler = function () { + removeEvent(win, 'DOMContentLoaded', readyHandler); + removeEvent(win, 'load', readyHandler); + if (!eventUtils.domLoaded) { + eventUtils.domLoaded = true; + callback(event); + } + }; + var waitForDomLoaded = function () { + if (isDocReady()) { + removeEvent(doc, 'readystatechange', waitForDomLoaded); + readyHandler(); + } + }; + var tryScroll = function () { + try { + doc.documentElement.doScroll('left'); + } catch (ex) { + Delay.setTimeout(tryScroll); + return; + } + readyHandler(); + }; + if (doc.addEventListener && !(Env.ie && Env.ie < 11)) { + if (isDocReady()) { + readyHandler(); + } else { + addEvent(win, 'DOMContentLoaded', readyHandler); + } + } else { + addEvent(doc, 'readystatechange', waitForDomLoaded); + if (doc.documentElement.doScroll && win.self === win.top) { + tryScroll(); + } + } + addEvent(win, 'load', readyHandler); + }; + var EventUtils = function () { + function EventUtils() { + this.domLoaded = false; + this.events = {}; + this.count = 1; + this.expando = eventExpandoPrefix + (+new Date()).toString(32); + this.hasMouseEnterLeave = 'onmouseenter' in domGlobals.document.documentElement; + this.hasFocusIn = 'onfocusin' in domGlobals.document.documentElement; + this.count = 1; + } + EventUtils.prototype.bind = function (target, names, callback, scope) { + var self = this; + var id, callbackList, i, name, fakeName, nativeHandler, capture; + var win = domGlobals.window; + var defaultNativeHandler = function (evt) { + self.executeHandlers(fix(evt || win.event), id); + }; + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return; + } + if (!target[self.expando]) { + id = self.count++; + target[self.expando] = id; + self.events[id] = {}; + } else { + id = target[self.expando]; + } + scope = scope || target; + var namesList = names.split(' '); + i = namesList.length; + while (i--) { + name = namesList[i]; + nativeHandler = defaultNativeHandler; + fakeName = capture = false; + if (name === 'DOMContentLoaded') { + name = 'ready'; + } + if (self.domLoaded && name === 'ready' && target.readyState === 'complete') { + callback.call(scope, fix({ type: name })); + continue; + } + if (!self.hasMouseEnterLeave) { + fakeName = self.mouseEnterLeave[name]; + if (fakeName) { + nativeHandler = function (evt) { + var current, related; + current = evt.currentTarget; + related = evt.relatedTarget; + if (related && current.contains) { + related = current.contains(related); + } else { + while (related && related !== current) { + related = related.parentNode; + } + } + if (!related) { + evt = fix(evt || win.event); + evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter'; + evt.target = current; + self.executeHandlers(evt, id); + } + }; + } + } + if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) { + capture = true; + fakeName = name === 'focusin' ? 'focus' : 'blur'; + nativeHandler = function (evt) { + evt = fix(evt || win.event); + evt.type = evt.type === 'focus' ? 'focusin' : 'focusout'; + self.executeHandlers(evt, id); + }; + } + callbackList = self.events[id][name]; + if (!callbackList) { + self.events[id][name] = callbackList = [{ + func: callback, + scope: scope + }]; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + callbackList.nativeHandler = nativeHandler; + if (name === 'ready') { + bindOnReady(target, nativeHandler, self); + } else { + addEvent(target, fakeName || name, nativeHandler, capture); + } + } else { + if (name === 'ready' && self.domLoaded) { + callback(fix({ type: name })); + } else { + callbackList.push({ + func: callback, + scope: scope + }); + } + } + } + target = callbackList = 0; + return callback; + }; + EventUtils.prototype.unbind = function (target, names, callback) { + var id, callbackList, i, ci, name, eventMap; + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return this; + } + id = target[this.expando]; + if (id) { + eventMap = this.events[id]; + if (names) { + var namesList = names.split(' '); + i = namesList.length; + while (i--) { + name = namesList[i]; + callbackList = eventMap[name]; + if (callbackList) { + if (callback) { + ci = callbackList.length; + while (ci--) { + if (callbackList[ci].func === callback) { + var nativeHandler = callbackList.nativeHandler; + var fakeName = callbackList.fakeName, capture = callbackList.capture; + callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1)); + callbackList.nativeHandler = nativeHandler; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + eventMap[name] = callbackList; + } + } + } + if (!callback || callbackList.length === 0) { + delete eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + } + } + } else { + for (name in eventMap) { + callbackList = eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + eventMap = {}; + } + for (name in eventMap) { + return this; + } + delete this.events[id]; + try { + delete target[this.expando]; + } catch (ex) { + target[this.expando] = null; + } + } + return this; + }; + EventUtils.prototype.fire = function (target, name, args) { + var id; + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return this; + } + var event = fix(null, args); + event.type = name; + event.target = target; + do { + id = target[this.expando]; + if (id) { + this.executeHandlers(event, id); + } + target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow; + } while (target && !event.isPropagationStopped()); + return this; + }; + EventUtils.prototype.clean = function (target) { + var i, children; + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return this; + } + if (target[this.expando]) { + this.unbind(target); + } + if (!target.getElementsByTagName) { + target = target.document; + } + if (target && target.getElementsByTagName) { + this.unbind(target); + children = target.getElementsByTagName('*'); + i = children.length; + while (i--) { + target = children[i]; + if (target[this.expando]) { + this.unbind(target); + } + } + } + return this; + }; + EventUtils.prototype.destroy = function () { + this.events = {}; + }; + EventUtils.prototype.cancel = function (e) { + if (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + return false; + }; + EventUtils.prototype.executeHandlers = function (evt, id) { + var callbackList, i, l, callback; + var container = this.events[id]; + callbackList = container && container[evt.type]; + if (callbackList) { + for (i = 0, l = callbackList.length; i < l; i++) { + callback = callbackList[i]; + if (callback && callback.func.call(callback.scope, evt) === false) { + evt.preventDefault(); + } + if (evt.isImmediatePropagationStopped()) { + return; + } + } + } + }; + EventUtils.Event = new EventUtils(); + return EventUtils; + }(); + + var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$1, expando = 'sizzle' + -new Date(), preferredDoc = domGlobals.window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) { + if (a === b) { + hasDuplicate = true; + } + return 0; + }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push$1 = arr.push, slice$1 = arr.slice, indexOf$1 = arr.indexOf || function (elem) { + var i = 0, len = this.length; + for (; i < len; i++) { + if (this[i] === elem) { + return i; + } + } + return -1; + }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\x20\\t\\r\\n\\f]', identifier = '(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+', attributes = '\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)"|(' + identifier + '))|)' + whitespace + '*\\]', pseudos = ':(' + identifier + ')(?:\\((' + '(\'((?:\\\\.|[^\\\\\'])*)\'|"((?:\\\\.|[^\\\\"])*)")|' + '((?:\\\\.|[^\\\\()[\\]]|' + attributes + ')*)|' + '.*' + ')\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\])(?:\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\]\'"]*?)' + whitespace + '*\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = { + ID: new RegExp('^#(' + identifier + ')'), + CLASS: new RegExp('^\\.(' + identifier + ')'), + TAG: new RegExp('^(' + identifier + '|[*])'), + ATTR: new RegExp('^' + attributes), + PSEUDO: new RegExp('^' + pseudos), + CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(' + whitespace + '*(even|odd|(([+-]|)(\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\d+)|))' + whitespace + '*\\)|)', 'i'), + bool: new RegExp('^(?:' + booleans + ')$', 'i'), + needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(' + whitespace + '*((?:-\\d)?\\d*)' + whitespace + '*\\)|)(?=[^-]|$)', 'i') + }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, runescape = new RegExp('\\\\([\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) { + var high = '0x' + escaped - 65536; + return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320); + }; + try { + push$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes); + arr[preferredDoc.childNodes.length].nodeType; + } catch (e) { + push$1 = { + apply: arr.length ? function (target, els) { + push_native.apply(target, slice$1.call(els)); + } : function (target, els) { + var j = target.length, i = 0; + while (target[j++] = els[i++]) { + } + target.length = j - 1; + } + }; + } + var Sizzle = function (selector, context, results, seed) { + var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector; + if ((context ? context.ownerDocument || context : preferredDoc) !== document) { + setDocument(context); + } + context = context || document; + results = results || []; + if (!selector || typeof selector !== 'string') { + return results; + } + if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) { + return []; + } + if (documentIsHTML && !seed) { + if (match = rquickExpr.exec(selector)) { + if (m = match[1]) { + if (nodeType === 9) { + elem = context.getElementById(m); + if (elem && elem.parentNode) { + if (elem.id === m) { + results.push(elem); + return results; + } + } else { + return results; + } + } else { + if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$1(context, elem) && elem.id === m) { + results.push(elem); + return results; + } + } + } else if (match[2]) { + push$1.apply(results, context.getElementsByTagName(selector)); + return results; + } else if ((m = match[3]) && support.getElementsByClassName) { + push$1.apply(results, context.getElementsByClassName(m)); + return results; + } + } + if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') { + groups = tokenize(selector); + if (old = context.getAttribute('id')) { + nid = old.replace(rescape, '\\$&'); + } else { + context.setAttribute('id', nid); + } + nid = '[id=\'' + nid + '\'] '; + i = groups.length; + while (i--) { + groups[i] = nid + toSelector(groups[i]); + } + newContext = rsibling.test(selector) && testContext(context.parentNode) || context; + newSelector = groups.join(','); + } + if (newSelector) { + try { + push$1.apply(results, newContext.querySelectorAll(newSelector)); + return results; + } catch (qsaError) { + } finally { + if (!old) { + context.removeAttribute('id'); + } + } + } + } + } + return select(selector.replace(rtrim, '$1'), context, results, seed); + }; + function createCache() { + var keys = []; + function cache(key, value) { + if (keys.push(key + ' ') > Expr.cacheLength) { + delete cache[keys.shift()]; + } + return cache[key + ' '] = value; + } + return cache; + } + function markFunction(fn) { + fn[expando] = true; + return fn; + } + function siblingCheck(a, b) { + var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE); + if (diff) { + return diff; + } + if (cur) { + while (cur = cur.nextSibling) { + if (cur === b) { + return -1; + } + } + } + return a ? 1 : -1; + } + function createInputPseudo(type) { + return function (elem) { + var name = elem.nodeName.toLowerCase(); + return name === 'input' && elem.type === type; + }; + } + function createButtonPseudo(type) { + return function (elem) { + var name = elem.nodeName.toLowerCase(); + return (name === 'input' || name === 'button') && elem.type === type; + }; + } + function createPositionalPseudo(fn) { + return markFunction(function (argument) { + argument = +argument; + return markFunction(function (seed, matches) { + var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length; + while (i--) { + if (seed[j = matchIndexes[i]]) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + function testContext(context) { + return context && typeof context.getElementsByTagName !== strundefined && context; + } + support = Sizzle.support = {}; + isXML = Sizzle.isXML = function (elem) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== 'HTML' : false; + }; + setDocument = Sizzle.setDocument = function (node) { + var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView; + function getTop(win) { + try { + return win.top; + } catch (ex) { + } + return null; + } + if (doc === document || doc.nodeType !== 9 || !doc.documentElement) { + return document; + } + document = doc; + docElem = doc.documentElement; + documentIsHTML = !isXML(doc); + if (parent && parent !== getTop(parent)) { + if (parent.addEventListener) { + parent.addEventListener('unload', function () { + setDocument(); + }, false); + } else if (parent.attachEvent) { + parent.attachEvent('onunload', function () { + setDocument(); + }); + } + } + support.attributes = true; + support.getElementsByTagName = true; + support.getElementsByClassName = rnative.test(doc.getElementsByClassName); + support.getById = true; + Expr.find.ID = function (id, context) { + if (typeof context.getElementById !== strundefined && documentIsHTML) { + var m = context.getElementById(id); + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter.ID = function (id) { + var attrId = id.replace(runescape, funescape); + return function (elem) { + return elem.getAttribute('id') === attrId; + }; + }; + Expr.find.TAG = support.getElementsByTagName ? function (tag, context) { + if (typeof context.getElementsByTagName !== strundefined) { + return context.getElementsByTagName(tag); + } + } : function (tag, context) { + var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag); + if (tag === '*') { + while (elem = results[i++]) { + if (elem.nodeType === 1) { + tmp.push(elem); + } + } + return tmp; + } + return results; + }; + Expr.find.CLASS = support.getElementsByClassName && function (className, context) { + if (documentIsHTML) { + return context.getElementsByClassName(className); + } + }; + rbuggyMatches = []; + rbuggyQSA = []; + support.disconnectedMatch = true; + rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|')); + rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|')); + hasCompare = rnative.test(docElem.compareDocumentPosition); + contains$1 = hasCompare || rnative.test(docElem.contains) ? function (a, b) { + var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; + return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16)); + } : function (a, b) { + if (b) { + while (b = b.parentNode) { + if (b === a) { + return true; + } + } + } + return false; + }; + sortOrder = hasCompare ? function (a, b) { + if (a === b) { + hasDuplicate = true; + return 0; + } + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if (compare) { + return compare; + } + compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1; + if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) { + if (a === doc || a.ownerDocument === preferredDoc && contains$1(preferredDoc, a)) { + return -1; + } + if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) { + return 1; + } + return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0; + } + return compare & 4 ? -1 : 1; + } : function (a, b) { + if (a === b) { + hasDuplicate = true; + return 0; + } + var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b]; + if (!aup || !bup) { + return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0; + } else if (aup === bup) { + return siblingCheck(a, b); + } + cur = a; + while (cur = cur.parentNode) { + ap.unshift(cur); + } + cur = b; + while (cur = cur.parentNode) { + bp.unshift(cur); + } + while (ap[i] === bp[i]) { + i++; + } + return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; + }; + return doc; + }; + Sizzle.matches = function (expr, elements) { + return Sizzle(expr, null, null, elements); + }; + Sizzle.matchesSelector = function (elem, expr) { + if ((elem.ownerDocument || elem) !== document) { + setDocument(elem); + } + expr = expr.replace(rattributeQuotes, '=\'$1\']'); + if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) { + try { + var ret = matches.call(elem, expr); + if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) { + return ret; + } + } catch (e) { + } + } + return Sizzle(expr, document, null, [elem]).length > 0; + }; + Sizzle.contains = function (context, elem) { + if ((context.ownerDocument || context) !== document) { + setDocument(context); + } + return contains$1(context, elem); + }; + Sizzle.attr = function (elem, name) { + if ((elem.ownerDocument || elem) !== document) { + setDocument(elem); + } + var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined; + return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; + }; + Sizzle.error = function (msg) { + throw new Error('Syntax error, unrecognized expression: ' + msg); + }; + Sizzle.uniqueSort = function (results) { + var elem, duplicates = [], j = 0, i = 0; + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice(0); + results.sort(sortOrder); + if (hasDuplicate) { + while (elem = results[i++]) { + if (elem === results[i]) { + j = duplicates.push(i); + } + } + while (j--) { + results.splice(duplicates[j], 1); + } + } + sortInput = null; + return results; + }; + getText = Sizzle.getText = function (elem) { + var node, ret = '', i = 0, nodeType = elem.nodeType; + if (!nodeType) { + while (node = elem[i++]) { + ret += getText(node); + } + } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) { + if (typeof elem.textContent === 'string') { + return elem.textContent; + } else { + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText(elem); + } + } + } else if (nodeType === 3 || nodeType === 4) { + return elem.nodeValue; + } + return ret; + }; + Expr = Sizzle.selectors = { + cacheLength: 50, + createPseudo: markFunction, + match: matchExpr, + attrHandle: {}, + find: {}, + relative: { + '>': { + dir: 'parentNode', + first: true + }, + ' ': { dir: 'parentNode' }, + '+': { + dir: 'previousSibling', + first: true + }, + '~': { dir: 'previousSibling' } + }, + preFilter: { + ATTR: function (match) { + match[1] = match[1].replace(runescape, funescape); + match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape); + if (match[2] === '~=') { + match[3] = ' ' + match[3] + ' '; + } + return match.slice(0, 4); + }, + CHILD: function (match) { + match[1] = match[1].toLowerCase(); + if (match[1].slice(0, 3) === 'nth') { + if (!match[3]) { + Sizzle.error(match[0]); + } + match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd')); + match[5] = +(match[7] + match[8] || match[3] === 'odd'); + } else if (match[3]) { + Sizzle.error(match[0]); + } + return match; + }, + PSEUDO: function (match) { + var excess, unquoted = !match[6] && match[2]; + if (matchExpr.CHILD.test(match[0])) { + return null; + } + if (match[3]) { + match[2] = match[4] || match[5] || ''; + } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) { + match[0] = match[0].slice(0, excess); + match[2] = unquoted.slice(0, excess); + } + return match.slice(0, 3); + } + }, + filter: { + TAG: function (nodeNameSelector) { + var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase(); + return nodeNameSelector === '*' ? function () { + return true; + } : function (elem) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + CLASS: function (className) { + var pattern = classCache[className + ' ']; + return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) { + return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || ''); + }); + }, + ATTR: function (name, operator, check) { + return function (elem) { + var result = Sizzle.attr(elem, name); + if (result == null) { + return operator === '!='; + } + if (!operator) { + return true; + } + result += ''; + return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false; + }; + }, + CHILD: function (type, what, argument, first, last) { + var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type'; + return first === 1 && last === 0 ? function (elem) { + return !!elem.parentNode; + } : function (elem, context, xml) { + var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType; + if (parent) { + if (simple) { + while (dir) { + node = elem; + while (node = node[dir]) { + if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) { + return false; + } + } + start = dir = type === 'only' && !start && 'nextSibling'; + } + return true; + } + start = [forward ? parent.firstChild : parent.lastChild]; + if (forward && useCache) { + outerCache = parent[expando] || (parent[expando] = {}); + cache = outerCache[type] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[nodeIndex]; + while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) { + if (node.nodeType === 1 && ++diff && node === elem) { + outerCache[type] = [ + dirruns, + nodeIndex, + diff + ]; + break; + } + } + } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) { + diff = cache[1]; + } else { + while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) { + if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) { + if (useCache) { + (node[expando] || (node[expando] = {}))[type] = [ + dirruns, + diff + ]; + } + if (node === elem) { + break; + } + } + } + } + diff -= last; + return diff === first || diff % first === 0 && diff / first >= 0; + } + }; + }, + PSEUDO: function (pseudo, argument) { + var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo); + if (fn[expando]) { + return fn(argument); + } + if (fn.length > 1) { + args = [ + pseudo, + pseudo, + '', + argument + ]; + return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) { + var idx, matched = fn(seed, argument), i = matched.length; + while (i--) { + idx = indexOf$1.call(seed, matched[i]); + seed[idx] = !(matches[idx] = matched[i]); + } + }) : function (elem) { + return fn(elem, 0, args); + }; + } + return fn; + } + }, + pseudos: { + not: markFunction(function (selector) { + var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1')); + return matcher[expando] ? markFunction(function (seed, matches, context, xml) { + var elem, unmatched = matcher(seed, null, xml, []), i = seed.length; + while (i--) { + if (elem = unmatched[i]) { + seed[i] = !(matches[i] = elem); + } + } + }) : function (elem, context, xml) { + input[0] = elem; + matcher(input, null, xml, results); + return !results.pop(); + }; + }), + has: markFunction(function (selector) { + return function (elem) { + return Sizzle(selector, elem).length > 0; + }; + }), + contains: markFunction(function (text) { + text = text.replace(runescape, funescape); + return function (elem) { + return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1; + }; + }), + lang: markFunction(function (lang) { + if (!ridentifier.test(lang || '')) { + Sizzle.error('unsupported lang: ' + lang); + } + lang = lang.replace(runescape, funescape).toLowerCase(); + return function (elem) { + var elemLang; + do { + if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) { + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf(lang + '-') === 0; + } + } while ((elem = elem.parentNode) && elem.nodeType === 1); + return false; + }; + }), + target: function (elem) { + var hash = domGlobals.window.location && domGlobals.window.location.hash; + return hash && hash.slice(1) === elem.id; + }, + root: function (elem) { + return elem === docElem; + }, + focus: function (elem) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + enabled: function (elem) { + return elem.disabled === false; + }, + disabled: function (elem) { + return elem.disabled === true; + }, + checked: function (elem) { + var nodeName = elem.nodeName.toLowerCase(); + return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected; + }, + selected: function (elem) { + if (elem.parentNode) { + elem.parentNode.selectedIndex; + } + return elem.selected === true; + }, + empty: function (elem) { + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + if (elem.nodeType < 6) { + return false; + } + } + return true; + }, + parent: function (elem) { + return !Expr.pseudos.empty(elem); + }, + header: function (elem) { + return rheader.test(elem.nodeName); + }, + input: function (elem) { + return rinputs.test(elem.nodeName); + }, + button: function (elem) { + var name = elem.nodeName.toLowerCase(); + return name === 'input' && elem.type === 'button' || name === 'button'; + }, + text: function (elem) { + var attr; + return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text'); + }, + first: createPositionalPseudo(function () { + return [0]; + }), + last: createPositionalPseudo(function (matchIndexes, length) { + return [length - 1]; + }), + eq: createPositionalPseudo(function (matchIndexes, length, argument) { + return [argument < 0 ? argument + length : argument]; + }), + even: createPositionalPseudo(function (matchIndexes, length) { + var i = 0; + for (; i < length; i += 2) { + matchIndexes.push(i); + } + return matchIndexes; + }), + odd: createPositionalPseudo(function (matchIndexes, length) { + var i = 1; + for (; i < length; i += 2) { + matchIndexes.push(i); + } + return matchIndexes; + }), + lt: createPositionalPseudo(function (matchIndexes, length, argument) { + var i = argument < 0 ? argument + length : argument; + for (; --i >= 0;) { + matchIndexes.push(i); + } + return matchIndexes; + }), + gt: createPositionalPseudo(function (matchIndexes, length, argument) { + var i = argument < 0 ? argument + length : argument; + for (; ++i < length;) { + matchIndexes.push(i); + } + return matchIndexes; + }) + } + }; + Expr.pseudos.nth = Expr.pseudos.eq; + for (i in { + radio: true, + checkbox: true, + file: true, + password: true, + image: true + }) { + Expr.pseudos[i] = createInputPseudo(i); + } + for (i in { + submit: true, + reset: true + }) { + Expr.pseudos[i] = createButtonPseudo(i); + } + function setFilters() { + } + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + tokenize = Sizzle.tokenize = function (selector, parseOnly) { + var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' ']; + if (cached) { + return parseOnly ? 0 : cached.slice(0); + } + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + while (soFar) { + if (!matched || (match = rcomma.exec(soFar))) { + if (match) { + soFar = soFar.slice(match[0].length) || soFar; + } + groups.push(tokens = []); + } + matched = false; + if (match = rcombinators.exec(soFar)) { + matched = match.shift(); + tokens.push({ + value: matched, + type: match[0].replace(rtrim, ' ') + }); + soFar = soFar.slice(matched.length); + } + for (type in Expr.filter) { + if (!Expr.filter.hasOwnProperty(type)) + continue; + if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice(matched.length); + } + } + if (!matched) { + break; + } + } + return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0); + }; + function toSelector(tokens) { + var i = 0, len = tokens.length, selector = ''; + for (; i < len; i++) { + selector += tokens[i].value; + } + return selector; + } + function addCombinator(matcher, combinator, base) { + var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++; + return combinator.first ? function (elem, context, xml) { + while (elem = elem[dir]) { + if (elem.nodeType === 1 || checkNonElements) { + return matcher(elem, context, xml); + } + } + } : function (elem, context, xml) { + var oldCache, outerCache, newCache = [ + dirruns, + doneName + ]; + if (xml) { + while (elem = elem[dir]) { + if (elem.nodeType === 1 || checkNonElements) { + if (matcher(elem, context, xml)) { + return true; + } + } + } + } else { + while (elem = elem[dir]) { + if (elem.nodeType === 1 || checkNonElements) { + outerCache = elem[expando] || (elem[expando] = {}); + if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) { + return newCache[2] = oldCache[2]; + } else { + outerCache[dir] = newCache; + if (newCache[2] = matcher(elem, context, xml)) { + return true; + } + } + } + } + } + }; + } + function elementMatcher(matchers) { + return matchers.length > 1 ? function (elem, context, xml) { + var i = matchers.length; + while (i--) { + if (!matchers[i](elem, context, xml)) { + return false; + } + } + return true; + } : matchers[0]; + } + function multipleContexts(selector, contexts, results) { + var i = 0, len = contexts.length; + for (; i < len; i++) { + Sizzle(selector, contexts[i], results); + } + return results; + } + function condense(unmatched, map, filter, context, xml) { + var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; + for (; i < len; i++) { + if (elem = unmatched[i]) { + if (!filter || filter(elem, context, xml)) { + newUnmatched.push(elem); + if (mapped) { + map.push(i); + } + } + } + } + return newUnmatched; + } + function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) { + if (postFilter && !postFilter[expando]) { + postFilter = setMatcher(postFilter); + } + if (postFinder && !postFinder[expando]) { + postFinder = setMatcher(postFinder, postSelector); + } + return markFunction(function (seed, results, context, xml) { + var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn; + if (matcher) { + matcher(matcherIn, matcherOut, context, xml); + } + if (postFilter) { + temp = condense(matcherOut, postMap); + postFilter(temp, [], context, xml); + i = temp.length; + while (i--) { + if (elem = temp[i]) { + matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem); + } + } + } + if (seed) { + if (postFinder || preFilter) { + if (postFinder) { + temp = []; + i = matcherOut.length; + while (i--) { + if (elem = matcherOut[i]) { + temp.push(matcherIn[i] = elem); + } + } + postFinder(null, matcherOut = [], temp, xml); + } + i = matcherOut.length; + while (i--) { + if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$1.call(seed, elem) : preMap[i]) > -1) { + seed[temp] = !(results[temp] = elem); + } + } + } + } else { + matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut); + if (postFinder) { + postFinder(null, results, matcherOut, xml); + } else { + push$1.apply(results, matcherOut); + } + } + }); + } + function matcherFromTokens(tokens) { + var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) { + return elem === checkContext; + }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) { + return indexOf$1.call(checkContext, elem) > -1; + }, implicitRelative, true), matchers = [function (elem, context, xml) { + return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); + }]; + for (; i < len; i++) { + if (matcher = Expr.relative[tokens[i].type]) { + matchers = [addCombinator(elementMatcher(matchers), matcher)]; + } else { + matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); + if (matcher[expando]) { + j = ++i; + for (; j < len; j++) { + if (Expr.relative[tokens[j].type]) { + break; + } + } + return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens)); + } + matchers.push(matcher); + } + } + return elementMatcher(matchers); + } + function matcherFromGroupMatchers(elementMatchers, setMatchers) { + var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) { + var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length; + if (outermost) { + outermostContext = context !== document && context; + } + for (; i !== len && (elem = elems[i]) != null; i++) { + if (byElement && elem) { + j = 0; + while (matcher = elementMatchers[j++]) { + if (matcher(elem, context, xml)) { + results.push(elem); + break; + } + } + if (outermost) { + dirruns = dirrunsUnique; + } + } + if (bySet) { + if (elem = !matcher && elem) { + matchedCount--; + } + if (seed) { + unmatched.push(elem); + } + } + } + matchedCount += i; + if (bySet && i !== matchedCount) { + j = 0; + while (matcher = setMatchers[j++]) { + matcher(unmatched, setMatched, context, xml); + } + if (seed) { + if (matchedCount > 0) { + while (i--) { + if (!(unmatched[i] || setMatched[i])) { + setMatched[i] = pop.call(results); + } + } + } + setMatched = condense(setMatched); + } + push$1.apply(results, setMatched); + if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) { + Sizzle.uniqueSort(results); + } + } + if (outermost) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + return unmatched; + }; + return bySet ? markFunction(superMatcher) : superMatcher; + } + compile = Sizzle.compile = function (selector, match) { + var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' ']; + if (!cached) { + if (!match) { + match = tokenize(selector); + } + i = match.length; + while (i--) { + cached = matcherFromTokens(match[i]); + if (cached[expando]) { + setMatchers.push(cached); + } else { + elementMatchers.push(cached); + } + } + cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); + cached.selector = selector; + } + return cached; + }; + select = Sizzle.select = function (selector, context, results, seed) { + var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector); + results = results || []; + if (match.length === 1) { + tokens = match[0] = match[0].slice(0); + if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) { + context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0]; + if (!context) { + return results; + } else if (compiled) { + context = context.parentNode; + } + selector = selector.slice(tokens.shift().value.length); + } + i = matchExpr.needsContext.test(selector) ? 0 : tokens.length; + while (i--) { + token = tokens[i]; + if (Expr.relative[type = token.type]) { + break; + } + if (find = Expr.find[type]) { + if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) { + tokens.splice(i, 1); + selector = seed.length && toSelector(tokens); + if (!selector) { + push$1.apply(results, seed); + return results; + } + break; + } + } + } + } + (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context); + return results; + }; + support.sortStable = expando.split('').sort(sortOrder).join('') === expando; + support.detectDuplicates = !!hasDuplicate; + setDocument(); + support.sortDetached = true; + + var isArray$1 = Array.isArray; + var toArray = function (obj) { + var array = obj, i, l; + if (!isArray$1(obj)) { + array = []; + for (i = 0, l = obj.length; i < l; i++) { + array[i] = obj[i]; + } + } + return array; + }; + var each$1 = function (o, cb, s) { + var n, l; + if (!o) { + return 0; + } + s = s || o; + if (o.length !== undefined) { + for (n = 0, l = o.length; n < l; n++) { + if (cb.call(s, o[n], n, o) === false) { + return 0; + } + } + } else { + for (n in o) { + if (o.hasOwnProperty(n)) { + if (cb.call(s, o[n], n, o) === false) { + return 0; + } + } + } + } + return 1; + }; + var map$1 = function (array, callback) { + var out = []; + each$1(array, function (item, index) { + out.push(callback(item, index, array)); + }); + return out; + }; + var filter$1 = function (a, f) { + var o = []; + each$1(a, function (v, index) { + if (!f || f(v, index, a)) { + o.push(v); + } + }); + return o; + }; + var indexOf$2 = function (a, v) { + var i, l; + if (a) { + for (i = 0, l = a.length; i < l; i++) { + if (a[i] === v) { + return i; + } + } + } + return -1; + }; + var reduce = function (collection, iteratee, accumulator, thisArg) { + var i = 0; + if (arguments.length < 3) { + accumulator = collection[0]; + } + for (; i < collection.length; i++) { + accumulator = iteratee.call(thisArg, accumulator, collection[i], i); + } + return accumulator; + }; + var findIndex$1 = function (array, predicate, thisArg) { + var i, l; + for (i = 0, l = array.length; i < l; i++) { + if (predicate.call(thisArg, array[i], i, array)) { + return i; + } + } + return -1; + }; + var find$1 = function (array, predicate, thisArg) { + var idx = findIndex$1(array, predicate, thisArg); + if (idx !== -1) { + return array[idx]; + } + return undefined; + }; + var last$1 = function (collection) { + return collection[collection.length - 1]; + }; + var ArrUtils = { + isArray: isArray$1, + toArray: toArray, + each: each$1, + map: map$1, + filter: filter$1, + indexOf: indexOf$2, + reduce: reduce, + findIndex: findIndex$1, + find: find$1, + last: last$1 + }; + + var whiteSpaceRegExp = /^\s*|\s*$/g; + var trim = function (str) { + return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, ''); + }; + var is = function (obj, type) { + if (!type) { + return obj !== undefined; + } + if (type === 'array' && ArrUtils.isArray(obj)) { + return true; + } + return typeof obj === type; + }; + var makeMap = function (items, delim, map) { + var i; + items = items || []; + delim = delim || ','; + if (typeof items === 'string') { + items = items.split(delim); + } + map = map || {}; + i = items.length; + while (i--) { + map[items[i]] = {}; + } + return map; + }; + var hasOwnProperty = function (obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + }; + var create = function (s, p, root) { + var self = this; + var sp, ns, cn, scn, c, de = 0; + s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s); + cn = s[3].match(/(^|\.)(\w+)$/i)[2]; + ns = self.createNS(s[3].replace(/\.\w+$/, ''), root); + if (ns[cn]) { + return; + } + if (s[2] === 'static') { + ns[cn] = p; + if (this.onCreate) { + this.onCreate(s[2], s[3], ns[cn]); + } + return; + } + if (!p[cn]) { + p[cn] = function () { + }; + de = 1; + } + ns[cn] = p[cn]; + self.extend(ns[cn].prototype, p); + if (s[5]) { + sp = self.resolve(s[5]).prototype; + scn = s[5].match(/\.(\w+)$/i)[1]; + c = ns[cn]; + if (de) { + ns[cn] = function () { + return sp[scn].apply(this, arguments); + }; + } else { + ns[cn] = function () { + this.parent = sp[scn]; + return c.apply(this, arguments); + }; + } + ns[cn].prototype[cn] = ns[cn]; + self.each(sp, function (f, n) { + ns[cn].prototype[n] = sp[n]; + }); + self.each(p, function (f, n) { + if (sp[n]) { + ns[cn].prototype[n] = function () { + this.parent = sp[n]; + return f.apply(this, arguments); + }; + } else { + if (n !== cn) { + ns[cn].prototype[n] = f; + } + } + }); + } + self.each(p.static, function (f, n) { + ns[cn][n] = f; + }); + }; + var extend = function (obj, ext) { + var x = []; + for (var _i = 2; _i < arguments.length; _i++) { + x[_i - 2] = arguments[_i]; + } + var i, l, name; + var args = arguments; + var value; + for (i = 1, l = args.length; i < l; i++) { + ext = args[i]; + for (name in ext) { + if (ext.hasOwnProperty(name)) { + value = ext[name]; + if (value !== undefined) { + obj[name] = value; + } + } + } + } + return obj; + }; + var walk = function (o, f, n, s) { + s = s || this; + if (o) { + if (n) { + o = o[n]; + } + ArrUtils.each(o, function (o, i) { + if (f.call(s, o, i, n) === false) { + return false; + } + walk(o, f, n, s); + }); + } + }; + var createNS = function (n, o) { + var i, v; + o = o || domGlobals.window; + n = n.split('.'); + for (i = 0; i < n.length; i++) { + v = n[i]; + if (!o[v]) { + o[v] = {}; + } + o = o[v]; + } + return o; + }; + var resolve$1 = function (n, o) { + var i, l; + o = o || domGlobals.window; + n = n.split('.'); + for (i = 0, l = n.length; i < l; i++) { + o = o[n[i]]; + if (!o) { + break; + } + } + return o; + }; + var explode = function (s, d) { + if (!s || is(s, 'array')) { + return s; + } + return ArrUtils.map(s.split(d || ','), trim); + }; + var _addCacheSuffix = function (url) { + var cacheSuffix = Env.cacheSuffix; + if (cacheSuffix) { + url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix; + } + return url; + }; + var Tools = { + trim: trim, + isArray: ArrUtils.isArray, + is: is, + toArray: ArrUtils.toArray, + makeMap: makeMap, + each: ArrUtils.each, + map: ArrUtils.map, + grep: ArrUtils.filter, + inArray: ArrUtils.indexOf, + hasOwn: hasOwnProperty, + extend: extend, + create: create, + walk: walk, + createNS: createNS, + resolve: resolve$1, + explode: explode, + _addCacheSuffix: _addCacheSuffix + }; + + var doc = domGlobals.document, push$2 = Array.prototype.push, slice$2 = Array.prototype.slice; + var rquickExpr$1 = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/; + var Event = EventUtils.Event; + var skipUniques = Tools.makeMap('children,contents,next,prev'); + var isDefined = function (obj) { + return typeof obj !== 'undefined'; + }; + var isString$1 = function (obj) { + return typeof obj === 'string'; + }; + var isWindow = function (obj) { + return obj && obj === obj.window; + }; + var createFragment = function (html, fragDoc) { + var frag, node, container; + fragDoc = fragDoc || doc; + container = fragDoc.createElement('div'); + frag = fragDoc.createDocumentFragment(); + container.innerHTML = html; + while (node = container.firstChild) { + frag.appendChild(node); + } + return frag; + }; + var domManipulate = function (targetNodes, sourceItem, callback, reverse) { + var i; + if (isString$1(sourceItem)) { + sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0])); + } else if (sourceItem.length && !sourceItem.nodeType) { + sourceItem = DomQuery.makeArray(sourceItem); + if (reverse) { + for (i = sourceItem.length - 1; i >= 0; i--) { + domManipulate(targetNodes, sourceItem[i], callback, reverse); + } + } else { + for (i = 0; i < sourceItem.length; i++) { + domManipulate(targetNodes, sourceItem[i], callback, reverse); + } + } + return targetNodes; + } + if (sourceItem.nodeType) { + i = targetNodes.length; + while (i--) { + callback.call(targetNodes[i], sourceItem); + } + } + return targetNodes; + }; + var hasClass = function (node, className) { + return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1; + }; + var wrap = function (elements, wrapper, all) { + var lastParent, newWrapper; + wrapper = DomQuery(wrapper)[0]; + elements.each(function () { + var self = this; + if (!all || lastParent !== self.parentNode) { + lastParent = self.parentNode; + newWrapper = wrapper.cloneNode(false); + self.parentNode.insertBefore(newWrapper, self); + newWrapper.appendChild(self); + } else { + newWrapper.appendChild(self); + } + }); + return elements; + }; + var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' '); + var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' '); + var propFix = { + for: 'htmlFor', + class: 'className', + readonly: 'readOnly' + }; + var cssFix = { float: 'cssFloat' }; + var attrHooks = {}, cssHooks = {}; + var DomQueryConstructor = function (selector, context) { + return new DomQuery.fn.init(selector, context); + }; + var inArray = function (item, array) { + var i; + if (array.indexOf) { + return array.indexOf(item); + } + i = array.length; + while (i--) { + if (array[i] === item) { + return i; + } + } + return -1; + }; + var whiteSpaceRegExp$1 = /^\s*|\s*$/g; + var trim$1 = function (str) { + return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, ''); + }; + var each$2 = function (obj, callback) { + var length, key, i, value; + if (obj) { + length = obj.length; + if (length === undefined) { + for (key in obj) { + if (obj.hasOwnProperty(key)) { + value = obj[key]; + if (callback.call(value, key, value) === false) { + break; + } + } + } + } else { + for (i = 0; i < length; i++) { + value = obj[i]; + if (callback.call(value, i, value) === false) { + break; + } + } + } + } + return obj; + }; + var grep = function (array, callback) { + var out = []; + each$2(array, function (i, item) { + if (callback(item, i)) { + out.push(item); + } + }); + return out; + }; + var getElementDocument = function (element) { + if (!element) { + return doc; + } + if (element.nodeType === 9) { + return element; + } + return element.ownerDocument; + }; + DomQueryConstructor.fn = DomQueryConstructor.prototype = { + constructor: DomQueryConstructor, + selector: '', + context: null, + length: 0, + init: function (selector, context) { + var self = this; + var match, node; + if (!selector) { + return self; + } + if (selector.nodeType) { + self.context = self[0] = selector; + self.length = 1; + return self; + } + if (context && context.nodeType) { + self.context = context; + } else { + if (context) { + return DomQuery(selector).attr(context); + } + self.context = context = domGlobals.document; + } + if (isString$1(selector)) { + self.selector = selector; + if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) { + match = [ + null, + selector, + null + ]; + } else { + match = rquickExpr$1.exec(selector); + } + if (match) { + if (match[1]) { + node = createFragment(selector, getElementDocument(context)).firstChild; + while (node) { + push$2.call(self, node); + node = node.nextSibling; + } + } else { + node = getElementDocument(context).getElementById(match[2]); + if (!node) { + return self; + } + if (node.id !== match[2]) { + return self.find(selector); + } + self.length = 1; + self[0] = node; + } + } else { + return DomQuery(context).find(selector); + } + } else { + this.add(selector, false); + } + return self; + }, + toArray: function () { + return Tools.toArray(this); + }, + add: function (items, sort) { + var self = this; + var nodes, i; + if (isString$1(items)) { + return self.add(DomQuery(items)); + } + if (sort !== false) { + nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items))); + self.length = nodes.length; + for (i = 0; i < nodes.length; i++) { + self[i] = nodes[i]; + } + } else { + push$2.apply(self, DomQuery.makeArray(items)); + } + return self; + }, + attr: function (name, value) { + var self = this; + var hook; + if (typeof name === 'object') { + each$2(name, function (name, value) { + self.attr(name, value); + }); + } else if (isDefined(value)) { + this.each(function () { + var hook; + if (this.nodeType === 1) { + hook = attrHooks[name]; + if (hook && hook.set) { + hook.set(this, value); + return; + } + if (value === null) { + this.removeAttribute(name, 2); + } else { + this.setAttribute(name, value, 2); + } + } + }); + } else { + if (self[0] && self[0].nodeType === 1) { + hook = attrHooks[name]; + if (hook && hook.get) { + return hook.get(self[0], name); + } + if (booleanMap[name]) { + return self.prop(name) ? name : undefined; + } + value = self[0].getAttribute(name, 2); + if (value === null) { + value = undefined; + } + } + return value; + } + return self; + }, + removeAttr: function (name) { + return this.attr(name, null); + }, + prop: function (name, value) { + var self = this; + name = propFix[name] || name; + if (typeof name === 'object') { + each$2(name, function (name, value) { + self.prop(name, value); + }); + } else if (isDefined(value)) { + this.each(function () { + if (this.nodeType === 1) { + this[name] = value; + } + }); + } else { + if (self[0] && self[0].nodeType && name in self[0]) { + return self[0][name]; + } + return value; + } + return self; + }, + css: function (name, value) { + var self = this; + var elm, hook; + var camel = function (name) { + return name.replace(/-(\D)/g, function (a, b) { + return b.toUpperCase(); + }); + }; + var dashed = function (name) { + return name.replace(/[A-Z]/g, function (a) { + return '-' + a; + }); + }; + if (typeof name === 'object') { + each$2(name, function (name, value) { + self.css(name, value); + }); + } else { + if (isDefined(value)) { + name = camel(name); + if (typeof value === 'number' && !numericCssMap[name]) { + value = value.toString() + 'px'; + } + self.each(function () { + var style = this.style; + hook = cssHooks[name]; + if (hook && hook.set) { + hook.set(this, value); + return; + } + try { + this.style[cssFix[name] || name] = value; + } catch (ex) { + } + if (value === null || value === '') { + if (style.removeProperty) { + style.removeProperty(dashed(name)); + } else { + style.removeAttribute(name); + } + } + }); + } else { + elm = self[0]; + hook = cssHooks[name]; + if (hook && hook.get) { + return hook.get(elm); + } + if (elm.ownerDocument.defaultView) { + try { + return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name)); + } catch (ex) { + return undefined; + } + } else if (elm.currentStyle) { + return elm.currentStyle[camel(name)]; + } else { + return ''; + } + } + } + return self; + }, + remove: function () { + var self = this; + var node, i = this.length; + while (i--) { + node = self[i]; + Event.clean(node); + if (node.parentNode) { + node.parentNode.removeChild(node); + } + } + return this; + }, + empty: function () { + var self = this; + var node, i = this.length; + while (i--) { + node = self[i]; + while (node.firstChild) { + node.removeChild(node.firstChild); + } + } + return this; + }, + html: function (value) { + var self = this; + var i; + if (isDefined(value)) { + i = self.length; + try { + while (i--) { + self[i].innerHTML = value; + } + } catch (ex) { + DomQuery(self[i]).empty().append(value); + } + return self; + } + return self[0] ? self[0].innerHTML : ''; + }, + text: function (value) { + var self = this; + var i; + if (isDefined(value)) { + i = self.length; + while (i--) { + if ('innerText' in self[i]) { + self[i].innerText = value; + } else { + self[0].textContent = value; + } + } + return self; + } + return self[0] ? self[0].innerText || self[0].textContent : ''; + }, + append: function () { + return domManipulate(this, arguments, function (node) { + if (this.nodeType === 1 || this.host && this.host.nodeType === 1) { + this.appendChild(node); + } + }); + }, + prepend: function () { + return domManipulate(this, arguments, function (node) { + if (this.nodeType === 1 || this.host && this.host.nodeType === 1) { + this.insertBefore(node, this.firstChild); + } + }, true); + }, + before: function () { + var self = this; + if (self[0] && self[0].parentNode) { + return domManipulate(self, arguments, function (node) { + this.parentNode.insertBefore(node, this); + }); + } + return self; + }, + after: function () { + var self = this; + if (self[0] && self[0].parentNode) { + return domManipulate(self, arguments, function (node) { + this.parentNode.insertBefore(node, this.nextSibling); + }, true); + } + return self; + }, + appendTo: function (val) { + DomQuery(val).append(this); + return this; + }, + prependTo: function (val) { + DomQuery(val).prepend(this); + return this; + }, + replaceWith: function (content) { + return this.before(content).remove(); + }, + wrap: function (content) { + return wrap(this, content); + }, + wrapAll: function (content) { + return wrap(this, content, true); + }, + wrapInner: function (content) { + this.each(function () { + DomQuery(this).contents().wrapAll(content); + }); + return this; + }, + unwrap: function () { + return this.parent().each(function () { + DomQuery(this).replaceWith(this.childNodes); + }); + }, + clone: function () { + var result = []; + this.each(function () { + result.push(this.cloneNode(true)); + }); + return DomQuery(result); + }, + addClass: function (className) { + return this.toggleClass(className, true); + }, + removeClass: function (className) { + return this.toggleClass(className, false); + }, + toggleClass: function (className, state) { + var self = this; + if (typeof className !== 'string') { + return self; + } + if (className.indexOf(' ') !== -1) { + each$2(className.split(' '), function () { + self.toggleClass(this, state); + }); + } else { + self.each(function (index, node) { + var existingClassName, classState; + classState = hasClass(node, className); + if (classState !== state) { + existingClassName = node.className; + if (classState) { + node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' ')); + } else { + node.className += existingClassName ? ' ' + className : className; + } + } + }); + } + return self; + }, + hasClass: function (className) { + return hasClass(this[0], className); + }, + each: function (callback) { + return each$2(this, callback); + }, + on: function (name, callback) { + return this.each(function () { + Event.bind(this, name, callback); + }); + }, + off: function (name, callback) { + return this.each(function () { + Event.unbind(this, name, callback); + }); + }, + trigger: function (name) { + return this.each(function () { + if (typeof name === 'object') { + Event.fire(this, name.type, name); + } else { + Event.fire(this, name); + } + }); + }, + show: function () { + return this.css('display', ''); + }, + hide: function () { + return this.css('display', 'none'); + }, + slice: function () { + return new DomQuery(slice$2.apply(this, arguments)); + }, + eq: function (index) { + return index === -1 ? this.slice(index) : this.slice(index, +index + 1); + }, + first: function () { + return this.eq(0); + }, + last: function () { + return this.eq(-1); + }, + find: function (selector) { + var i, l; + var ret = []; + for (i = 0, l = this.length; i < l; i++) { + DomQuery.find(selector, this[i], ret); + } + return DomQuery(ret); + }, + filter: function (selector) { + if (typeof selector === 'function') { + return DomQuery(grep(this.toArray(), function (item, i) { + return selector(i, item); + })); + } + return DomQuery(DomQuery.filter(selector, this.toArray())); + }, + closest: function (selector) { + var result = []; + if (selector instanceof DomQuery) { + selector = selector[0]; + } + this.each(function (i, node) { + while (node) { + if (typeof selector === 'string' && DomQuery(node).is(selector)) { + result.push(node); + break; + } else if (node === selector) { + result.push(node); + break; + } + node = node.parentNode; + } + }); + return DomQuery(result); + }, + offset: function (offset) { + var elm, doc, docElm; + var x = 0, y = 0, pos; + if (!offset) { + elm = this[0]; + if (elm) { + doc = elm.ownerDocument; + docElm = doc.documentElement; + if (elm.getBoundingClientRect) { + pos = elm.getBoundingClientRect(); + x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft; + y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop; + } + } + return { + left: x, + top: y + }; + } + return this.css(offset); + }, + push: push$2, + sort: Array.prototype.sort, + splice: Array.prototype.splice + }; + Tools.extend(DomQueryConstructor, { + extend: Tools.extend, + makeArray: function (object) { + if (isWindow(object) || object.nodeType) { + return [object]; + } + return Tools.toArray(object); + }, + inArray: inArray, + isArray: Tools.isArray, + each: each$2, + trim: trim$1, + grep: grep, + find: Sizzle, + expr: Sizzle.selectors, + unique: Sizzle.uniqueSort, + text: Sizzle.getText, + contains: Sizzle.contains, + filter: function (expr, elems, not) { + var i = elems.length; + if (not) { + expr = ':not(' + expr + ')'; + } + while (i--) { + if (elems[i].nodeType !== 1) { + elems.splice(i, 1); + } + } + if (elems.length === 1) { + elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : []; + } else { + elems = DomQuery.find.matches(expr, elems); + } + return elems; + } + }); + var dir = function (el, prop, until) { + var matched = []; + var cur = el[prop]; + if (typeof until !== 'string' && until instanceof DomQuery) { + until = until[0]; + } + while (cur && cur.nodeType !== 9) { + if (until !== undefined) { + if (cur === until) { + break; + } + if (typeof until === 'string' && DomQuery(cur).is(until)) { + break; + } + } + if (cur.nodeType === 1) { + matched.push(cur); + } + cur = cur[prop]; + } + return matched; + }; + var sibling = function (node, siblingName, nodeType, until) { + var result = []; + if (until instanceof DomQuery) { + until = until[0]; + } + for (; node; node = node[siblingName]) { + if (nodeType && node.nodeType !== nodeType) { + continue; + } + if (until !== undefined) { + if (node === until) { + break; + } + if (typeof until === 'string' && DomQuery(node).is(until)) { + break; + } + } + result.push(node); + } + return result; + }; + var firstSibling = function (node, siblingName, nodeType) { + for (node = node[siblingName]; node; node = node[siblingName]) { + if (node.nodeType === nodeType) { + return node; + } + } + return null; + }; + each$2({ + parent: function (node) { + var parent = node.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function (node) { + return dir(node, 'parentNode'); + }, + next: function (node) { + return firstSibling(node, 'nextSibling', 1); + }, + prev: function (node) { + return firstSibling(node, 'previousSibling', 1); + }, + children: function (node) { + return sibling(node.firstChild, 'nextSibling', 1); + }, + contents: function (node) { + return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes); + } + }, function (name, fn) { + DomQueryConstructor.fn[name] = function (selector) { + var self = this; + var result = []; + self.each(function () { + var nodes = fn.call(result, this, selector, result); + if (nodes) { + if (DomQuery.isArray(nodes)) { + result.push.apply(result, nodes); + } else { + result.push(nodes); + } + } + }); + if (this.length > 1) { + if (!skipUniques[name]) { + result = DomQuery.unique(result); + } + if (name.indexOf('parents') === 0) { + result = result.reverse(); + } + } + var wrappedResult = DomQuery(result); + if (selector) { + return wrappedResult.filter(selector); + } + return wrappedResult; + }; + }); + each$2({ + parentsUntil: function (node, until) { + return dir(node, 'parentNode', until); + }, + nextUntil: function (node, until) { + return sibling(node, 'nextSibling', 1, until).slice(1); + }, + prevUntil: function (node, until) { + return sibling(node, 'previousSibling', 1, until).slice(1); + } + }, function (name, fn) { + DomQueryConstructor.fn[name] = function (selector, filter) { + var self = this; + var result = []; + self.each(function () { + var nodes = fn.call(result, this, selector, result); + if (nodes) { + if (DomQuery.isArray(nodes)) { + result.push.apply(result, nodes); + } else { + result.push(nodes); + } + } + }); + if (this.length > 1) { + result = DomQuery.unique(result); + if (name.indexOf('parents') === 0 || name === 'prevUntil') { + result = result.reverse(); + } + } + var wrappedResult = DomQuery(result); + if (filter) { + return wrappedResult.filter(filter); + } + return wrappedResult; + }; + }); + DomQueryConstructor.fn.is = function (selector) { + return !!selector && this.filter(selector).length > 0; + }; + DomQueryConstructor.fn.init.prototype = DomQueryConstructor.fn; + DomQueryConstructor.overrideDefaults = function (callback) { + var defaults; + var sub = function (selector, context) { + defaults = defaults || callback(); + if (arguments.length === 0) { + selector = defaults.element; + } + if (!context) { + context = defaults.context; + } + return new sub.fn.init(selector, context); + }; + DomQuery.extend(sub, this); + return sub; + }; + var appendHooks = function (targetHooks, prop, hooks) { + each$2(hooks, function (name, func) { + targetHooks[name] = targetHooks[name] || {}; + targetHooks[name][prop] = func; + }); + }; + if (Env.ie && Env.ie < 8) { + appendHooks(attrHooks, 'get', { + maxlength: function (elm) { + var value = elm.maxLength; + if (value === 2147483647) { + return undefined; + } + return value; + }, + size: function (elm) { + var value = elm.size; + if (value === 20) { + return undefined; + } + return value; + }, + class: function (elm) { + return elm.className; + }, + style: function (elm) { + var value = elm.style.cssText; + if (value.length === 0) { + return undefined; + } + return value; + } + }); + appendHooks(attrHooks, 'set', { + class: function (elm, value) { + elm.className = value; + }, + style: function (elm, value) { + elm.style.cssText = value; + } + }); + } + if (Env.ie && Env.ie < 9) { + cssFix.float = 'styleFloat'; + appendHooks(cssHooks, 'set', { + opacity: function (elm, value) { + var style = elm.style; + if (value === null || value === '') { + style.removeAttribute('filter'); + } else { + style.zoom = 1; + style.filter = 'alpha(opacity=' + value * 100 + ')'; + } + } + }); + } + DomQueryConstructor.attrHooks = attrHooks; + DomQueryConstructor.cssHooks = cssHooks; + var DomQuery = DomQueryConstructor; + + var cached = function (f) { + var called = false; + var r; + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (!called) { + called = true; + r = f.apply(null, args); + } + return r; + }; + }; + + var firstMatch = function (regexes, s) { + for (var i = 0; i < regexes.length; i++) { + var x = regexes[i]; + if (x.test(s)) + return x; + } + return undefined; + }; + var find$2 = function (regexes, agent) { + var r = firstMatch(regexes, agent); + if (!r) + return { + major: 0, + minor: 0 + }; + var group = function (i) { + return Number(agent.replace(r, '$' + i)); + }; + return nu(group(1), group(2)); + }; + var detect = function (versionRegexes, agent) { + var cleanedAgent = String(agent).toLowerCase(); + if (versionRegexes.length === 0) + return unknown(); + return find$2(versionRegexes, cleanedAgent); + }; + var unknown = function () { + return nu(0, 0); + }; + var nu = function (major, minor) { + return { + major: major, + minor: minor + }; + }; + var Version = { + nu: nu, + detect: detect, + unknown: unknown + }; + + var edge = 'Edge'; + var chrome = 'Chrome'; + var ie$1 = 'IE'; + var opera$1 = 'Opera'; + var firefox = 'Firefox'; + var safari = 'Safari'; + var isBrowser = function (name, current) { + return function () { + return current === name; + }; + }; + var unknown$1 = function () { + return nu$1({ + current: undefined, + version: Version.unknown() + }); + }; + var nu$1 = function (info) { + var current = info.current; + var version = info.version; + return { + current: current, + version: version, + isEdge: isBrowser(edge, current), + isChrome: isBrowser(chrome, current), + isIE: isBrowser(ie$1, current), + isOpera: isBrowser(opera$1, current), + isFirefox: isBrowser(firefox, current), + isSafari: isBrowser(safari, current) + }; + }; + var Browser = { + unknown: unknown$1, + nu: nu$1, + edge: constant(edge), + chrome: constant(chrome), + ie: constant(ie$1), + opera: constant(opera$1), + firefox: constant(firefox), + safari: constant(safari) + }; + + var windows = 'Windows'; + var ios = 'iOS'; + var android$1 = 'Android'; + var linux = 'Linux'; + var osx = 'OSX'; + var solaris = 'Solaris'; + var freebsd = 'FreeBSD'; + var isOS = function (name, current) { + return function () { + return current === name; + }; + }; + var unknown$2 = function () { + return nu$2({ + current: undefined, + version: Version.unknown() + }); + }; + var nu$2 = function (info) { + var current = info.current; + var version = info.version; + return { + current: current, + version: version, + isWindows: isOS(windows, current), + isiOS: isOS(ios, current), + isAndroid: isOS(android$1, current), + isOSX: isOS(osx, current), + isLinux: isOS(linux, current), + isSolaris: isOS(solaris, current), + isFreeBSD: isOS(freebsd, current) + }; + }; + var OperatingSystem = { + unknown: unknown$2, + nu: nu$2, + windows: constant(windows), + ios: constant(ios), + android: constant(android$1), + linux: constant(linux), + osx: constant(osx), + solaris: constant(solaris), + freebsd: constant(freebsd) + }; + + var DeviceType = function (os, browser, userAgent) { + var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; + var isiPhone = os.isiOS() && !isiPad; + var isAndroid3 = os.isAndroid() && os.version.major === 3; + var isAndroid4 = os.isAndroid() && os.version.major === 4; + var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true; + var isTouch = os.isiOS() || os.isAndroid(); + var isPhone = isTouch && !isTablet; + var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; + return { + isiPad: constant(isiPad), + isiPhone: constant(isiPhone), + isTablet: constant(isTablet), + isPhone: constant(isPhone), + isTouch: constant(isTouch), + isAndroid: os.isAndroid, + isiOS: os.isiOS, + isWebView: constant(iOSwebview) + }; + }; + + var detect$1 = function (candidates, userAgent) { + var agent = String(userAgent).toLowerCase(); + return find(candidates, function (candidate) { + return candidate.search(agent); + }); + }; + var detectBrowser = function (browsers, userAgent) { + return detect$1(browsers, userAgent).map(function (browser) { + var version = Version.detect(browser.versionRegexes, userAgent); + return { + current: browser.name, + version: version + }; + }); + }; + var detectOs = function (oses, userAgent) { + return detect$1(oses, userAgent).map(function (os) { + var version = Version.detect(os.versionRegexes, userAgent); + return { + current: os.name, + version: version + }; + }); + }; + var UaString = { + detectBrowser: detectBrowser, + detectOs: detectOs + }; + + var contains$2 = function (str, substr) { + return str.indexOf(substr) !== -1; + }; + var trim$2 = function (str) { + return str.replace(/^\s+|\s+$/g, ''); + }; + var lTrim = function (str) { + return str.replace(/^\s+/g, ''); + }; + var rTrim = function (str) { + return str.replace(/\s+$/g, ''); + }; + + var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; + var checkContains = function (target) { + return function (uastring) { + return contains$2(uastring, target); + }; + }; + var browsers = [ + { + name: 'Edge', + versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], + search: function (uastring) { + var monstrosity = contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit'); + return monstrosity; + } + }, + { + name: 'Chrome', + versionRegexes: [ + /.*?chrome\/([0-9]+)\.([0-9]+).*/, + normalVersionRegex + ], + search: function (uastring) { + return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe'); + } + }, + { + name: 'IE', + versionRegexes: [ + /.*?msie\ ?([0-9]+)\.([0-9]+).*/, + /.*?rv:([0-9]+)\.([0-9]+).*/ + ], + search: function (uastring) { + return contains$2(uastring, 'msie') || contains$2(uastring, 'trident'); + } + }, + { + name: 'Opera', + versionRegexes: [ + normalVersionRegex, + /.*?opera\/([0-9]+)\.([0-9]+).*/ + ], + search: checkContains('opera') + }, + { + name: 'Firefox', + versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], + search: checkContains('firefox') + }, + { + name: 'Safari', + versionRegexes: [ + normalVersionRegex, + /.*?cpu os ([0-9]+)_([0-9]+).*/ + ], + search: function (uastring) { + return (contains$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit'); + } + } + ]; + var oses = [ + { + name: 'Windows', + search: checkContains('win'), + versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] + }, + { + name: 'iOS', + search: function (uastring) { + return contains$2(uastring, 'iphone') || contains$2(uastring, 'ipad'); + }, + versionRegexes: [ + /.*?version\/\ ?([0-9]+)\.([0-9]+).*/, + /.*cpu os ([0-9]+)_([0-9]+).*/, + /.*cpu iphone os ([0-9]+)_([0-9]+).*/ + ] + }, + { + name: 'Android', + search: checkContains('android'), + versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] + }, + { + name: 'OSX', + search: checkContains('os x'), + versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/] + }, + { + name: 'Linux', + search: checkContains('linux'), + versionRegexes: [] + }, + { + name: 'Solaris', + search: checkContains('sunos'), + versionRegexes: [] + }, + { + name: 'FreeBSD', + search: checkContains('freebsd'), + versionRegexes: [] + } + ]; + var PlatformInfo = { + browsers: constant(browsers), + oses: constant(oses) + }; + + var detect$2 = function (userAgent) { + var browsers = PlatformInfo.browsers(); + var oses = PlatformInfo.oses(); + var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu); + var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu); + var deviceType = DeviceType(os, browser, userAgent); + return { + browser: browser, + os: os, + deviceType: deviceType + }; + }; + var PlatformDetection = { detect: detect$2 }; + + var detect$3 = cached(function () { + var userAgent = domGlobals.navigator.userAgent; + return PlatformDetection.detect(userAgent); + }); + var PlatformDetection$1 = { detect: detect$3 }; + + var fromHtml = function (html, scope) { + var doc = scope || domGlobals.document; + var div = doc.createElement('div'); + div.innerHTML = html; + if (!div.hasChildNodes() || div.childNodes.length > 1) { + domGlobals.console.error('HTML does not have a single root node', html); + throw new Error('HTML must have a single root node'); + } + return fromDom(div.childNodes[0]); + }; + var fromTag = function (tag, scope) { + var doc = scope || domGlobals.document; + var node = doc.createElement(tag); + return fromDom(node); + }; + var fromText = function (text, scope) { + var doc = scope || domGlobals.document; + var node = doc.createTextNode(text); + return fromDom(node); + }; + var fromDom = function (node) { + if (node === null || node === undefined) { + throw new Error('Node cannot be null or undefined'); + } + return { dom: constant(node) }; + }; + var fromPoint = function (docElm, x, y) { + var doc = docElm.dom(); + return Option.from(doc.elementFromPoint(x, y)).map(fromDom); + }; + var Element = { + fromHtml: fromHtml, + fromTag: fromTag, + fromText: fromText, + fromDom: fromDom, + fromPoint: fromPoint + }; + + var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE; + var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE; + var COMMENT = domGlobals.Node.COMMENT_NODE; + var DOCUMENT = domGlobals.Node.DOCUMENT_NODE; + var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE; + var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE; + var ELEMENT = domGlobals.Node.ELEMENT_NODE; + var TEXT = domGlobals.Node.TEXT_NODE; + var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE; + var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE; + var ENTITY = domGlobals.Node.ENTITY_NODE; + var NOTATION = domGlobals.Node.NOTATION_NODE; + + var name = function (element) { + var r = element.dom().nodeName; + return r.toLowerCase(); + }; + var type = function (element) { + return element.dom().nodeType; + }; + var isType$1 = function (t) { + return function (element) { + return type(element) === t; + }; + }; + var isElement = isType$1(ELEMENT); + var isText = isType$1(TEXT); + + var keys = Object.keys; + var hasOwnProperty$1 = Object.hasOwnProperty; + var each$3 = function (obj, f) { + var props = keys(obj); + for (var k = 0, len = props.length; k < len; k++) { + var i = props[k]; + var x = obj[i]; + f(x, i, obj); + } + }; + var map$2 = function (obj, f) { + return tupleMap(obj, function (x, i, obj) { + return { + k: i, + v: f(x, i, obj) + }; + }); + }; + var tupleMap = function (obj, f) { + var r = {}; + each$3(obj, function (x, i) { + var tuple = f(x, i, obj); + r[tuple.k] = tuple.v; + }); + return r; + }; + var bifilter = function (obj, pred) { + var t = {}; + var f = {}; + each$3(obj, function (x, i) { + var branch = pred(x, i) ? t : f; + branch[i] = x; + }); + return { + t: t, + f: f + }; + }; + var get = function (obj, key) { + return has(obj, key) ? Option.from(obj[key]) : Option.none(); + }; + var has = function (obj, key) { + return hasOwnProperty$1.call(obj, key); + }; + + var isSupported = function (dom) { + return dom.style !== undefined; + }; + + var inBody = function (element) { + var dom = isText(element) ? element.dom().parentNode : element.dom(); + return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom); + }; + + var rawSet = function (dom, key, value) { + if (isString(value) || isBoolean(value) || isNumber(value)) { + dom.setAttribute(key, value + ''); + } else { + domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom); + throw new Error('Attribute value was not simple'); + } + }; + var set = function (element, key, value) { + rawSet(element.dom(), key, value); + }; + var setAll = function (element, attrs) { + var dom = element.dom(); + each$3(attrs, function (v, k) { + rawSet(dom, k, v); + }); + }; + var get$1 = function (element, key) { + var v = element.dom().getAttribute(key); + return v === null ? undefined : v; + }; + var has$1 = function (element, key) { + var dom = element.dom(); + return dom && dom.hasAttribute ? dom.hasAttribute(key) : false; + }; + var remove = function (element, key) { + element.dom().removeAttribute(key); + }; + + var get$2 = function (element, property) { + var dom = element.dom(); + var styles = domGlobals.window.getComputedStyle(dom); + var r = styles.getPropertyValue(property); + var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r; + return v === null ? undefined : v; + }; + var getUnsafeProperty = function (dom, property) { + return isSupported(dom) ? dom.style.getPropertyValue(property) : ''; + }; + var getRaw = function (element, property) { + var dom = element.dom(); + var raw = getUnsafeProperty(dom, property); + return Option.from(raw).filter(function (r) { + return r.length > 0; + }); + }; + + var Immutable = function () { + var fields = []; + for (var _i = 0; _i < arguments.length; _i++) { + fields[_i] = arguments[_i]; + } + return function () { + var values = []; + for (var _i = 0; _i < arguments.length; _i++) { + values[_i] = arguments[_i]; + } + if (fields.length !== values.length) { + throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments'); + } + var struct = {}; + each(fields, function (name, i) { + struct[name] = constant(values[i]); + }); + return struct; + }; + }; + + var toArray$1 = function (target, f) { + var r = []; + var recurse = function (e) { + r.push(e); + return f(e); + }; + var cur = f(target); + do { + cur = cur.bind(recurse); + } while (cur.isSome()); + return r; + }; + var Recurse = { toArray: toArray$1 }; + + var node = function () { + var f = Global$1.getOrDie('Node'); + return f; + }; + var compareDocumentPosition = function (a, b, match) { + return (a.compareDocumentPosition(b) & match) !== 0; + }; + var documentPositionPreceding = function (a, b) { + return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING); + }; + var documentPositionContainedBy = function (a, b) { + return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY); + }; + var Node = { + documentPositionPreceding: documentPositionPreceding, + documentPositionContainedBy: documentPositionContainedBy + }; + + var ELEMENT$1 = ELEMENT; + var DOCUMENT$1 = DOCUMENT; + var is$1 = function (element, selector) { + var elem = element.dom(); + if (elem.nodeType !== ELEMENT$1) { + return false; + } else if (elem.matches !== undefined) { + return elem.matches(selector); + } else if (elem.msMatchesSelector !== undefined) { + return elem.msMatchesSelector(selector); + } else if (elem.webkitMatchesSelector !== undefined) { + return elem.webkitMatchesSelector(selector); + } else if (elem.mozMatchesSelector !== undefined) { + return elem.mozMatchesSelector(selector); + } else { + throw new Error('Browser lacks native selectors'); + } + }; + var bypassSelector = function (dom) { + return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0; + }; + var all = function (selector, scope) { + var base = scope === undefined ? domGlobals.document : scope.dom(); + return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom); + }; + var one = function (selector, scope) { + var base = scope === undefined ? domGlobals.document : scope.dom(); + return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom); + }; + + var eq = function (e1, e2) { + return e1.dom() === e2.dom(); + }; + var regularContains = function (e1, e2) { + var d1 = e1.dom(); + var d2 = e2.dom(); + return d1 === d2 ? false : d1.contains(d2); + }; + var ieContains = function (e1, e2) { + return Node.documentPositionContainedBy(e1.dom(), e2.dom()); + }; + var browser = PlatformDetection$1.detect().browser; + var contains$3 = browser.isIE() ? ieContains : regularContains; + + var owner = function (element) { + return Element.fromDom(element.dom().ownerDocument); + }; + var documentElement = function (element) { + return Element.fromDom(element.dom().ownerDocument.documentElement); + }; + var defaultView = function (element) { + var el = element.dom(); + var defView = el.ownerDocument.defaultView; + return Element.fromDom(defView); + }; + var parent = function (element) { + var dom = element.dom(); + return Option.from(dom.parentNode).map(Element.fromDom); + }; + var parents = function (element, isRoot) { + var stop = isFunction(isRoot) ? isRoot : constant(false); + var dom = element.dom(); + var ret = []; + while (dom.parentNode !== null && dom.parentNode !== undefined) { + var rawParent = dom.parentNode; + var p = Element.fromDom(rawParent); + ret.push(p); + if (stop(p) === true) { + break; + } else { + dom = rawParent; + } + } + return ret; + }; + var siblings = function (element) { + var filterSelf = function (elements) { + return filter(elements, function (x) { + return !eq(element, x); + }); + }; + return parent(element).map(children).map(filterSelf).getOr([]); + }; + var prevSibling = function (element) { + var dom = element.dom(); + return Option.from(dom.previousSibling).map(Element.fromDom); + }; + var nextSibling = function (element) { + var dom = element.dom(); + return Option.from(dom.nextSibling).map(Element.fromDom); + }; + var prevSiblings = function (element) { + return reverse(Recurse.toArray(element, prevSibling)); + }; + var nextSiblings = function (element) { + return Recurse.toArray(element, nextSibling); + }; + var children = function (element) { + var dom = element.dom(); + return map(dom.childNodes, Element.fromDom); + }; + var child = function (element, index) { + var cs = element.dom().childNodes; + return Option.from(cs[index]).map(Element.fromDom); + }; + var firstChild = function (element) { + return child(element, 0); + }; + var lastChild = function (element) { + return child(element, element.dom().childNodes.length - 1); + }; + var childNodesCount = function (element) { + return element.dom().childNodes.length; + }; + var spot = Immutable('element', 'offset'); + + var browser$1 = PlatformDetection$1.detect().browser; + var firstElement = function (nodes) { + return find(nodes, isElement); + }; + var getTableCaptionDeltaY = function (elm) { + if (browser$1.isFirefox() && name(elm) === 'table') { + return firstElement(children(elm)).filter(function (elm) { + return name(elm) === 'caption'; + }).bind(function (caption) { + return firstElement(nextSiblings(caption)).map(function (body) { + var bodyTop = body.dom().offsetTop; + var captionTop = caption.dom().offsetTop; + var captionHeight = caption.dom().offsetHeight; + return bodyTop <= captionTop ? -captionHeight : 0; + }); + }).getOr(0); + } else { + return 0; + } + }; + var getPos = function (body, elm, rootElm) { + var x = 0, y = 0, offsetParent; + var doc = body.ownerDocument; + var pos; + rootElm = rootElm ? rootElm : body; + if (elm) { + if (rootElm === body && elm.getBoundingClientRect && get$2(Element.fromDom(body), 'position') === 'static') { + pos = elm.getBoundingClientRect(); + x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft; + y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop; + return { + x: x, + y: y + }; + } + offsetParent = elm; + while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + offsetParent = elm.parentNode; + while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) { + x -= offsetParent.scrollLeft || 0; + y -= offsetParent.scrollTop || 0; + offsetParent = offsetParent.parentNode; + } + y += getTableCaptionDeltaY(Element.fromDom(elm)); + } + return { + x: x, + y: y + }; + }; + var Position = { getPos: getPos }; + + var nu$3 = function (baseFn) { + var data = Option.none(); + var callbacks = []; + var map = function (f) { + return nu$3(function (nCallback) { + get(function (data) { + nCallback(f(data)); + }); + }); + }; + var get = function (nCallback) { + if (isReady()) + call(nCallback); + else + callbacks.push(nCallback); + }; + var set = function (x) { + data = Option.some(x); + run(callbacks); + callbacks = []; + }; + var isReady = function () { + return data.isSome(); + }; + var run = function (cbs) { + each(cbs, call); + }; + var call = function (cb) { + data.each(function (x) { + domGlobals.setTimeout(function () { + cb(x); + }, 0); + }); + }; + baseFn(set); + return { + get: get, + map: map, + isReady: isReady + }; + }; + var pure$1 = function (a) { + return nu$3(function (callback) { + callback(a); + }); + }; + var LazyValue = { + nu: nu$3, + pure: pure$1 + }; + + var bounce = function (f) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var me = this; + domGlobals.setTimeout(function () { + f.apply(me, args); + }, 0); + }; + }; + + var nu$4 = function (baseFn) { + var get = function (callback) { + baseFn(bounce(callback)); + }; + var map = function (fab) { + return nu$4(function (callback) { + get(function (a) { + var value = fab(a); + callback(value); + }); + }); + }; + var bind = function (aFutureB) { + return nu$4(function (callback) { + get(function (a) { + aFutureB(a).get(callback); + }); + }); + }; + var anonBind = function (futureB) { + return nu$4(function (callback) { + get(function (a) { + futureB.get(callback); + }); + }); + }; + var toLazy = function () { + return LazyValue.nu(get); + }; + var toCached = function () { + var cache = null; + return nu$4(function (callback) { + if (cache === null) { + cache = toLazy(); + } + cache.get(callback); + }); + }; + return { + map: map, + bind: bind, + anonBind: anonBind, + toLazy: toLazy, + toCached: toCached, + get: get + }; + }; + var pure$2 = function (a) { + return nu$4(function (callback) { + callback(a); + }); + }; + var Future = { + nu: nu$4, + pure: pure$2 + }; + + var par = function (asyncValues, nu) { + return nu(function (callback) { + var r = []; + var count = 0; + var cb = function (i) { + return function (value) { + r[i] = value; + count++; + if (count >= asyncValues.length) { + callback(r); + } + }; + }; + if (asyncValues.length === 0) { + callback([]); + } else { + each(asyncValues, function (asyncValue, i) { + asyncValue.get(cb(i)); + }); + } + }); + }; + + var par$1 = function (futures) { + return par(futures, Future.nu); + }; + + var value = function (o) { + var is = function (v) { + return o === v; + }; + var or = function (opt) { + return value(o); + }; + var orThunk = function (f) { + return value(o); + }; + var map = function (f) { + return value(f(o)); + }; + var mapError = function (f) { + return value(o); + }; + var each = function (f) { + f(o); + }; + var bind = function (f) { + return f(o); + }; + var fold = function (_, onValue) { + return onValue(o); + }; + var exists = function (f) { + return f(o); + }; + var forall = function (f) { + return f(o); + }; + var toOption = function () { + return Option.some(o); + }; + return { + is: is, + isValue: always, + isError: never, + getOr: constant(o), + getOrThunk: constant(o), + getOrDie: constant(o), + or: or, + orThunk: orThunk, + fold: fold, + map: map, + mapError: mapError, + each: each, + bind: bind, + exists: exists, + forall: forall, + toOption: toOption + }; + }; + var error = function (message) { + var getOrThunk = function (f) { + return f(); + }; + var getOrDie = function () { + return die(String(message))(); + }; + var or = function (opt) { + return opt; + }; + var orThunk = function (f) { + return f(); + }; + var map = function (f) { + return error(message); + }; + var mapError = function (f) { + return error(f(message)); + }; + var bind = function (f) { + return error(message); + }; + var fold = function (onError, _) { + return onError(message); + }; + return { + is: never, + isValue: never, + isError: always, + getOr: identity, + getOrThunk: getOrThunk, + getOrDie: getOrDie, + or: or, + orThunk: orThunk, + fold: fold, + map: map, + mapError: mapError, + each: noop, + bind: bind, + exists: never, + forall: always, + toOption: Option.none + }; + }; + var fromOption = function (opt, err) { + return opt.fold(function () { + return error(err); + }, value); + }; + var Result = { + value: value, + error: error, + fromOption: fromOption + }; + + function StyleSheetLoader(document, settings) { + if (settings === void 0) { + settings = {}; + } + var idCount = 0; + var loadedStates = {}; + var maxLoadTime; + maxLoadTime = settings.maxLoadTime || 5000; + var appendToHead = function (node) { + document.getElementsByTagName('head')[0].appendChild(node); + }; + var load = function (url, loadedCallback, errorCallback) { + var link, style, startTime, state; + var resolve = function (status) { + state.status = status; + state.passed = []; + state.failed = []; + if (link) { + link.onload = null; + link.onerror = null; + link = null; + } + }; + var passed = function () { + var callbacks = state.passed; + var i = callbacks.length; + while (i--) { + callbacks[i](); + } + resolve(2); + }; + var failed = function () { + var callbacks = state.failed; + var i = callbacks.length; + while (i--) { + callbacks[i](); + } + resolve(3); + }; + var isOldWebKit = function () { + var webKitChunks = domGlobals.navigator.userAgent.match(/WebKit\/(\d*)/); + return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536); + }; + var wait = function (testCallback, waitCallback) { + if (!testCallback()) { + if (new Date().getTime() - startTime < maxLoadTime) { + Delay.setTimeout(waitCallback); + } else { + failed(); + } + } + }; + var waitForWebKitLinkLoaded = function () { + wait(function () { + var styleSheets = document.styleSheets; + var styleSheet, i = styleSheets.length, owner; + while (i--) { + styleSheet = styleSheets[i]; + owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement; + if (owner && owner.id === link.id) { + passed(); + return true; + } + } + }, waitForWebKitLinkLoaded); + }; + var waitForGeckoLinkLoaded = function () { + wait(function () { + try { + var cssRules = style.sheet.cssRules; + passed(); + return !!cssRules; + } catch (ex) { + } + }, waitForGeckoLinkLoaded); + }; + url = Tools._addCacheSuffix(url); + if (!loadedStates[url]) { + state = { + passed: [], + failed: [] + }; + loadedStates[url] = state; + } else { + state = loadedStates[url]; + } + if (loadedCallback) { + state.passed.push(loadedCallback); + } + if (errorCallback) { + state.failed.push(errorCallback); + } + if (state.status === 1) { + return; + } + if (state.status === 2) { + passed(); + return; + } + if (state.status === 3) { + failed(); + return; + } + state.status = 1; + link = document.createElement('link'); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.id = 'u' + idCount++; + link.async = false; + link.defer = false; + startTime = new Date().getTime(); + if (settings.contentCssCors) { + link.crossOrigin = 'anonymous'; + } + if ('onload' in link && !isOldWebKit()) { + link.onload = waitForWebKitLinkLoaded; + link.onerror = failed; + } else { + if (domGlobals.navigator.userAgent.indexOf('Firefox') > 0) { + style = document.createElement('style'); + style.textContent = '@import "' + url + '"'; + waitForGeckoLinkLoaded(); + appendToHead(style); + return; + } + waitForWebKitLinkLoaded(); + } + appendToHead(link); + link.href = url; + }; + var loadF = function (url) { + return Future.nu(function (resolve) { + load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url)))); + }); + }; + var unbox = function (result) { + return result.fold(identity, identity); + }; + var loadAll = function (urls, success, failure) { + par$1(map(urls, loadF)).get(function (result) { + var parts = partition(result, function (r) { + return r.isValue(); + }); + if (parts.fail.length > 0) { + failure(parts.fail.map(unbox)); + } else { + success(parts.pass.map(unbox)); + } + }); + }; + return { + load: load, + loadAll: loadAll + }; + } + + var isNodeType = function (type) { + return function (node) { + return !!node && node.nodeType === type; + }; + }; + var isElement$1 = isNodeType(1); + var matchNodeNames = function (names) { + var items = names.toLowerCase().split(' '); + return function (node) { + var i, name; + if (node && node.nodeType) { + name = node.nodeName.toLowerCase(); + for (i = 0; i < items.length; i++) { + if (name === items[i]) { + return true; + } + } + } + return false; + }; + }; + var matchStyleValues = function (name, values) { + var items = values.toLowerCase().split(' '); + return function (node) { + var i, cssValue; + if (isElement$1(node)) { + for (i = 0; i < items.length; i++) { + var computed = node.ownerDocument.defaultView.getComputedStyle(node, null); + cssValue = computed ? computed.getPropertyValue(name) : null; + if (cssValue === items[i]) { + return true; + } + } + } + return false; + }; + }; + var hasPropValue = function (propName, propValue) { + return function (node) { + return isElement$1(node) && node[propName] === propValue; + }; + }; + var hasAttribute = function (attrName, attrValue) { + return function (node) { + return isElement$1(node) && node.hasAttribute(attrName); + }; + }; + var hasAttributeValue = function (attrName, attrValue) { + return function (node) { + return isElement$1(node) && node.getAttribute(attrName) === attrValue; + }; + }; + var isBogus = function (node) { + return isElement$1(node) && node.hasAttribute('data-mce-bogus'); + }; + var isBogusAll = function (node) { + return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all'; + }; + var isTable = function (node) { + return isElement$1(node) && node.tagName === 'TABLE'; + }; + var hasContentEditableState = function (value) { + return function (node) { + if (isElement$1(node)) { + if (node.contentEditable === value) { + return true; + } + if (node.getAttribute('data-mce-contenteditable') === value) { + return true; + } + } + return false; + }; + }; + var isText$1 = isNodeType(3); + var isComment = isNodeType(8); + var isDocument = isNodeType(9); + var isDocumentFragment = isNodeType(11); + var isBr = matchNodeNames('br'); + var isContentEditableTrue = hasContentEditableState('true'); + var isContentEditableFalse = hasContentEditableState('false'); + var NodeType = { + isText: isText$1, + isElement: isElement$1, + isComment: isComment, + isDocument: isDocument, + isDocumentFragment: isDocumentFragment, + isBr: isBr, + isContentEditableTrue: isContentEditableTrue, + isContentEditableFalse: isContentEditableFalse, + matchNodeNames: matchNodeNames, + hasPropValue: hasPropValue, + hasAttribute: hasAttribute, + hasAttributeValue: hasAttributeValue, + matchStyleValues: matchStyleValues, + isBogus: isBogus, + isBogusAll: isBogusAll, + isTable: isTable + }; + + var TreeWalker = function () { + function TreeWalker(startNode, rootNode) { + this.node = startNode; + this.rootNode = rootNode; + this.current = this.current.bind(this); + this.next = this.next.bind(this); + this.prev = this.prev.bind(this); + this.prev2 = this.prev2.bind(this); + } + TreeWalker.prototype.current = function () { + return this.node; + }; + TreeWalker.prototype.next = function (shallow) { + this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow); + return this.node; + }; + TreeWalker.prototype.prev = function (shallow) { + this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow); + return this.node; + }; + TreeWalker.prototype.prev2 = function (shallow) { + this.node = this.findPreviousNode(this.node, 'lastChild', 'previousSibling', shallow); + return this.node; + }; + TreeWalker.prototype.findSibling = function (node, startName, siblingName, shallow) { + var sibling, parent; + if (node) { + if (!shallow && node[startName]) { + return node[startName]; + } + if (node !== this.rootNode) { + sibling = node[siblingName]; + if (sibling) { + return sibling; + } + for (parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) { + sibling = parent[siblingName]; + if (sibling) { + return sibling; + } + } + } + } + }; + TreeWalker.prototype.findPreviousNode = function (node, startName, siblingName, shallow) { + var sibling, parent, child; + if (node) { + sibling = node[siblingName]; + if (this.rootNode && sibling === this.rootNode) { + return; + } + if (sibling) { + if (!shallow) { + for (child = sibling[startName]; child; child = child[startName]) { + if (!child[startName]) { + return child; + } + } + } + return sibling; + } + parent = node.parentNode; + if (parent && parent !== this.rootNode) { + return parent; + } + } + }; + return TreeWalker; + }(); + + var blocks = [ + 'article', + 'aside', + 'details', + 'div', + 'dt', + 'figcaption', + 'footer', + 'form', + 'fieldset', + 'header', + 'hgroup', + 'html', + 'main', + 'nav', + 'section', + 'summary', + 'body', + 'p', + 'dl', + 'multicol', + 'dd', + 'figure', + 'address', + 'center', + 'blockquote', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'listing', + 'xmp', + 'pre', + 'plaintext', + 'menu', + 'dir', + 'ul', + 'ol', + 'li', + 'hr', + 'table', + 'tbody', + 'thead', + 'tfoot', + 'th', + 'tr', + 'td', + 'caption' + ]; + var voids = [ + 'area', + 'base', + 'basefont', + 'br', + 'col', + 'frame', + 'hr', + 'img', + 'input', + 'isindex', + 'link', + 'meta', + 'param', + 'embed', + 'source', + 'wbr', + 'track' + ]; + var tableCells = [ + 'td', + 'th' + ]; + var tableSections = [ + 'thead', + 'tbody', + 'tfoot' + ]; + var textBlocks = [ + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'p', + 'div', + 'address', + 'pre', + 'form', + 'blockquote', + 'center', + 'dir', + 'fieldset', + 'header', + 'footer', + 'article', + 'section', + 'hgroup', + 'aside', + 'nav', + 'figure' + ]; + var headings = [ + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6' + ]; + var listItems = [ + 'li', + 'dd', + 'dt' + ]; + var lists = [ + 'ul', + 'ol', + 'dl' + ]; + var wsElements = [ + 'pre', + 'script', + 'textarea', + 'style' + ]; + var lazyLookup = function (items) { + var lookup; + return function (node) { + lookup = lookup ? lookup : mapToObject(items, constant(true)); + return lookup.hasOwnProperty(name(node)); + }; + }; + var isHeading = lazyLookup(headings); + var isBlock = lazyLookup(blocks); + var isTable$1 = function (node) { + return name(node) === 'table'; + }; + var isInline = function (node) { + return isElement(node) && !isBlock(node); + }; + var isBr$1 = function (node) { + return isElement(node) && name(node) === 'br'; + }; + var isTextBlock = lazyLookup(textBlocks); + var isList = lazyLookup(lists); + var isListItem = lazyLookup(listItems); + var isVoid = lazyLookup(voids); + var isTableSection = lazyLookup(tableSections); + var isTableCell = lazyLookup(tableCells); + var isWsPreserveElement = lazyLookup(wsElements); + + var surroundedBySpans = function (node) { + var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN'; + var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN'; + return previousIsSpan && nextIsSpan; + }; + var isBookmarkNode = function (node) { + return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark'; + }; + var trimNode = function (dom, node) { + var i, children = node.childNodes; + if (NodeType.isElement(node) && isBookmarkNode(node)) { + return; + } + for (i = children.length - 1; i >= 0; i--) { + trimNode(dom, children[i]); + } + if (NodeType.isDocument(node) === false) { + if (NodeType.isText(node) && node.nodeValue.length > 0) { + var trimmedLength = Tools.trim(node.nodeValue).length; + if (dom.isBlock(node.parentNode) || trimmedLength > 0) { + return; + } + if (trimmedLength === 0 && surroundedBySpans(node)) { + return; + } + } else if (NodeType.isElement(node)) { + children = node.childNodes; + if (children.length === 1 && isBookmarkNode(children[0])) { + node.parentNode.insertBefore(children[0], node); + } + if (children.length || isVoid(Element.fromDom(node))) { + return; + } + } + dom.remove(node); + } + return node; + }; + var TrimNode = { trimNode: trimNode }; + + var makeMap$1 = Tools.makeMap; + var namedEntities, baseEntities, reverseEntities; + var attrsCharsRegExp = /[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + var textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + var rawCharsRegExp = /[<>&\"\']/g; + var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi; + var asciiMap = { + 128: '\u20AC', + 130: '\u201A', + 131: '\u0192', + 132: '\u201E', + 133: '\u2026', + 134: '\u2020', + 135: '\u2021', + 136: '\u02c6', + 137: '\u2030', + 138: '\u0160', + 139: '\u2039', + 140: '\u0152', + 142: '\u017d', + 145: '\u2018', + 146: '\u2019', + 147: '\u201C', + 148: '\u201D', + 149: '\u2022', + 150: '\u2013', + 151: '\u2014', + 152: '\u02DC', + 153: '\u2122', + 154: '\u0161', + 155: '\u203A', + 156: '\u0153', + 158: '\u017e', + 159: '\u0178' + }; + baseEntities = { + '"': '"', + '\'': ''', + '<': '<', + '>': '>', + '&': '&', + '`': '`' + }; + reverseEntities = { + '<': '<', + '>': '>', + '&': '&', + '"': '"', + ''': '\'' + }; + var nativeDecode = function (text) { + var elm; + elm = Element.fromTag('div').dom(); + elm.innerHTML = text; + return elm.textContent || elm.innerText || text; + }; + var buildEntitiesLookup = function (items, radix) { + var i, chr, entity; + var lookup = {}; + if (items) { + items = items.split(','); + radix = radix || 10; + for (i = 0; i < items.length; i += 2) { + chr = String.fromCharCode(parseInt(items[i], radix)); + if (!baseEntities[chr]) { + entity = '&' + items[i + 1] + ';'; + lookup[chr] = entity; + lookup[entity] = chr; + } + } + return lookup; + } + }; + namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32); + var encodeRaw = function (text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) { + return baseEntities[chr] || chr; + }); + }; + var encodeAllRaw = function (text) { + return ('' + text).replace(rawCharsRegExp, function (chr) { + return baseEntities[chr] || chr; + }); + }; + var encodeNumeric = function (text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) { + if (chr.length > 1) { + return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';'; + } + return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';'; + }); + }; + var encodeNamed = function (text, attr, entities) { + entities = entities || namedEntities; + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) { + return baseEntities[chr] || entities[chr] || chr; + }); + }; + var getEncodeFunc = function (name, entities) { + var entitiesMap = buildEntitiesLookup(entities) || namedEntities; + var encodeNamedAndNumeric = function (text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) { + if (baseEntities[chr] !== undefined) { + return baseEntities[chr]; + } + if (entitiesMap[chr] !== undefined) { + return entitiesMap[chr]; + } + if (chr.length > 1) { + return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';'; + } + return '&#' + chr.charCodeAt(0) + ';'; + }); + }; + var encodeCustomNamed = function (text, attr) { + return encodeNamed(text, attr, entitiesMap); + }; + var nameMap = makeMap$1(name.replace(/\+/g, ',')); + if (nameMap.named && nameMap.numeric) { + return encodeNamedAndNumeric; + } + if (nameMap.named) { + if (entities) { + return encodeCustomNamed; + } + return encodeNamed; + } + if (nameMap.numeric) { + return encodeNumeric; + } + return encodeRaw; + }; + var decode = function (text) { + return text.replace(entityRegExp, function (all, numeric) { + if (numeric) { + if (numeric.charAt(0).toLowerCase() === 'x') { + numeric = parseInt(numeric.substr(1), 16); + } else { + numeric = parseInt(numeric, 10); + } + if (numeric > 65535) { + numeric -= 65536; + return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023)); + } + return asciiMap[numeric] || String.fromCharCode(numeric); + } + return reverseEntities[all] || namedEntities[all] || nativeDecode(all); + }); + }; + var Entities = { + encodeRaw: encodeRaw, + encodeAllRaw: encodeAllRaw, + encodeNumeric: encodeNumeric, + encodeNamed: encodeNamed, + getEncodeFunc: getEncodeFunc, + decode: decode + }; + + var mapCache = {}, dummyObj = {}; + var makeMap$2 = Tools.makeMap, each$4 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray$1 = Tools.inArray; + var split = function (items, delim) { + items = Tools.trim(items); + return items ? items.split(delim || ' ') : []; + }; + var compileSchema = function (type) { + var schema = {}; + var globalAttributes, blockContent; + var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent; + var add = function (name, attributes, children) { + var ni, attributesOrder, element; + var arrayToMap = function (array, obj) { + var map = {}; + var i, l; + for (i = 0, l = array.length; i < l; i++) { + map[array[i]] = obj || {}; + } + return map; + }; + children = children || []; + attributes = attributes || ''; + if (typeof children === 'string') { + children = split(children); + } + name = split(name); + ni = name.length; + while (ni--) { + attributesOrder = split([ + globalAttributes, + attributes + ].join(' ')); + element = { + attributes: arrayToMap(attributesOrder), + attributesOrder: attributesOrder, + children: arrayToMap(children, dummyObj) + }; + schema[name[ni]] = element; + } + }; + var addAttrs = function (name, attributes) { + var ni, schemaItem, i, l; + name = split(name); + ni = name.length; + attributes = split(attributes); + while (ni--) { + schemaItem = schema[name[ni]]; + for (i = 0, l = attributes.length; i < l; i++) { + schemaItem.attributes[attributes[i]] = {}; + schemaItem.attributesOrder.push(attributes[i]); + } + } + }; + if (mapCache[type]) { + return mapCache[type]; + } + globalAttributes = 'id accesskey class dir lang style tabindex title role'; + blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul'; + phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment'; + if (type !== 'html4') { + globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate'; + blockContent += ' article aside details dialog figure main header footer hgroup section nav'; + phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen'; + } + if (type !== 'html5-strict') { + globalAttributes += ' xml:lang'; + html4PhrasingContent = 'acronym applet basefont big font strike tt'; + phrasingContent = [ + phrasingContent, + html4PhrasingContent + ].join(' '); + each$4(split(html4PhrasingContent), function (name) { + add(name, '', phrasingContent); + }); + html4BlockContent = 'center dir isindex noframes'; + blockContent = [ + blockContent, + html4BlockContent + ].join(' '); + flowContent = [ + blockContent, + phrasingContent + ].join(' '); + each$4(split(html4BlockContent), function (name) { + add(name, '', flowContent); + }); + } + flowContent = flowContent || [ + blockContent, + phrasingContent + ].join(' '); + add('html', 'manifest', 'head body'); + add('head', '', 'base command link meta noscript script style title'); + add('title hr noscript br'); + add('base', 'href target'); + add('link', 'href rel media hreflang type sizes hreflang'); + add('meta', 'name http-equiv content charset'); + add('style', 'media type scoped'); + add('script', 'src async defer type charset'); + add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent); + add('address dt dd div caption', '', flowContent); + add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent); + add('blockquote', 'cite', flowContent); + add('ol', 'reversed start type', 'li'); + add('ul', '', 'li'); + add('li', 'value', flowContent); + add('dl', '', 'dt dd'); + add('a', 'href target rel media hreflang type', phrasingContent); + add('q', 'cite', phrasingContent); + add('ins del', 'cite datetime', flowContent); + add('img', 'src sizes srcset alt usemap ismap width height'); + add('iframe', 'src name width height', flowContent); + add('embed', 'src type width height'); + add('object', 'data type typemustmatch name usemap form width height', [ + flowContent, + 'param' + ].join(' ')); + add('param', 'name value'); + add('map', 'name', [ + flowContent, + 'area' + ].join(' ')); + add('area', 'alt coords shape href target rel media hreflang type'); + add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : '')); + add('colgroup', 'span', 'col'); + add('col', 'span'); + add('tbody thead tfoot', '', 'tr'); + add('tr', '', 'td th'); + add('td', 'colspan rowspan headers', flowContent); + add('th', 'colspan rowspan headers scope abbr', flowContent); + add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent); + add('fieldset', 'disabled form name', [ + flowContent, + 'legend' + ].join(' ')); + add('label', 'form for', phrasingContent); + add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width'); + add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent); + add('select', 'disabled form multiple name required size', 'option optgroup'); + add('optgroup', 'disabled label', 'option'); + add('option', 'disabled label selected value'); + add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap'); + add('menu', 'type label', [ + flowContent, + 'li' + ].join(' ')); + add('noscript', '', flowContent); + if (type !== 'html4') { + add('wbr'); + add('ruby', '', [ + phrasingContent, + 'rt rp' + ].join(' ')); + add('figcaption', '', flowContent); + add('mark rt rp summary bdi', '', phrasingContent); + add('canvas', 'width height', flowContent); + add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [ + flowContent, + 'track source' + ].join(' ')); + add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [ + flowContent, + 'track source' + ].join(' ')); + add('picture', '', 'img source'); + add('source', 'src srcset type media sizes'); + add('track', 'kind src srclang label default'); + add('datalist', '', [ + phrasingContent, + 'option' + ].join(' ')); + add('article section nav aside main header footer', '', flowContent); + add('hgroup', '', 'h1 h2 h3 h4 h5 h6'); + add('figure', '', [ + flowContent, + 'figcaption' + ].join(' ')); + add('time', 'datetime', phrasingContent); + add('dialog', 'open', flowContent); + add('command', 'type label icon disabled checked radiogroup command'); + add('output', 'for form name', phrasingContent); + add('progress', 'value max', phrasingContent); + add('meter', 'value min max low high optimum', phrasingContent); + add('details', 'open', [ + flowContent, + 'summary' + ].join(' ')); + add('keygen', 'autofocus challenge disabled form keytype name'); + } + if (type !== 'html5-strict') { + addAttrs('script', 'language xml:space'); + addAttrs('style', 'xml:space'); + addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace'); + addAttrs('embed', 'align name hspace vspace'); + addAttrs('param', 'valuetype type'); + addAttrs('a', 'charset name rev shape coords'); + addAttrs('br', 'clear'); + addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace'); + addAttrs('img', 'name longdesc align border hspace vspace'); + addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align'); + addAttrs('font basefont', 'size color face'); + addAttrs('input', 'usemap align'); + addAttrs('select', 'onchange'); + addAttrs('textarea'); + addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align'); + addAttrs('ul', 'type compact'); + addAttrs('li', 'type'); + addAttrs('ol dl menu dir', 'compact'); + addAttrs('pre', 'width xml:space'); + addAttrs('hr', 'align noshade size width'); + addAttrs('isindex', 'prompt'); + addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor'); + addAttrs('col', 'width align char charoff valign'); + addAttrs('colgroup', 'width align char charoff valign'); + addAttrs('thead', 'align char charoff valign'); + addAttrs('tr', 'align char charoff valign bgcolor'); + addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height'); + addAttrs('form', 'accept'); + addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height'); + addAttrs('tfoot', 'align char charoff valign'); + addAttrs('tbody', 'align char charoff valign'); + addAttrs('area', 'nohref'); + addAttrs('body', 'background bgcolor text link vlink alink'); + } + if (type !== 'html4') { + addAttrs('input button select textarea', 'autofocus'); + addAttrs('input textarea', 'placeholder'); + addAttrs('a', 'download'); + addAttrs('link script img', 'crossorigin'); + addAttrs('iframe', 'sandbox seamless allowfullscreen'); + } + each$4(split('a form meter progress dfn'), function (name) { + if (schema[name]) { + delete schema[name].children[name]; + } + }); + delete schema.caption.children.table; + delete schema.script; + mapCache[type] = schema; + return schema; + }; + var compileElementMap = function (value, mode) { + var styles; + if (value) { + styles = {}; + if (typeof value === 'string') { + value = { '*': value }; + } + each$4(value, function (value, key) { + styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/); + }); + } + return styles; + }; + function Schema(settings) { + var elements = {}; + var children = {}; + var patternElements = []; + var validStyles; + var invalidStyles; + var schemaItems; + var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses; + var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap; + var customElementsMap = {}, specialElements = {}; + var createLookupTable = function (option, defaultValue, extendWith) { + var value = settings[option]; + if (!value) { + value = mapCache[option]; + if (!value) { + value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' ')); + value = extend$1(value, extendWith); + mapCache[option] = value; + } + } else { + value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/)); + } + return value; + }; + settings = settings || {}; + schemaItems = compileSchema(settings.schema); + if (settings.verify_html === false) { + settings.valid_elements = '*[*]'; + } + validStyles = compileElementMap(settings.valid_styles); + invalidStyles = compileElementMap(settings.invalid_styles, 'map'); + validClasses = compileElementMap(settings.valid_classes, 'map'); + whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code'); + selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr'); + shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track'); + boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls'); + nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap); + moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap); + textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure'); + blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap); + textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp'); + each$4((settings.special || 'script noscript noframes noembed title style textarea xmp').split(' '), function (name) { + specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi'); + }); + var patternToRegExp = function (str) { + return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$'); + }; + var addValidElements = function (validElements) { + var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, key, value; + var elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, attrRuleRegExp = /^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/; + if (validElements) { + validElements = split(validElements, ','); + if (elements['@']) { + globalAttributes = elements['@'].attributes; + globalAttributesOrder = elements['@'].attributesOrder; + } + for (ei = 0, el = validElements.length; ei < el; ei++) { + matches = elementRuleRegExp.exec(validElements[ei]); + if (matches) { + prefix = matches[1]; + elementName = matches[2]; + outputName = matches[3]; + attrData = matches[5]; + attributes = {}; + attributesOrder = []; + element = { + attributes: attributes, + attributesOrder: attributesOrder + }; + if (prefix === '#') { + element.paddEmpty = true; + } + if (prefix === '-') { + element.removeEmpty = true; + } + if (matches[4] === '!') { + element.removeEmptyAttrs = true; + } + if (globalAttributes) { + for (key in globalAttributes) { + attributes[key] = globalAttributes[key]; + } + attributesOrder.push.apply(attributesOrder, globalAttributesOrder); + } + if (attrData) { + attrData = split(attrData, '|'); + for (ai = 0, al = attrData.length; ai < al; ai++) { + matches = attrRuleRegExp.exec(attrData[ai]); + if (matches) { + attr = {}; + attrType = matches[1]; + attrName = matches[2].replace(/[\\:]:/g, ':'); + prefix = matches[3]; + value = matches[4]; + if (attrType === '!') { + element.attributesRequired = element.attributesRequired || []; + element.attributesRequired.push(attrName); + attr.required = true; + } + if (attrType === '-') { + delete attributes[attrName]; + attributesOrder.splice(inArray$1(attributesOrder, attrName), 1); + continue; + } + if (prefix) { + if (prefix === '=') { + element.attributesDefault = element.attributesDefault || []; + element.attributesDefault.push({ + name: attrName, + value: value + }); + attr.defaultValue = value; + } + if (prefix === ':') { + element.attributesForced = element.attributesForced || []; + element.attributesForced.push({ + name: attrName, + value: value + }); + attr.forcedValue = value; + } + if (prefix === '<') { + attr.validValues = makeMap$2(value, '?'); + } + } + if (hasPatternsRegExp.test(attrName)) { + element.attributePatterns = element.attributePatterns || []; + attr.pattern = patternToRegExp(attrName); + element.attributePatterns.push(attr); + } else { + if (!attributes[attrName]) { + attributesOrder.push(attrName); + } + attributes[attrName] = attr; + } + } + } + } + if (!globalAttributes && elementName === '@') { + globalAttributes = attributes; + globalAttributesOrder = attributesOrder; + } + if (outputName) { + element.outputName = elementName; + elements[outputName] = element; + } + if (hasPatternsRegExp.test(elementName)) { + element.pattern = patternToRegExp(elementName); + patternElements.push(element); + } else { + elements[elementName] = element; + } + } + } + } + }; + var setValidElements = function (validElements) { + elements = {}; + patternElements = []; + addValidElements(validElements); + each$4(schemaItems, function (element, name) { + children[name] = element.children; + }); + }; + var addCustomElements = function (customElements) { + var customElementRegExp = /^(~)?(.+)$/; + if (customElements) { + mapCache.text_block_elements = mapCache.block_elements = null; + each$4(split(customElements, ','), function (rule) { + var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2]; + children[name] = children[cloneName]; + customElementsMap[name] = cloneName; + if (!inline) { + blockElementsMap[name.toUpperCase()] = {}; + blockElementsMap[name] = {}; + } + if (!elements[name]) { + var customRule = elements[cloneName]; + customRule = extend$1({}, customRule); + delete customRule.removeEmptyAttrs; + delete customRule.removeEmpty; + elements[name] = customRule; + } + each$4(children, function (element, elmName) { + if (element[cloneName]) { + children[elmName] = element = extend$1({}, children[elmName]); + element[name] = element[cloneName]; + } + }); + }); + } + }; + var addValidChildren = function (validChildren) { + var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/; + mapCache[settings.schema] = null; + if (validChildren) { + each$4(split(validChildren, ','), function (rule) { + var matches = childRuleRegExp.exec(rule); + var parent, prefix; + if (matches) { + prefix = matches[1]; + if (prefix) { + parent = children[matches[2]]; + } else { + parent = children[matches[2]] = { '#comment': {} }; + } + parent = children[matches[2]]; + each$4(split(matches[3], '|'), function (child) { + if (prefix === '-') { + delete parent[child]; + } else { + parent[child] = {}; + } + }); + } + }); + } + }; + var getElementRule = function (name) { + var element = elements[name], i; + if (element) { + return element; + } + i = patternElements.length; + while (i--) { + element = patternElements[i]; + if (element.pattern.test(name)) { + return element; + } + } + }; + if (!settings.valid_elements) { + each$4(schemaItems, function (element, name) { + elements[name] = { + attributes: element.attributes, + attributesOrder: element.attributesOrder + }; + children[name] = element.children; + }); + if (settings.schema !== 'html5') { + each$4(split('strong/b em/i'), function (item) { + item = split(item, '/'); + elements[item[1]].outputName = item[0]; + }); + } + each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) { + if (elements[name]) { + elements[name].removeEmpty = true; + } + }); + each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) { + elements[name].paddEmpty = true; + }); + each$4(split('span'), function (name) { + elements[name].removeEmptyAttrs = true; + }); + } else { + setValidElements(settings.valid_elements); + } + addCustomElements(settings.custom_elements); + addValidChildren(settings.valid_children); + addValidElements(settings.extended_valid_elements); + addValidChildren('+ol[ul|ol],+ul[ul|ol]'); + each$4({ + dd: 'dl', + dt: 'dl', + li: 'ul ol', + td: 'tr', + th: 'tr', + tr: 'tbody thead tfoot', + tbody: 'table', + thead: 'table', + tfoot: 'table', + legend: 'fieldset', + area: 'map', + param: 'video audio object' + }, function (parents, item) { + if (elements[item]) { + elements[item].parentsRequired = split(parents); + } + }); + if (settings.invalid_elements) { + each$4(explode$1(settings.invalid_elements), function (item) { + if (elements[item]) { + delete elements[item]; + } + }); + } + if (!getElementRule('span')) { + addValidElements('span[!data-mce-type|*]'); + } + var getValidStyles = function () { + return validStyles; + }; + var getInvalidStyles = function () { + return invalidStyles; + }; + var getValidClasses = function () { + return validClasses; + }; + var getBoolAttrs = function () { + return boolAttrMap; + }; + var getBlockElements = function () { + return blockElementsMap; + }; + var getTextBlockElements = function () { + return textBlockElementsMap; + }; + var getTextInlineElements = function () { + return textInlineElementsMap; + }; + var getShortEndedElements = function () { + return shortEndedElementsMap; + }; + var getSelfClosingElements = function () { + return selfClosingElementsMap; + }; + var getNonEmptyElements = function () { + return nonEmptyElementsMap; + }; + var getMoveCaretBeforeOnEnterElements = function () { + return moveCaretBeforeOnEnterElementsMap; + }; + var getWhiteSpaceElements = function () { + return whiteSpaceElementsMap; + }; + var getSpecialElements = function () { + return specialElements; + }; + var isValidChild = function (name, child) { + var parent = children[name.toLowerCase()]; + return !!(parent && parent[child.toLowerCase()]); + }; + var isValid = function (name, attr) { + var attrPatterns, i; + var rule = getElementRule(name); + if (rule) { + if (attr) { + if (rule.attributes[attr]) { + return true; + } + attrPatterns = rule.attributePatterns; + if (attrPatterns) { + i = attrPatterns.length; + while (i--) { + if (attrPatterns[i].pattern.test(name)) { + return true; + } + } + } + } else { + return true; + } + } + return false; + }; + var getCustomElements = function () { + return customElementsMap; + }; + return { + children: children, + elements: elements, + getValidStyles: getValidStyles, + getValidClasses: getValidClasses, + getBlockElements: getBlockElements, + getInvalidStyles: getInvalidStyles, + getShortEndedElements: getShortEndedElements, + getTextBlockElements: getTextBlockElements, + getTextInlineElements: getTextInlineElements, + getBoolAttrs: getBoolAttrs, + getElementRule: getElementRule, + getSelfClosingElements: getSelfClosingElements, + getNonEmptyElements: getNonEmptyElements, + getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements, + getWhiteSpaceElements: getWhiteSpaceElements, + getSpecialElements: getSpecialElements, + isValidChild: isValidChild, + isValid: isValid, + getCustomElements: getCustomElements, + addValidElements: addValidElements, + setValidElements: setValidElements, + addCustomElements: addCustomElements, + addValidChildren: addValidChildren + }; + } + + var toHex = function (match, r, g, b) { + 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 Styles = function (settings, schema) { + var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi; + var urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi; + var styleRegExp = /\s*([^:]+):\s*([^;]+);?/g; + var trimRightRegExp = /\s+$/; + var i; + var encodingLookup = {}; + var encodingItems; + var validStyles; + var invalidStyles; + var invisibleChar = '\uFEFF'; + settings = settings || {}; + if (schema) { + validStyles = schema.getValidStyles(); + invalidStyles = schema.getInvalidStyles(); + } + encodingItems = ('\\" \\\' \\; \\: ; : ' + invisibleChar).split(' '); + for (i = 0; i < encodingItems.length; i++) { + encodingLookup[encodingItems[i]] = invisibleChar + i; + encodingLookup[invisibleChar + i] = encodingItems[i]; + } + return { + toHex: function (color) { + return color.replace(rgbRegExp, toHex); + }, + parse: function (css) { + var styles = {}; + var matches, name, value, isEncoded; + var urlConverter = settings.url_converter; + var urlConverterScope = settings.url_converter_scope || this; + var compress = function (prefix, suffix, noJoin) { + var top, right, bottom, left; + top = styles[prefix + '-top' + suffix]; + if (!top) { + return; + } + right = styles[prefix + '-right' + suffix]; + if (!right) { + return; + } + bottom = styles[prefix + '-bottom' + suffix]; + if (!bottom) { + return; + } + left = styles[prefix + '-left' + suffix]; + if (!left) { + return; + } + var box = [ + top, + right, + bottom, + left + ]; + i = box.length - 1; + while (i--) { + if (box[i] !== box[i + 1]) { + break; + } + } + if (i > -1 && noJoin) { + return; + } + styles[prefix + suffix] = i === -1 ? box[0] : box.join(' '); + delete styles[prefix + '-top' + suffix]; + delete styles[prefix + '-right' + suffix]; + delete styles[prefix + '-bottom' + suffix]; + delete styles[prefix + '-left' + suffix]; + }; + var canCompress = function (key) { + var value = styles[key], i; + if (!value) { + return; + } + value = value.split(' '); + i = value.length; + while (i--) { + if (value[i] !== value[0]) { + return false; + } + } + styles[key] = value[0]; + return true; + }; + var compress2 = function (target, a, b, c) { + if (!canCompress(a)) { + return; + } + if (!canCompress(b)) { + return; + } + if (!canCompress(c)) { + return; + } + styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c]; + delete styles[a]; + delete styles[b]; + delete styles[c]; + }; + var encode = function (str) { + isEncoded = true; + return encodingLookup[str]; + }; + var decode = function (str, keepSlashes) { + if (isEncoded) { + str = str.replace(/\uFEFF[0-9]/g, function (str) { + return encodingLookup[str]; + }); + } + if (!keepSlashes) { + str = str.replace(/\\([\'\";:])/g, '$1'); + } + return str; + }; + var decodeSingleHexSequence = function (escSeq) { + return String.fromCharCode(parseInt(escSeq.slice(1), 16)); + }; + var decodeHexSequences = function (value) { + return value.replace(/\\[0-9a-f]+/gi, decodeSingleHexSequence); + }; + var processUrl = function (match, url, url2, url3, str, str2) { + str = str || str2; + if (str) { + str = decode(str); + return '\'' + str.replace(/\'/g, '\\\'') + '\''; + } + url = decode(url || url2 || url3); + if (!settings.allow_script_urls) { + var scriptUrl = url.replace(/[\s\r\n]+/g, ''); + if (/(java|vb)script:/i.test(scriptUrl)) { + return ''; + } + if (!settings.allow_svg_data_urls && /^data:image\/svg/i.test(scriptUrl)) { + return ''; + } + } + if (urlConverter) { + url = urlConverter.call(urlConverterScope, url, 'style'); + } + return 'url(\'' + url.replace(/\'/g, '\\\'') + '\')'; + }; + if (css) { + css = css.replace(/[\u0000-\u001F]/g, ''); + css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function (str) { + return str.replace(/[;:]/g, encode); + }); + while (matches = styleRegExp.exec(css)) { + styleRegExp.lastIndex = matches.index + matches[0].length; + name = matches[1].replace(trimRightRegExp, '').toLowerCase(); + value = matches[2].replace(trimRightRegExp, ''); + if (name && value) { + name = decodeHexSequences(name); + value = decodeHexSequences(value); + if (name.indexOf(invisibleChar) !== -1 || name.indexOf('"') !== -1) { + continue; + } + if (!settings.allow_script_urls && (name === 'behavior' || /expression\s*\(|\/\*|\*\//.test(value))) { + continue; + } + if (name === 'font-weight' && value === '700') { + value = 'bold'; + } else if (name === 'color' || name === 'background-color') { + value = value.toLowerCase(); + } + value = value.replace(rgbRegExp, toHex); + value = value.replace(urlOrStrRegExp, processUrl); + styles[name] = isEncoded ? decode(value, true) : value; + } + } + compress('border', '', true); + compress('border', '-width'); + compress('border', '-color'); + compress('border', '-style'); + compress('padding', ''); + compress('margin', ''); + compress2('border', 'border-width', 'border-style', 'border-color'); + if (styles.border === 'medium none') { + delete styles.border; + } + if (styles['border-image'] === 'none') { + delete styles['border-image']; + } + } + return styles; + }, + serialize: function (styles, elementName) { + var css = '', name, value; + var serializeStyles = function (name) { + var styleList, i, l, value; + styleList = validStyles[name]; + if (styleList) { + for (i = 0, l = styleList.length; i < l; i++) { + name = styleList[i]; + value = styles[name]; + if (value) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + }; + var isValid = function (name, elementName) { + var styleMap; + styleMap = invalidStyles['*']; + if (styleMap && styleMap[name]) { + return false; + } + styleMap = invalidStyles[elementName]; + if (styleMap && styleMap[name]) { + return false; + } + return true; + }; + if (elementName && validStyles) { + serializeStyles('*'); + serializeStyles(elementName); + } else { + for (name in styles) { + value = styles[name]; + if (value && (!invalidStyles || isValid(name, elementName))) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + return css; + } + }; + }; + + var each$5 = Tools.each; + var grep$1 = Tools.grep; + var isIE = Env.ie; + var simpleSelectorRe = /^([a-z0-9],?)+$/i; + var whiteSpaceRegExp$2 = /^[ \t\r\n]*$/; + var setupAttrHooks = function (styles, settings, getContext) { + var keepValues = settings.keep_values; + var keepUrlHook = { + set: function ($elm, value, name) { + if (settings.url_converter) { + value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]); + } + $elm.attr('data-mce-' + name, value).attr(name, value); + }, + get: function ($elm, name) { + return $elm.attr('data-mce-' + name) || $elm.attr(name); + } + }; + var attrHooks = { + style: { + set: function ($elm, value) { + if (value !== null && typeof value === 'object') { + $elm.css(value); + return; + } + if (keepValues) { + $elm.attr('data-mce-style', value); + } + $elm.attr('style', value); + }, + get: function ($elm) { + var value = $elm.attr('data-mce-style') || $elm.attr('style'); + value = styles.serialize(styles.parse(value), $elm[0].nodeName); + return value; + } + } + }; + if (keepValues) { + attrHooks.href = attrHooks.src = keepUrlHook; + } + return attrHooks; + }; + var updateInternalStyleAttr = function (styles, $elm) { + var rawValue = $elm.attr('style'); + var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName); + if (!value) { + value = null; + } + $elm.attr('data-mce-style', value); + }; + var findNodeIndex = function (node, normalized) { + var idx = 0, lastNodeType, nodeType; + if (node) { + for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) { + nodeType = node.nodeType; + if (normalized && nodeType === 3) { + if (nodeType === lastNodeType || !node.nodeValue.length) { + continue; + } + } + idx++; + lastNodeType = nodeType; + } + } + return idx; + }; + function DOMUtils(doc, settings) { + var _this = this; + if (settings === void 0) { + settings = {}; + } + var attrHooks; + var addedStyles = {}; + var win = domGlobals.window; + var files = {}; + var counter = 0; + var stdMode = true; + var boxModel = true; + var styleSheetLoader = StyleSheetLoader(doc, { contentCssCors: settings.contentCssCors }); + var boundEvents = []; + var schema = settings.schema ? settings.schema : Schema({}); + var styles = Styles({ + url_converter: settings.url_converter, + url_converter_scope: settings.url_converter_scope + }, settings.schema); + var events = settings.ownEvents ? new EventUtils() : EventUtils.Event; + var blockElementsMap = schema.getBlockElements(); + var $ = DomQuery.overrideDefaults(function () { + return { + context: doc, + element: self.getRoot() + }; + }); + var isBlock = function (node) { + if (typeof node === 'string') { + return !!blockElementsMap[node]; + } else if (node) { + var type = node.nodeType; + if (type) { + return !!(type === 1 && blockElementsMap[node.nodeName]); + } + } + return false; + }; + var get = function (elm) { + if (elm && doc && typeof elm === 'string') { + var node = doc.getElementById(elm); + if (node && node.id !== elm) { + return doc.getElementsByName(elm)[1]; + } else { + return node; + } + } + return elm; + }; + var $$ = function (elm) { + if (typeof elm === 'string') { + elm = get(elm); + } + return $(elm); + }; + var getAttrib = function (elm, name, defaultVal) { + var hook, value; + var $elm = $$(elm); + if ($elm.length) { + hook = attrHooks[name]; + if (hook && hook.get) { + value = hook.get($elm, name); + } else { + value = $elm.attr(name); + } + } + if (typeof value === 'undefined') { + value = defaultVal || ''; + } + return value; + }; + var getAttribs = function (elm) { + var node = get(elm); + if (!node) { + return []; + } + return node.attributes; + }; + var setAttrib = function (elm, name, value) { + var originalValue, hook; + if (value === '') { + value = null; + } + var $elm = $$(elm); + originalValue = $elm.attr(name); + if (!$elm.length) { + return; + } + hook = attrHooks[name]; + if (hook && hook.set) { + hook.set($elm, value, name); + } else { + $elm.attr(name, value); + } + if (originalValue !== value && settings.onSetAttrib) { + settings.onSetAttrib({ + attrElm: $elm, + attrName: name, + attrValue: value + }); + } + }; + var clone = function (node, deep) { + if (!isIE || node.nodeType !== 1 || deep) { + return node.cloneNode(deep); + } + if (!deep) { + var clone_1 = doc.createElement(node.nodeName); + each$5(getAttribs(node), function (attr) { + setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName)); + }); + return clone_1; + } + return null; + }; + var getRoot = function () { + return settings.root_element || doc.body; + }; + var getViewPort = function (argWin) { + var actWin = !argWin ? win : argWin; + var doc = actWin.document; + var rootElm = doc.documentElement; + return { + x: actWin.pageXOffset || rootElm.scrollLeft, + y: actWin.pageYOffset || rootElm.scrollTop, + w: actWin.innerWidth || rootElm.clientWidth, + h: actWin.innerHeight || rootElm.clientHeight + }; + }; + var getPos = function (elm, rootElm) { + return Position.getPos(doc.body, get(elm), rootElm); + }; + var setStyle = function (elm, name, value) { + var $elm = isString(name) ? $$(elm).css(name, value) : $$(elm).css(name); + if (settings.update_styles) { + updateInternalStyleAttr(styles, $elm); + } + }; + var setStyles = function (elm, stylesArg) { + var $elm = $$(elm).css(stylesArg); + if (settings.update_styles) { + updateInternalStyleAttr(styles, $elm); + } + }; + var getStyle = function (elm, name, computed) { + var $elm = $$(elm); + if (computed) { + return $elm.css(name); + } + name = name.replace(/-(\D)/g, function (a, b) { + return b.toUpperCase(); + }); + if (name === 'float') { + name = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat'; + } + return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined; + }; + var getSize = function (elm) { + var w, h; + elm = get(elm); + w = getStyle(elm, 'width'); + h = getStyle(elm, 'height'); + if (w.indexOf('px') === -1) { + w = 0; + } + if (h.indexOf('px') === -1) { + h = 0; + } + return { + w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth, + h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight + }; + }; + var getRect = function (elm) { + var pos, size; + elm = get(elm); + pos = getPos(elm); + size = getSize(elm); + return { + x: pos.x, + y: pos.y, + w: size.w, + h: size.h + }; + }; + var is = function (elm, selector) { + var i; + if (!elm) { + return false; + } + if (!Array.isArray(elm)) { + if (selector === '*') { + return elm.nodeType === 1; + } + if (simpleSelectorRe.test(selector)) { + var selectors = selector.toLowerCase().split(/,/); + var elmName = elm.nodeName.toLowerCase(); + for (i = selectors.length - 1; i >= 0; i--) { + if (selectors[i] === elmName) { + return true; + } + } + return false; + } + if (elm.nodeType && elm.nodeType !== 1) { + return false; + } + } + var elms = !Array.isArray(elm) ? [elm] : elm; + return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0; + }; + var getParents = function (elm, selector, root, collect) { + var result = []; + var selectorVal; + var node = get(elm); + collect = collect === undefined; + root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null); + if (Tools.is(selector, 'string')) { + selectorVal = selector; + if (selector === '*') { + selector = function (node) { + return node.nodeType === 1; + }; + } else { + selector = function (node) { + return is(node, selectorVal); + }; + } + } + while (node) { + if (node === root || !node.nodeType || node.nodeType === 9) { + break; + } + if (!selector || typeof selector === 'function' && selector(node)) { + if (collect) { + result.push(node); + } else { + return [node]; + } + } + node = node.parentNode; + } + return collect ? result : null; + }; + var getParent = function (node, selector, root) { + var parents = getParents(node, selector, root, false); + return parents && parents.length > 0 ? parents[0] : null; + }; + var _findSib = function (node, selector, name) { + var func = selector; + if (node) { + if (typeof selector === 'string') { + func = function (node) { + return is(node, selector); + }; + } + for (node = node[name]; node; node = node[name]) { + if (typeof func === 'function' && func(node)) { + return node; + } + } + } + return null; + }; + var getNext = function (node, selector) { + return _findSib(node, selector, 'nextSibling'); + }; + var getPrev = function (node, selector) { + return _findSib(node, selector, 'previousSibling'); + }; + var select = function (selector, scope) { + return Sizzle(selector, get(scope) || settings.root_element || doc, []); + }; + var run = function (elm, func, scope) { + var result; + var node = typeof elm === 'string' ? get(elm) : elm; + if (!node) { + return false; + } + if (Tools.isArray(node) && (node.length || node.length === 0)) { + result = []; + each$5(node, function (elm, i) { + if (elm) { + if (typeof elm === 'string') { + elm = get(elm); + } + result.push(func.call(scope, elm, i)); + } + }); + return result; + } + var context = scope ? scope : _this; + return func.call(context, node); + }; + var setAttribs = function (elm, attrs) { + $$(elm).each(function (i, node) { + each$5(attrs, function (value, name) { + setAttrib(node, name, value); + }); + }); + }; + var setHTML = function (elm, html) { + var $elm = $$(elm); + if (isIE) { + $elm.each(function (i, target) { + if (target.canHaveHTML === false) { + return; + } + while (target.firstChild) { + target.removeChild(target.firstChild); + } + try { + target.innerHTML = '<br>' + html; + target.removeChild(target.firstChild); + } catch (ex) { + DomQuery('<div></div>').html('<br>' + html).contents().slice(1).appendTo(target); + } + return html; + }); + } else { + $elm.html(html); + } + }; + var add = function (parentElm, name, attrs, html, create) { + return run(parentElm, function (parentElm) { + var newElm = typeof name === 'string' ? doc.createElement(name) : name; + setAttribs(newElm, attrs); + if (html) { + if (typeof html !== 'string' && html.nodeType) { + newElm.appendChild(html); + } else if (typeof html === 'string') { + setHTML(newElm, html); + } + } + return !create ? parentElm.appendChild(newElm) : newElm; + }); + }; + var create = function (name, attrs, html) { + return add(doc.createElement(name), name, attrs, html, true); + }; + var decode = Entities.decode; + var encode = Entities.encodeAllRaw; + var createHTML = function (name, attrs, html) { + var outHtml = '', key; + outHtml += '<' + name; + for (key in attrs) { + if (attrs.hasOwnProperty(key) && attrs[key] !== null && typeof attrs[key] !== 'undefined') { + outHtml += ' ' + key + '="' + encode(attrs[key]) + '"'; + } + } + if (typeof html !== 'undefined') { + return outHtml + '>' + html + '</' + name + '>'; + } + return outHtml + ' />'; + }; + var createFragment = function (html) { + var node; + var container = doc.createElement('div'); + var frag = doc.createDocumentFragment(); + if (html) { + container.innerHTML = html; + } + while (node = container.firstChild) { + frag.appendChild(node); + } + return frag; + }; + var remove = function (node, keepChildren) { + var $node = $$(node); + if (keepChildren) { + $node.each(function () { + var child; + while (child = this.firstChild) { + if (child.nodeType === 3 && child.data.length === 0) { + this.removeChild(child); + } else { + this.parentNode.insertBefore(child, this); + } + } + }).remove(); + } else { + $node.remove(); + } + return $node.length > 1 ? $node.toArray() : $node[0]; + }; + var removeAllAttribs = function (e) { + return run(e, function (e) { + var i; + var attrs = e.attributes; + for (i = attrs.length - 1; i >= 0; i--) { + e.removeAttributeNode(attrs.item(i)); + } + }); + }; + var parseStyle = function (cssText) { + return styles.parse(cssText); + }; + var serializeStyle = function (stylesArg, name) { + return styles.serialize(stylesArg, name); + }; + var addStyle = function (cssText) { + var head, styleElm; + if (self !== DOMUtils.DOM && doc === domGlobals.document) { + if (addedStyles[cssText]) { + return; + } + addedStyles[cssText] = true; + } + styleElm = doc.getElementById('mceDefaultStyles'); + if (!styleElm) { + styleElm = doc.createElement('style'); + styleElm.id = 'mceDefaultStyles'; + styleElm.type = 'text/css'; + head = doc.getElementsByTagName('head')[0]; + if (head.firstChild) { + head.insertBefore(styleElm, head.firstChild); + } else { + head.appendChild(styleElm); + } + } + if (styleElm.styleSheet) { + styleElm.styleSheet.cssText += cssText; + } else { + styleElm.appendChild(doc.createTextNode(cssText)); + } + }; + var loadCSS = function (url) { + var head; + if (self !== DOMUtils.DOM && doc === domGlobals.document) { + DOMUtils.DOM.loadCSS(url); + return; + } + if (!url) { + url = ''; + } + head = doc.getElementsByTagName('head')[0]; + each$5(url.split(','), function (url) { + var link; + url = Tools._addCacheSuffix(url); + if (files[url]) { + return; + } + files[url] = true; + link = create('link', { + rel: 'stylesheet', + href: url + }); + head.appendChild(link); + }); + }; + var toggleClass = function (elm, cls, state) { + $$(elm).toggleClass(cls, state).each(function () { + if (this.className === '') { + DomQuery(this).attr('class', null); + } + }); + }; + var addClass = function (elm, cls) { + $$(elm).addClass(cls); + }; + var removeClass = function (elm, cls) { + toggleClass(elm, cls, false); + }; + var hasClass = function (elm, cls) { + return $$(elm).hasClass(cls); + }; + var show = function (elm) { + $$(elm).show(); + }; + var hide = function (elm) { + $$(elm).hide(); + }; + var isHidden = function (elm) { + return $$(elm).css('display') === 'none'; + }; + var uniqueId = function (prefix) { + return (!prefix ? 'mce_' : prefix) + counter++; + }; + var getOuterHTML = function (elm) { + var node = typeof elm === 'string' ? get(elm) : elm; + return NodeType.isElement(node) ? node.outerHTML : DomQuery('<div></div>').append(DomQuery(node).clone()).html(); + }; + var setOuterHTML = function (elm, html) { + $$(elm).each(function () { + try { + if ('outerHTML' in this) { + this.outerHTML = html; + return; + } + } catch (ex) { + } + remove(DomQuery(this).html(html), true); + }); + }; + var insertAfter = function (node, reference) { + var referenceNode = get(reference); + return run(node, function (node) { + var parent, nextSibling; + parent = referenceNode.parentNode; + nextSibling = referenceNode.nextSibling; + if (nextSibling) { + parent.insertBefore(node, nextSibling); + } else { + parent.appendChild(node); + } + return node; + }); + }; + var replace = function (newElm, oldElm, keepChildren) { + return run(oldElm, function (oldElm) { + if (Tools.is(oldElm, 'array')) { + newElm = newElm.cloneNode(true); + } + if (keepChildren) { + each$5(grep$1(oldElm.childNodes), function (node) { + newElm.appendChild(node); + }); + } + return oldElm.parentNode.replaceChild(newElm, oldElm); + }); + }; + var rename = function (elm, name) { + var newElm; + if (elm.nodeName !== name.toUpperCase()) { + newElm = create(name); + each$5(getAttribs(elm), function (attrNode) { + setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName)); + }); + replace(newElm, elm, true); + } + return newElm || elm; + }; + var findCommonAncestor = function (a, b) { + var ps = a, pe; + while (ps) { + pe = b; + while (pe && ps !== pe) { + pe = pe.parentNode; + } + if (ps === pe) { + break; + } + ps = ps.parentNode; + } + if (!ps && a.ownerDocument) { + return a.ownerDocument.documentElement; + } + return ps; + }; + var toHex = function (rgbVal) { + return styles.toHex(Tools.trim(rgbVal)); + }; + var isEmpty = function (node, elements) { + var i, attributes, type, name, brCount = 0; + node = node.firstChild; + if (node) { + var walker = new TreeWalker(node, node.parentNode); + var whitespace = schema ? schema.getWhiteSpaceElements() : {}; + elements = elements || (schema ? schema.getNonEmptyElements() : null); + do { + type = node.nodeType; + if (NodeType.isElement(node)) { + var bogusVal = node.getAttribute('data-mce-bogus'); + if (bogusVal) { + node = walker.next(bogusVal === 'all'); + continue; + } + name = node.nodeName.toLowerCase(); + if (elements && elements[name]) { + if (name === 'br') { + brCount++; + node = walker.next(); + continue; + } + return false; + } + attributes = getAttribs(node); + i = attributes.length; + while (i--) { + name = attributes[i].nodeName; + if (name === 'name' || name === 'data-mce-bookmark') { + return false; + } + } + } + if (type === 8) { + return false; + } + if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) { + return false; + } + if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(node.nodeValue)) { + return false; + } + node = walker.next(); + } while (node); + } + return brCount <= 1; + }; + var createRng = function () { + return doc.createRange(); + }; + var split = function (parentElm, splitElm, replacementElm) { + var r = createRng(), bef, aft, pa; + if (parentElm && splitElm) { + r.setStart(parentElm.parentNode, findNodeIndex(parentElm)); + r.setEnd(splitElm.parentNode, findNodeIndex(splitElm)); + bef = r.extractContents(); + r = createRng(); + r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1); + r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1); + aft = r.extractContents(); + pa = parentElm.parentNode; + pa.insertBefore(TrimNode.trimNode(self, bef), parentElm); + if (replacementElm) { + pa.insertBefore(replacementElm, parentElm); + } else { + pa.insertBefore(splitElm, parentElm); + } + pa.insertBefore(TrimNode.trimNode(self, aft), parentElm); + remove(parentElm); + return replacementElm || splitElm; + } + }; + var bind = function (target, name, func, scope) { + if (Tools.isArray(target)) { + var i = target.length; + var rv = []; + while (i--) { + rv[i] = bind(target[i], name, func, scope); + } + return rv; + } + if (settings.collect && (target === doc || target === win)) { + boundEvents.push([ + target, + name, + func, + scope + ]); + } + return events.bind(target, name, func, scope || self); + }; + var unbind = function (target, name, func) { + var i; + if (Tools.isArray(target)) { + i = target.length; + var rv = []; + while (i--) { + rv[i] = unbind(target[i], name, func); + } + return rv; + } + if (boundEvents && (target === doc || target === win)) { + i = boundEvents.length; + while (i--) { + var item = boundEvents[i]; + if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) { + events.unbind(item[0], item[1], item[2]); + } + } + } + return events.unbind(target, name, func); + }; + var fire = function (target, name, evt) { + return events.fire(target, name, evt); + }; + var getContentEditable = function (node) { + if (node && NodeType.isElement(node)) { + var contentEditable = node.getAttribute('data-mce-contenteditable'); + if (contentEditable && contentEditable !== 'inherit') { + return contentEditable; + } + return node.contentEditable !== 'inherit' ? node.contentEditable : null; + } else { + return null; + } + }; + var getContentEditableParent = function (node) { + var root = getRoot(); + var state = null; + for (; node && node !== root; node = node.parentNode) { + state = getContentEditable(node); + if (state !== null) { + break; + } + } + return state; + }; + var destroy = function () { + if (boundEvents) { + var i = boundEvents.length; + while (i--) { + var item = boundEvents[i]; + events.unbind(item[0], item[1], item[2]); + } + } + if (Sizzle.setDocument) { + Sizzle.setDocument(); + } + }; + var isChildOf = function (node, parent) { + while (node) { + if (parent === node) { + return true; + } + node = node.parentNode; + } + return false; + }; + var dumpRng = function (r) { + return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset; + }; + var self = { + doc: doc, + settings: settings, + win: win, + files: files, + stdMode: stdMode, + boxModel: boxModel, + styleSheetLoader: styleSheetLoader, + boundEvents: boundEvents, + styles: styles, + schema: schema, + events: events, + isBlock: isBlock, + $: $, + $$: $$, + root: null, + clone: clone, + getRoot: getRoot, + getViewPort: getViewPort, + getRect: getRect, + getSize: getSize, + getParent: getParent, + getParents: getParents, + get: get, + getNext: getNext, + getPrev: getPrev, + select: select, + is: is, + add: add, + create: create, + createHTML: createHTML, + createFragment: createFragment, + remove: remove, + setStyle: setStyle, + getStyle: getStyle, + setStyles: setStyles, + removeAllAttribs: removeAllAttribs, + setAttrib: setAttrib, + setAttribs: setAttribs, + getAttrib: getAttrib, + getPos: getPos, + parseStyle: parseStyle, + serializeStyle: serializeStyle, + addStyle: addStyle, + loadCSS: loadCSS, + addClass: addClass, + removeClass: removeClass, + hasClass: hasClass, + toggleClass: toggleClass, + show: show, + hide: hide, + isHidden: isHidden, + uniqueId: uniqueId, + setHTML: setHTML, + getOuterHTML: getOuterHTML, + setOuterHTML: setOuterHTML, + decode: decode, + encode: encode, + insertAfter: insertAfter, + replace: replace, + rename: rename, + findCommonAncestor: findCommonAncestor, + toHex: toHex, + run: run, + getAttribs: getAttribs, + isEmpty: isEmpty, + createRng: createRng, + nodeIndex: findNodeIndex, + split: split, + bind: bind, + unbind: unbind, + fire: fire, + getContentEditable: getContentEditable, + getContentEditableParent: getContentEditableParent, + destroy: destroy, + isChildOf: isChildOf, + dumpRng: dumpRng + }; + attrHooks = setupAttrHooks(styles, settings, function () { + return self; + }); + return self; + } + (function (DOMUtils) { + DOMUtils.DOM = DOMUtils(domGlobals.document); + DOMUtils.nodeIndex = findNodeIndex; + }(DOMUtils || (DOMUtils = {}))); + var DOMUtils$1 = DOMUtils; + + var DOM = DOMUtils$1.DOM; + var each$6 = Tools.each, grep$2 = Tools.grep; + var QUEUED = 0; + var LOADING = 1; + var LOADED = 2; + var FAILED = 3; + var ScriptLoader = function () { + function ScriptLoader() { + this.states = {}; + this.queue = []; + this.scriptLoadedCallbacks = {}; + this.queueLoadedCallbacks = []; + this.loading = 0; + } + ScriptLoader.prototype.loadScript = function (url, success, failure) { + var dom = DOM; + var elm, id; + var done = function () { + dom.remove(id); + if (elm) { + elm.onreadystatechange = elm.onload = elm = null; + } + success(); + }; + var error = function () { + if (isFunction(failure)) { + failure(); + } else { + if (typeof domGlobals.console !== 'undefined' && domGlobals.console.log) { + domGlobals.console.log('Failed to load script: ' + url); + } + } + }; + id = dom.uniqueId(); + elm = domGlobals.document.createElement('script'); + elm.id = id; + elm.type = 'text/javascript'; + elm.src = Tools._addCacheSuffix(url); + elm.onload = done; + elm.onerror = error; + (domGlobals.document.getElementsByTagName('head')[0] || domGlobals.document.body).appendChild(elm); + }; + ScriptLoader.prototype.isDone = function (url) { + return this.states[url] === LOADED; + }; + ScriptLoader.prototype.markDone = function (url) { + this.states[url] = LOADED; + }; + ScriptLoader.prototype.add = function (url, success, scope, failure) { + var state = this.states[url]; + if (state === undefined) { + this.queue.push(url); + this.states[url] = QUEUED; + } + if (success) { + if (!this.scriptLoadedCallbacks[url]) { + this.scriptLoadedCallbacks[url] = []; + } + this.scriptLoadedCallbacks[url].push({ + success: success, + failure: failure, + scope: scope || this + }); + } + }; + ScriptLoader.prototype.load = function (url, success, scope, failure) { + return this.add(url, success, scope, failure); + }; + ScriptLoader.prototype.remove = function (url) { + delete this.states[url]; + delete this.scriptLoadedCallbacks[url]; + }; + ScriptLoader.prototype.loadQueue = function (success, scope, failure) { + this.loadScripts(this.queue, success, scope, failure); + }; + ScriptLoader.prototype.loadScripts = function (scripts, success, scope, failure) { + var self = this; + var loadScripts; + var failures = []; + var execCallbacks = function (name, url) { + each$6(self.scriptLoadedCallbacks[url], function (callback) { + if (isFunction(callback[name])) { + callback[name].call(callback.scope); + } + }); + self.scriptLoadedCallbacks[url] = undefined; + }; + self.queueLoadedCallbacks.push({ + success: success, + failure: failure, + scope: scope || this + }); + loadScripts = function () { + var loadingScripts = grep$2(scripts); + scripts.length = 0; + each$6(loadingScripts, function (url) { + if (self.states[url] === LOADED) { + execCallbacks('success', url); + return; + } + if (self.states[url] === FAILED) { + execCallbacks('failure', url); + return; + } + if (self.states[url] !== LOADING) { + self.states[url] = LOADING; + self.loading++; + self.loadScript(url, function () { + self.states[url] = LOADED; + self.loading--; + execCallbacks('success', url); + loadScripts(); + }, function () { + self.states[url] = FAILED; + self.loading--; + failures.push(url); + execCallbacks('failure', url); + loadScripts(); + }); + } + }); + if (!self.loading) { + var notifyCallbacks = self.queueLoadedCallbacks.slice(0); + self.queueLoadedCallbacks.length = 0; + each$6(notifyCallbacks, function (callback) { + if (failures.length === 0) { + if (isFunction(callback.success)) { + callback.success.call(callback.scope); + } + } else { + if (isFunction(callback.failure)) { + callback.failure.call(callback.scope, failures); + } + } + }); + } + }; + loadScripts(); + }; + ScriptLoader.ScriptLoader = new ScriptLoader(); + return ScriptLoader; + }(); + + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) + if (b.hasOwnProperty(p)) + d[p] = b[p]; + }; + return extendStatics(d, b); + }; + function __extends(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + var __assign = function () { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + function __rest(s, e) { + var t = {}; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === 'function') + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) + if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; + } + function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function') + r = Reflect.decorate(decorators, target, key, desc); + else + for (var i = decorators.length - 1; i >= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + function __param(paramIndex, decorator) { + return function (target, key) { + decorator(target, key, paramIndex); + }; + } + function __metadata(metadataKey, metadataValue) { + if (typeof Reflect === 'object' && typeof Reflect.metadata === 'function') + return Reflect.metadata(metadataKey, metadataValue); + } + function __awaiter(thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator['throw'](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : new P(function (resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + function __generator(thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) + throw t[1]; + return t[1]; + }, + trys: [], + ops: [] + }, f, y, t, g; + return g = { + next: verb(0), + 'throw': verb(1), + 'return': verb(2) + }, typeof Symbol === 'function' && (g[Symbol.iterator] = function () { + return this; + }), g; + function verb(n) { + return function (v) { + return step([ + n, + v + ]); + }; + } + function step(op) { + if (f) + throw new TypeError('Generator is already executing.'); + while (_) + try { + if (f = 1, y && (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) + return t; + if (y = 0, t) + op = [ + op[0] & 2, + t.value + ]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { + value: op[1], + done: false + }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) + _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } catch (e) { + op = [ + 6, + e + ]; + y = 0; + } finally { + f = t = 0; + } + if (op[0] & 5) + throw op[1]; + return { + value: op[0] ? op[1] : void 0, + done: true + }; + } + } + function __exportStar(m, exports) { + for (var p in m) + if (!exports.hasOwnProperty(p)) + exports[p] = m[p]; + } + function __values(o) { + var m = typeof Symbol === 'function' && o[Symbol.iterator], i = 0; + if (m) + return m.call(o); + return { + next: function () { + if (o && i >= o.length) + o = void 0; + return { + value: o && o[i++], + done: !o + }; + } + }; + } + function __read(o, n) { + var m = typeof Symbol === 'function' && o[Symbol.iterator]; + if (!m) + return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) + ar.push(r.value); + } catch (error) { + e = { error: error }; + } finally { + try { + if (r && !r.done && (m = i['return'])) + m.call(i); + } finally { + if (e) + throw e.error; + } + } + return ar; + } + function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; + } + function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); + } + function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) + throw new TypeError('Symbol.asyncIterator is not defined.'); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb('next'), verb('throw'), verb('return'), i[Symbol.asyncIterator] = function () { + return this; + }, i; + function verb(n) { + if (g[n]) + i[n] = function (v) { + return new Promise(function (a, b) { + q.push([ + n, + v, + a, + b + ]) > 1 || resume(n, v); + }); + }; + } + function resume(n, v) { + try { + step(g[n](v)); + } catch (e) { + settle(q[0][3], e); + } + } + function step(r) { + r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); + } + function fulfill(value) { + resume('next', value); + } + function reject(value) { + resume('throw', value); + } + function settle(f, v) { + if (f(v), q.shift(), q.length) + resume(q[0][0], q[0][1]); + } + } + function __asyncDelegator(o) { + var i, p; + return i = {}, verb('next'), verb('throw', function (e) { + throw e; + }), verb('return'), i[Symbol.iterator] = function () { + return this; + }, i; + function verb(n, f) { + i[n] = o[n] ? function (v) { + return (p = !p) ? { + value: __await(o[n](v)), + done: n === 'return' + } : f ? f(v) : v; + } : f; + } + } + function __asyncValues(o) { + if (!Symbol.asyncIterator) + throw new TypeError('Symbol.asyncIterator is not defined.'); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === 'function' ? __values(o) : o[Symbol.iterator](), i = {}, verb('next'), verb('throw'), verb('return'), i[Symbol.asyncIterator] = function () { + return this; + }, i); + function verb(n) { + i[n] = o[n] && function (v) { + return new Promise(function (resolve, reject) { + v = o[n](v), settle(resolve, reject, v.done, v.value); + }); + }; + } + function settle(resolve, reject, d, v) { + Promise.resolve(v).then(function (v) { + resolve({ + value: v, + done: d + }); + }, reject); + } + } + function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { + Object.defineProperty(cooked, 'raw', { value: raw }); + } else { + cooked.raw = raw; + } + return cooked; + } + function __importStar(mod) { + if (mod && mod.__esModule) + return mod; + var result = {}; + if (mod != null) + for (var k in mod) + if (Object.hasOwnProperty.call(mod, k)) + result[k] = mod[k]; + result.default = mod; + return result; + } + function __importDefault(mod) { + return mod && mod.__esModule ? mod : { default: mod }; + } + + var tslib_1 = /*#__PURE__*/Object.freeze({ + __extends: __extends, + get __assign () { return __assign; }, + __rest: __rest, + __decorate: __decorate, + __param: __param, + __metadata: __metadata, + __awaiter: __awaiter, + __generator: __generator, + __exportStar: __exportStar, + __values: __values, + __read: __read, + __spread: __spread, + __await: __await, + __asyncGenerator: __asyncGenerator, + __asyncDelegator: __asyncDelegator, + __asyncValues: __asyncValues, + __makeTemplateObject: __makeTemplateObject, + __importStar: __importStar, + __importDefault: __importDefault + }); + + var Cell = function (initial) { + var value = initial; + var get = function () { + return value; + }; + var set = function (v) { + value = v; + }; + var clone = function () { + return Cell(get()); + }; + return { + get: get, + set: set, + clone: clone + }; + }; + + var isRaw = function (str) { + return isObject(str) && has(str, 'raw'); + }; + var isTokenised = function (str) { + return isArray(str) && str.length > 1; + }; + var data = {}; + var currentCode = Cell('en'); + var getData = function () { + return map$2(data, function (value) { + return __assign({}, value); + }); + }; + var setCode = function (newCode) { + if (newCode) { + currentCode.set(newCode); + } + }; + var getCode = function () { + return currentCode.get(); + }; + var add = function (code, items) { + var langData = data[code]; + if (!langData) { + data[code] = langData = {}; + } + for (var name in items) { + langData[name.toLowerCase()] = items[name]; + } + }; + var translate = function (text) { + var langData = data[currentCode.get()] || {}; + var toString = function (obj) { + if (isFunction(obj)) { + return Object.prototype.toString.call(obj); + } + return !isEmpty(obj) ? '' + obj : ''; + }; + var isEmpty = function (text) { + return text === '' || text === null || text === undefined; + }; + var getLangData = function (text) { + var textstr = toString(text); + var lowercaseTextstr = textstr.toLowerCase(); + return has(langData, lowercaseTextstr) ? toString(langData[lowercaseTextstr]) : textstr; + }; + var removeContext = function (str) { + return str.replace(/{context:\w+}$/, ''); + }; + var translated = function (text) { + return text; + }; + if (isEmpty(text)) { + return translated(''); + } + if (isRaw(text)) { + return translated(toString(text.raw)); + } + if (isTokenised(text)) { + var values_1 = text.slice(1); + var substitued = getLangData(text[0]).replace(/\{([0-9]+)\}/g, function ($1, $2) { + return has(values_1, $2) ? toString(values_1[$2]) : $1; + }); + return translated(removeContext(substitued)); + } + return translated(removeContext(getLangData(text))); + }; + var isRtl = function () { + return get(data, currentCode.get()).bind(function (items) { + return get(items, '_dir'); + }).exists(function (dir) { + return dir === 'rtl'; + }); + }; + var hasCode = function (code) { + return has(data, code); + }; + var I18n = { + getData: getData, + setCode: setCode, + getCode: getCode, + add: add, + translate: translate, + isRtl: isRtl, + hasCode: hasCode + }; + + var each$7 = Tools.each; + function AddOnManager() { + var _this = this; + var items = []; + var urls = {}; + var lookup = {}; + var _listeners = []; + var get = function (name) { + if (lookup[name]) { + return lookup[name].instance; + } + return undefined; + }; + var dependencies = function (name) { + var result; + if (lookup[name]) { + result = lookup[name].dependencies; + } + return result || []; + }; + var requireLangPack = function (name, languages) { + var language = I18n.getCode(); + if (language && AddOnManager.languageLoad !== false) { + if (languages) { + languages = ',' + languages + ','; + if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) { + language = language.substr(0, 2); + } else if (languages.indexOf(',' + language + ',') === -1) { + return; + } + } + ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js'); + } + }; + var add = function (id, addOn, dependencies) { + items.push(addOn); + lookup[id] = { + instance: addOn, + dependencies: dependencies + }; + var result = partition(_listeners, function (listener) { + return listener.name === id; + }); + _listeners = result.fail; + each$7(result.pass, function (listener) { + listener.callback(); + }); + return addOn; + }; + var remove = function (name) { + delete urls[name]; + delete lookup[name]; + }; + var createUrl = function (baseUrl, dep) { + if (typeof dep === 'object') { + return dep; + } + return typeof baseUrl === 'string' ? { + prefix: '', + resource: dep, + suffix: '' + } : { + prefix: baseUrl.prefix, + resource: dep, + suffix: baseUrl.suffix + }; + }; + var addComponents = function (pluginName, scripts) { + var pluginUrl = _this.urls[pluginName]; + each$7(scripts, function (script) { + ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script); + }); + }; + var loadDependencies = function (name, addOnUrl, success, scope) { + var deps = dependencies(name); + each$7(deps, function (dep) { + var newUrl = createUrl(addOnUrl, dep); + load(newUrl.resource, newUrl, undefined, undefined); + }); + if (success) { + if (scope) { + success.call(scope); + } else { + success.call(ScriptLoader); + } + } + }; + var load = function (name, addOnUrl, success, scope, failure) { + if (urls[name]) { + return; + } + var urlString = typeof addOnUrl === 'string' ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix; + if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) { + urlString = AddOnManager.baseURL + '/' + urlString; + } + urls[name] = urlString.substring(0, urlString.lastIndexOf('/')); + if (lookup[name]) { + loadDependencies(name, addOnUrl, success, scope); + } else { + ScriptLoader.ScriptLoader.add(urlString, function () { + return loadDependencies(name, addOnUrl, success, scope); + }, scope, failure); + } + }; + var waitFor = function (name, callback) { + if (lookup.hasOwnProperty(name)) { + callback(); + } else { + _listeners.push({ + name: name, + callback: callback + }); + } + }; + return { + items: items, + urls: urls, + lookup: lookup, + _listeners: _listeners, + get: get, + dependencies: dependencies, + requireLangPack: requireLangPack, + add: add, + remove: remove, + createUrl: createUrl, + addComponents: addComponents, + load: load, + waitFor: waitFor + }; + } + (function (AddOnManager) { + AddOnManager.PluginManager = AddOnManager(); + AddOnManager.ThemeManager = AddOnManager(); + }(AddOnManager || (AddOnManager = {}))); + var AddOnManager$1 = AddOnManager; + + var before = function (marker, element) { + var parent$1 = parent(marker); + parent$1.each(function (v) { + v.dom().insertBefore(element.dom(), marker.dom()); + }); + }; + var after = function (marker, element) { + var sibling = nextSibling(marker); + sibling.fold(function () { + var parent$1 = parent(marker); + parent$1.each(function (v) { + append(v, element); + }); + }, function (v) { + before(v, element); + }); + }; + var prepend = function (parent, element) { + var firstChild$1 = firstChild(parent); + firstChild$1.fold(function () { + append(parent, element); + }, function (v) { + parent.dom().insertBefore(element.dom(), v.dom()); + }); + }; + var append = function (parent, element) { + parent.dom().appendChild(element.dom()); + }; + var wrap$1 = function (element, wrapper) { + before(element, wrapper); + append(wrapper, element); + }; + + var before$1 = function (marker, elements) { + each(elements, function (x) { + before(marker, x); + }); + }; + var append$1 = function (parent, elements) { + each(elements, function (x) { + append(parent, x); + }); + }; + + var empty = function (element) { + element.dom().textContent = ''; + each(children(element), function (rogue) { + remove$1(rogue); + }); + }; + var remove$1 = function (element) { + var dom = element.dom(); + if (dom.parentNode !== null) { + dom.parentNode.removeChild(dom); + } + }; + var unwrap = function (wrapper) { + var children$1 = children(wrapper); + if (children$1.length > 0) { + before$1(wrapper, children$1); + } + remove$1(wrapper); + }; + + var first = function (fn, rate) { + var timer = null; + var cancel = function () { + if (timer !== null) { + domGlobals.clearTimeout(timer); + timer = null; + } + }; + var throttle = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (timer === null) { + timer = domGlobals.setTimeout(function () { + fn.apply(null, args); + timer = null; + }, rate); + } + }; + return { + cancel: cancel, + throttle: throttle + }; + }; + var last$2 = function (fn, rate) { + var timer = null; + var cancel = function () { + if (timer !== null) { + domGlobals.clearTimeout(timer); + timer = null; + } + }; + var throttle = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (timer !== null) + domGlobals.clearTimeout(timer); + timer = domGlobals.setTimeout(function () { + fn.apply(null, args); + timer = null; + }, rate); + }; + return { + cancel: cancel, + throttle: throttle + }; + }; + + var read = function (element, attr) { + var value = get$1(element, attr); + return value === undefined || value === '' ? [] : value.split(' '); + }; + var add$1 = function (element, attr, id) { + var old = read(element, attr); + var nu = old.concat([id]); + set(element, attr, nu.join(' ')); + return true; + }; + var remove$2 = function (element, attr, id) { + var nu = filter(read(element, attr), function (v) { + return v !== id; + }); + if (nu.length > 0) { + set(element, attr, nu.join(' ')); + } else { + remove(element, attr); + } + return false; + }; + + var supports = function (element) { + return element.dom().classList !== undefined; + }; + var get$3 = function (element) { + return read(element, 'class'); + }; + var add$2 = function (element, clazz) { + return add$1(element, 'class', clazz); + }; + var remove$3 = function (element, clazz) { + return remove$2(element, 'class', clazz); + }; + var toggle = function (element, clazz) { + if (contains(get$3(element), clazz)) { + return remove$3(element, clazz); + } else { + return add$2(element, clazz); + } + }; + + var ClassList = /*#__PURE__*/Object.freeze({ + get: get$3, + add: add$2, + remove: remove$3, + toggle: toggle, + supports: supports + }); + + var add$3 = function (element, clazz) { + if (supports(element)) { + element.dom().classList.add(clazz); + } else { + add$2(element, clazz); + } + }; + var cleanClass = function (element) { + var classList = supports(element) ? element.dom().classList : get$3(element); + if (classList.length === 0) { + remove(element, 'class'); + } + }; + var remove$4 = function (element, clazz) { + if (supports(element)) { + var classList = element.dom().classList; + classList.remove(clazz); + } else { + remove$3(element, clazz); + } + cleanClass(element); + }; + var has$2 = function (element, clazz) { + return supports(element) && element.dom().classList.contains(clazz); + }; + + var ancestors = function (scope, predicate, isRoot) { + return filter(parents(scope, isRoot), predicate); + }; + var siblings$1 = function (scope, predicate) { + return filter(siblings(scope), predicate); + }; + var children$1 = function (scope, predicate) { + return filter(children(scope), predicate); + }; + var descendants = function (scope, predicate) { + var result = []; + each(children(scope), function (x) { + if (predicate(x)) { + result = result.concat([x]); + } + result = result.concat(descendants(x, predicate)); + }); + return result; + }; + + var all$1 = function (selector) { + return all(selector); + }; + var ancestors$1 = function (scope, selector, isRoot) { + return ancestors(scope, function (e) { + return is$1(e, selector); + }, isRoot); + }; + var siblings$2 = function (scope, selector) { + return siblings$1(scope, function (e) { + return is$1(e, selector); + }); + }; + var children$2 = function (scope, selector) { + return children$1(scope, function (e) { + return is$1(e, selector); + }); + }; + var descendants$1 = function (scope, selector) { + return all(selector, scope); + }; + + var SelectorFilter = /*#__PURE__*/Object.freeze({ + all: all$1, + ancestors: ancestors$1, + siblings: siblings$2, + children: children$2, + descendants: descendants$1 + }); + + function ClosestOrAncestor (is, ancestor, scope, a, isRoot) { + return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot); + } + + var ancestor = function (scope, predicate, isRoot) { + var element = scope.dom(); + var stop = isFunction(isRoot) ? isRoot : constant(false); + while (element.parentNode) { + element = element.parentNode; + var el = Element.fromDom(element); + if (predicate(el)) { + return Option.some(el); + } else if (stop(el)) { + break; + } + } + return Option.none(); + }; + var closest = function (scope, predicate, isRoot) { + var is = function (s) { + return predicate(s); + }; + return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot); + }; + + var ancestor$1 = function (scope, selector, isRoot) { + return ancestor(scope, function (e) { + return is$1(e, selector); + }, isRoot); + }; + var descendant = function (scope, selector) { + return one(selector, scope); + }; + var closest$1 = function (scope, selector, isRoot) { + return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot); + }; + + var annotation = constant('mce-annotation'); + var dataAnnotation = constant('data-mce-annotation'); + var dataAnnotationId = constant('data-mce-annotation-uid'); + + var identify = function (editor, annotationName) { + var rng = editor.selection.getRng(); + var start = Element.fromDom(rng.startContainer); + var root = Element.fromDom(editor.getBody()); + var selector = annotationName.fold(function () { + return '.' + annotation(); + }, function (an) { + return '[' + dataAnnotation() + '="' + an + '"]'; + }); + var newStart = child(start, rng.startOffset).getOr(start); + var closest = closest$1(newStart, selector, function (n) { + return eq(n, root); + }); + var getAttr = function (c, property) { + if (has$1(c, property)) { + return Option.some(get$1(c, property)); + } else { + return Option.none(); + } + }; + return closest.bind(function (c) { + return getAttr(c, '' + dataAnnotationId()).bind(function (uid) { + return getAttr(c, '' + dataAnnotation()).map(function (name) { + var elements = findMarkers(editor, uid); + return { + uid: uid, + name: name, + elements: elements + }; + }); + }); + }); + }; + var isAnnotation = function (elem) { + return isElement(elem) && has$2(elem, annotation()); + }; + var findMarkers = function (editor, uid) { + var body = Element.fromDom(editor.getBody()); + return descendants$1(body, '[' + dataAnnotationId() + '="' + uid + '"]'); + }; + var findAll = function (editor, name) { + var body = Element.fromDom(editor.getBody()); + var markers = descendants$1(body, '[' + dataAnnotation() + '="' + name + '"]'); + var directory = {}; + each(markers, function (m) { + var uid = get$1(m, dataAnnotationId()); + var nodesAlready = directory.hasOwnProperty(uid) ? directory[uid] : []; + directory[uid] = nodesAlready.concat([m]); + }); + return directory; + }; + + var setup = function (editor, registry) { + var changeCallbacks = Cell({}); + var initData = function () { + return { + listeners: [], + previous: Cell(Option.none()) + }; + }; + var withCallbacks = function (name, f) { + updateCallbacks(name, function (data) { + f(data); + return data; + }); + }; + var updateCallbacks = function (name, f) { + var callbackMap = changeCallbacks.get(); + var data = callbackMap.hasOwnProperty(name) ? callbackMap[name] : initData(); + var outputData = f(data); + callbackMap[name] = outputData; + changeCallbacks.set(callbackMap); + }; + var fireCallbacks = function (name, uid, elements) { + withCallbacks(name, function (data) { + each(data.listeners, function (f) { + return f(true, name, { + uid: uid, + nodes: map(elements, function (elem) { + return elem.dom(); + }) + }); + }); + }); + }; + var fireNoAnnotation = function (name) { + withCallbacks(name, function (data) { + each(data.listeners, function (f) { + return f(false, name); + }); + }); + }; + var onNodeChange = last$2(function () { + var callbackMap = changeCallbacks.get(); + var annotations = sort(keys(callbackMap)); + each(annotations, function (name) { + updateCallbacks(name, function (data) { + var prev = data.previous.get(); + identify(editor, Option.some(name)).fold(function () { + if (prev.isSome()) { + fireNoAnnotation(name); + data.previous.set(Option.none()); + } + }, function (_a) { + var uid = _a.uid, name = _a.name, elements = _a.elements; + if (!prev.is(uid)) { + fireCallbacks(name, uid, elements); + data.previous.set(Option.some(uid)); + } + }); + return { + previous: data.previous, + listeners: data.listeners + }; + }); + }); + }, 30); + editor.on('remove', function () { + onNodeChange.cancel(); + }); + editor.on('NodeChange', function () { + onNodeChange.throttle(); + }); + var addListener = function (name, f) { + updateCallbacks(name, function (data) { + return { + previous: data.previous, + listeners: data.listeners.concat([f]) + }; + }); + }; + return { addListener: addListener }; + }; + + var setup$1 = function (editor, registry) { + var identifyParserNode = function (span) { + return Option.from(span.attr(dataAnnotation())).bind(registry.lookup); + }; + editor.on('init', function () { + editor.serializer.addNodeFilter('span', function (spans) { + each(spans, function (span) { + identifyParserNode(span).each(function (settings) { + if (settings.persistent === false) { + span.unwrap(); + } + }); + }); + }); + }); + }; + + var create$1 = function () { + var annotations = {}; + var register = function (name, settings) { + annotations[name] = { + name: name, + settings: settings + }; + }; + var lookup = function (name) { + return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) { + return a.settings; + }) : Option.none(); + }; + return { + register: register, + lookup: lookup + }; + }; + + var unique = 0; + var generate = function (prefix) { + var date = new Date(); + var time = date.getTime(); + var random = Math.floor(Math.random() * 1000000000); + unique++; + return prefix + '_' + random + unique + String(time); + }; + + var add$4 = function (element, classes) { + each(classes, function (x) { + add$3(element, x); + }); + }; + + var clone = function (original, isDeep) { + return Element.fromDom(original.dom().cloneNode(isDeep)); + }; + var shallow = function (original) { + return clone(original, false); + }; + var deep = function (original) { + return clone(original, true); + }; + + var fromHtml$1 = function (html, scope) { + var doc = scope || domGlobals.document; + var div = doc.createElement('div'); + div.innerHTML = html; + return children(Element.fromDom(div)); + }; + + var get$4 = function (element) { + return element.dom().innerHTML; + }; + var set$1 = function (element, content) { + var owner$1 = owner(element); + var docDom = owner$1.dom(); + var fragment = Element.fromDom(docDom.createDocumentFragment()); + var contentElements = fromHtml$1(content, docDom); + append$1(fragment, contentElements); + empty(element); + append(element, fragment); + }; + + var ZWSP = '\uFEFF'; + var isZwsp = function (chr) { + return chr === ZWSP; + }; + var trim$3 = function (text) { + return text.replace(new RegExp(ZWSP, 'g'), ''); + }; + var Zwsp = { + isZwsp: isZwsp, + ZWSP: ZWSP, + trim: trim$3 + }; + + var isElement$2 = NodeType.isElement; + var isText$2 = NodeType.isText; + var isCaretContainerBlock = function (node) { + if (isText$2(node)) { + node = node.parentNode; + } + return isElement$2(node) && node.hasAttribute('data-mce-caret'); + }; + var isCaretContainerInline = function (node) { + return isText$2(node) && Zwsp.isZwsp(node.data); + }; + var isCaretContainer = function (node) { + return isCaretContainerBlock(node) || isCaretContainerInline(node); + }; + var hasContent = function (node) { + return node.firstChild !== node.lastChild || !NodeType.isBr(node.firstChild); + }; + var insertInline = function (node, before) { + var doc, sibling, textNode, parentNode; + doc = node.ownerDocument; + textNode = doc.createTextNode(Zwsp.ZWSP); + parentNode = node.parentNode; + if (!before) { + sibling = node.nextSibling; + if (isText$2(sibling)) { + if (isCaretContainer(sibling)) { + return sibling; + } + if (startsWithCaretContainer(sibling)) { + sibling.splitText(1); + return sibling; + } + } + if (node.nextSibling) { + parentNode.insertBefore(textNode, node.nextSibling); + } else { + parentNode.appendChild(textNode); + } + } else { + sibling = node.previousSibling; + if (isText$2(sibling)) { + if (isCaretContainer(sibling)) { + return sibling; + } + if (endsWithCaretContainer(sibling)) { + return sibling.splitText(sibling.data.length - 1); + } + } + parentNode.insertBefore(textNode, node); + } + return textNode; + }; + var prependInline = function (node) { + if (NodeType.isText(node)) { + var data = node.data; + if (data.length > 0 && data.charAt(0) !== Zwsp.ZWSP) { + node.insertData(0, Zwsp.ZWSP); + } + return node; + } else { + return null; + } + }; + var appendInline = function (node) { + if (NodeType.isText(node)) { + var data = node.data; + if (data.length > 0 && data.charAt(data.length - 1) !== Zwsp.ZWSP) { + node.insertData(data.length, Zwsp.ZWSP); + } + return node; + } else { + return null; + } + }; + var isBeforeInline = function (pos) { + var container = pos.container(); + if (!pos || !NodeType.isText(container)) { + return false; + } + return container.data.charAt(pos.offset()) === Zwsp.ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling); + }; + var isAfterInline = function (pos) { + var container = pos.container(); + if (!pos || !NodeType.isText(container)) { + return false; + } + return container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling); + }; + var createBogusBr = function () { + var br = domGlobals.document.createElement('br'); + br.setAttribute('data-mce-bogus', '1'); + return br; + }; + var insertBlock = function (blockName, node, before) { + var doc, blockNode, parentNode; + doc = node.ownerDocument; + blockNode = doc.createElement(blockName); + blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after'); + blockNode.setAttribute('data-mce-bogus', 'all'); + blockNode.appendChild(createBogusBr()); + parentNode = node.parentNode; + if (!before) { + if (node.nextSibling) { + parentNode.insertBefore(blockNode, node.nextSibling); + } else { + parentNode.appendChild(blockNode); + } + } else { + parentNode.insertBefore(blockNode, node); + } + return blockNode; + }; + var startsWithCaretContainer = function (node) { + return isText$2(node) && node.data[0] === Zwsp.ZWSP; + }; + var endsWithCaretContainer = function (node) { + return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP; + }; + var trimBogusBr = function (elm) { + var brs = elm.getElementsByTagName('br'); + var lastBr = brs[brs.length - 1]; + if (NodeType.isBogus(lastBr)) { + lastBr.parentNode.removeChild(lastBr); + } + }; + var showCaretContainerBlock = function (caretContainer) { + if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) { + trimBogusBr(caretContainer); + caretContainer.removeAttribute('data-mce-caret'); + caretContainer.removeAttribute('data-mce-bogus'); + caretContainer.removeAttribute('style'); + caretContainer.removeAttribute('_moz_abspos'); + return caretContainer; + } + return null; + }; + var isRangeInCaretContainerBlock = function (range) { + return isCaretContainerBlock(range.startContainer); + }; + + var CaretContainer = /*#__PURE__*/Object.freeze({ + isCaretContainer: isCaretContainer, + isCaretContainerBlock: isCaretContainerBlock, + isCaretContainerInline: isCaretContainerInline, + showCaretContainerBlock: showCaretContainerBlock, + insertInline: insertInline, + prependInline: prependInline, + appendInline: appendInline, + isBeforeInline: isBeforeInline, + isAfterInline: isAfterInline, + insertBlock: insertBlock, + hasContent: hasContent, + startsWithCaretContainer: startsWithCaretContainer, + endsWithCaretContainer: endsWithCaretContainer, + isRangeInCaretContainerBlock: isRangeInCaretContainerBlock + }); + + var isContentEditableTrue$1 = NodeType.isContentEditableTrue; + var isContentEditableFalse$1 = NodeType.isContentEditableFalse; + var isBr$2 = NodeType.isBr; + var isText$3 = NodeType.isText; + var isInvalidTextElement = NodeType.matchNodeNames('script style textarea'); + var isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object'); + var isTable$2 = NodeType.matchNodeNames('table'); + var isCaretContainer$1 = isCaretContainer; + var isCaretCandidate = function (node) { + if (isCaretContainer$1(node)) { + return false; + } + if (isText$3(node)) { + if (isInvalidTextElement(node.parentNode)) { + return false; + } + return true; + } + return isAtomicInline(node) || isBr$2(node) || isTable$2(node) || isNonUiContentEditableFalse(node); + }; + var isUnselectable = function (node) { + return NodeType.isElement(node) && node.getAttribute('unselectable') === 'true'; + }; + var isNonUiContentEditableFalse = function (node) { + return isUnselectable(node) === false && isContentEditableFalse$1(node); + }; + var isInEditable = function (node, root) { + for (node = node.parentNode; node && node !== root; node = node.parentNode) { + if (isNonUiContentEditableFalse(node)) { + return false; + } + if (isContentEditableTrue$1(node)) { + return true; + } + } + return true; + }; + var isAtomicContentEditableFalse = function (node) { + if (!isNonUiContentEditableFalse(node)) { + return false; + } + return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) { + return result || isContentEditableTrue$1(elm); + }, false) !== true; + }; + var isAtomic = function (node) { + return isAtomicInline(node) || isAtomicContentEditableFalse(node); + }; + var isEditableCaretCandidate = function (node, root) { + return isCaretCandidate(node) && isInEditable(node, root); + }; + + var round = Math.round; + var clone$1 = function (rect) { + if (!rect) { + return { + left: 0, + top: 0, + bottom: 0, + right: 0, + width: 0, + height: 0 + }; + } + return { + left: round(rect.left), + top: round(rect.top), + bottom: round(rect.bottom), + right: round(rect.right), + width: round(rect.width), + height: round(rect.height) + }; + }; + var collapse = function (rect, toStart) { + rect = clone$1(rect); + if (toStart) { + rect.right = rect.left; + } else { + rect.left = rect.left + rect.width; + rect.right = rect.left; + } + rect.width = 0; + return rect; + }; + var isEqual = function (rect1, rect2) { + return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right; + }; + var isValidOverflow = function (overflowY, rect1, rect2) { + return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2; + }; + var isAbove = function (rect1, rect2) { + if (rect1.bottom - rect1.height / 2 < rect2.top) { + return true; + } + if (rect1.top > rect2.bottom) { + return false; + } + return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2); + }; + var isBelow = function (rect1, rect2) { + if (rect1.top > rect2.bottom) { + return true; + } + if (rect1.bottom < rect2.top) { + return false; + } + return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2); + }; + var containsXY = function (rect, clientX, clientY) { + return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom; + }; + var overflowX = function (outer, inner) { + if (inner.left > outer.left && inner.right < outer.right) { + return 0; + } else { + return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right; + } + }; + var overflowY = function (outer, inner) { + if (inner.top > outer.top && inner.bottom < outer.bottom) { + return 0; + } else { + return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom; + } + }; + var getOverflow = function (outer, inner) { + return { + x: overflowX(outer, inner), + y: overflowY(outer, inner) + }; + }; + + var getSelectedNode = function (range) { + var startContainer = range.startContainer, startOffset = range.startOffset; + if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) { + return startContainer.childNodes[startOffset]; + } + return null; + }; + var getNode = function (container, offset) { + if (container.nodeType === 1 && container.hasChildNodes()) { + if (offset >= container.childNodes.length) { + offset = container.childNodes.length - 1; + } + container = container.childNodes[offset]; + } + return container; + }; + + var extendingChars = new RegExp('[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a' + '\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0' + '\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08E3-\u0902\u093a\u093c' + '\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3' + '\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc' + '\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57' + '\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56' + '\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44' + '\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9' + '\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97' + '\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074' + '\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5' + '\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18' + '\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1ABE\u1b00-\u1b03\u1b34' + '\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9' + '\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9' + '\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20DD-\u20E0\u20e1\u20E2-\u20E4\u20e5-\u20f0\u2cef-\u2cf1' + '\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\uA670-\uA672\ua674-\ua67d\uA69E-\ua69f\ua6f0-\ua6f1' + '\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc' + '\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1' + '\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\uFE2F\uff9e-\uff9f]'); + var isExtendingChar = function (ch) { + return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch); + }; + + var liftN = function (arr, f) { + var r = []; + for (var i = 0; i < arr.length; i++) { + var x = arr[i]; + if (x.isSome()) { + r.push(x.getOrDie()); + } else { + return Option.none(); + } + } + return Option.some(f.apply(null, r)); + }; + + var slice$3 = [].slice; + var or = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i] = arguments[_i]; + } + var args = slice$3.call(arguments); + return function (x) { + for (var i = 0; i < args.length; i++) { + if (args[i](x)) { + return true; + } + } + return false; + }; + }; + var and = function () { + var x = []; + for (var _i = 0; _i < arguments.length; _i++) { + x[_i] = arguments[_i]; + } + var args = slice$3.call(arguments); + return function (x) { + for (var i = 0; i < args.length; i++) { + if (!args[i](x)) { + return false; + } + } + return true; + }; + }; + var Predicate = { + and: and, + or: or + }; + + var isElement$3 = NodeType.isElement; + var isCaretCandidate$1 = isCaretCandidate; + var isBlock$1 = NodeType.matchStyleValues('display', 'block table'); + var isFloated = NodeType.matchStyleValues('float', 'left right'); + var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated)); + var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap')); + var isText$4 = NodeType.isText; + var isBr$3 = NodeType.isBr; + var nodeIndex = DOMUtils$1.nodeIndex; + var resolveIndex = getNode; + var createRange = function (doc) { + return 'createRange' in doc ? doc.createRange() : DOMUtils$1.DOM.createRng(); + }; + var isWhiteSpace = function (chr) { + return chr && /[\r\n\t ]/.test(chr); + }; + var isRange = function (rng) { + return !!rng.setStart && !!rng.setEnd; + }; + var isHiddenWhiteSpaceRange = function (range) { + var container = range.startContainer; + var offset = range.startOffset; + var text; + if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode) && NodeType.isText(container)) { + text = container.data; + if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) { + return true; + } + } + return false; + }; + var getBrClientRect = function (brNode) { + var doc = brNode.ownerDocument; + var rng = createRange(doc); + var nbsp = doc.createTextNode('\xA0'); + var parentNode = brNode.parentNode; + var clientRect; + parentNode.insertBefore(nbsp, brNode); + rng.setStart(nbsp, 0); + rng.setEnd(nbsp, 1); + clientRect = clone$1(rng.getBoundingClientRect()); + parentNode.removeChild(nbsp); + return clientRect; + }; + var getBoundingClientRectWebKitText = function (rng) { + var sc = rng.startContainer; + var ec = rng.endContainer; + var so = rng.startOffset; + var eo = rng.endOffset; + if (sc === ec && NodeType.isText(ec) && so === 0 && eo === 1) { + var newRng = rng.cloneRange(); + newRng.setEndAfter(ec); + return getBoundingClientRect(newRng); + } else { + return null; + } + }; + var isZeroRect = function (r) { + return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0; + }; + var getBoundingClientRect = function (item) { + var clientRect, clientRects; + clientRects = item.getClientRects(); + if (clientRects.length > 0) { + clientRect = clone$1(clientRects[0]); + } else { + clientRect = clone$1(item.getBoundingClientRect()); + } + if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) { + return getBrClientRect(item); + } + if (isZeroRect(clientRect) && isRange(item)) { + return getBoundingClientRectWebKitText(item); + } + return clientRect; + }; + var collapseAndInflateWidth = function (clientRect, toStart) { + var newClientRect = collapse(clientRect, toStart); + newClientRect.width = 1; + newClientRect.right = newClientRect.left + 1; + return newClientRect; + }; + var getCaretPositionClientRects = function (caretPosition) { + var clientRects = []; + var beforeNode, node; + var addUniqueAndValidRect = function (clientRect) { + if (clientRect.height === 0) { + return; + } + if (clientRects.length > 0) { + if (isEqual(clientRect, clientRects[clientRects.length - 1])) { + return; + } + } + clientRects.push(clientRect); + }; + var addCharacterOffset = function (container, offset) { + var range = createRange(container.ownerDocument); + if (offset < container.data.length) { + if (isExtendingChar(container.data[offset])) { + return clientRects; + } + if (isExtendingChar(container.data[offset - 1])) { + range.setStart(container, offset); + range.setEnd(container, offset + 1); + if (!isHiddenWhiteSpaceRange(range)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false)); + return clientRects; + } + } + } + if (offset > 0) { + range.setStart(container, offset - 1); + range.setEnd(container, offset); + if (!isHiddenWhiteSpaceRange(range)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false)); + } + } + if (offset < container.data.length) { + range.setStart(container, offset); + range.setEnd(container, offset + 1); + if (!isHiddenWhiteSpaceRange(range)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true)); + } + } + }; + if (isText$4(caretPosition.container())) { + addCharacterOffset(caretPosition.container(), caretPosition.offset()); + return clientRects; + } + if (isElement$3(caretPosition.container())) { + if (caretPosition.isAtEnd()) { + node = resolveIndex(caretPosition.container(), caretPosition.offset()); + if (isText$4(node)) { + addCharacterOffset(node, node.data.length); + } + if (isValidElementCaretCandidate(node) && !isBr$3(node)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false)); + } + } else { + node = resolveIndex(caretPosition.container(), caretPosition.offset()); + if (isText$4(node)) { + addCharacterOffset(node, 0); + } + if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false)); + return clientRects; + } + beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1); + if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) { + if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false)); + } + } + if (isValidElementCaretCandidate(node)) { + addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true)); + } + } + } + return clientRects; + }; + function CaretPosition(container, offset, clientRects) { + var isAtStart = function () { + if (isText$4(container)) { + return offset === 0; + } + return offset === 0; + }; + var isAtEnd = function () { + if (isText$4(container)) { + return offset >= container.data.length; + } + return offset >= container.childNodes.length; + }; + var toRange = function () { + var range; + range = createRange(container.ownerDocument); + range.setStart(container, offset); + range.setEnd(container, offset); + return range; + }; + var getClientRects = function () { + if (!clientRects) { + clientRects = getCaretPositionClientRects(CaretPosition(container, offset)); + } + return clientRects; + }; + var isVisible = function () { + return getClientRects().length > 0; + }; + var isEqual = function (caretPosition) { + return caretPosition && container === caretPosition.container() && offset === caretPosition.offset(); + }; + var getNode = function (before) { + return resolveIndex(container, before ? offset - 1 : offset); + }; + return { + container: constant(container), + offset: constant(offset), + toRange: toRange, + getClientRects: getClientRects, + isVisible: isVisible, + isAtStart: isAtStart, + isAtEnd: isAtEnd, + isEqual: isEqual, + getNode: getNode + }; + } + (function (CaretPosition) { + CaretPosition.fromRangeStart = function (range) { + return CaretPosition(range.startContainer, range.startOffset); + }; + CaretPosition.fromRangeEnd = function (range) { + return CaretPosition(range.endContainer, range.endOffset); + }; + CaretPosition.after = function (node) { + return CaretPosition(node.parentNode, nodeIndex(node) + 1); + }; + CaretPosition.before = function (node) { + return CaretPosition(node.parentNode, nodeIndex(node)); + }; + CaretPosition.isAbove = function (pos1, pos2) { + return liftN([ + head(pos2.getClientRects()), + last(pos1.getClientRects()) + ], isAbove).getOr(false); + }; + CaretPosition.isBelow = function (pos1, pos2) { + return liftN([ + last(pos2.getClientRects()), + head(pos1.getClientRects()) + ], isBelow).getOr(false); + }; + CaretPosition.isAtStart = function (pos) { + return pos ? pos.isAtStart() : false; + }; + CaretPosition.isAtEnd = function (pos) { + return pos ? pos.isAtEnd() : false; + }; + CaretPosition.isTextPosition = function (pos) { + return pos ? NodeType.isText(pos.container()) : false; + }; + CaretPosition.isElementPosition = function (pos) { + return CaretPosition.isTextPosition(pos) === false; + }; + }(CaretPosition || (CaretPosition = {}))); + var CaretPosition$1 = CaretPosition; + + var isText$5 = NodeType.isText; + var isBogus$1 = NodeType.isBogus; + var nodeIndex$1 = DOMUtils$1.nodeIndex; + var normalizedParent = function (node) { + var parentNode = node.parentNode; + if (isBogus$1(parentNode)) { + return normalizedParent(parentNode); + } + return parentNode; + }; + var getChildNodes = function (node) { + if (!node) { + return []; + } + return ArrUtils.reduce(node.childNodes, function (result, node) { + if (isBogus$1(node) && node.nodeName !== 'BR') { + result = result.concat(getChildNodes(node)); + } else { + result.push(node); + } + return result; + }, []); + }; + var normalizedTextOffset = function (node, offset) { + while (node = node.previousSibling) { + if (!isText$5(node)) { + break; + } + offset += node.data.length; + } + return offset; + }; + var equal$1 = function (a) { + return function (b) { + return a === b; + }; + }; + var normalizedNodeIndex = function (node) { + var nodes, index, numTextFragments; + nodes = getChildNodes(normalizedParent(node)); + index = ArrUtils.findIndex(nodes, equal$1(node), node); + nodes = nodes.slice(0, index + 1); + numTextFragments = ArrUtils.reduce(nodes, function (result, node, i) { + if (isText$5(node) && isText$5(nodes[i - 1])) { + result++; + } + return result; + }, 0); + nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(node.nodeName)); + index = ArrUtils.findIndex(nodes, equal$1(node), node); + return index - numTextFragments; + }; + var createPathItem = function (node) { + var name; + if (isText$5(node)) { + name = 'text()'; + } else { + name = node.nodeName.toLowerCase(); + } + return name + '[' + normalizedNodeIndex(node) + ']'; + }; + var parentsUntil = function (root, node, predicate) { + var parents = []; + for (node = node.parentNode; node !== root; node = node.parentNode) { + if (predicate && predicate(node)) { + break; + } + parents.push(node); + } + return parents; + }; + var create$2 = function (root, caretPosition) { + var container, offset, path = [], outputOffset, childNodes, parents; + container = caretPosition.container(); + offset = caretPosition.offset(); + if (isText$5(container)) { + outputOffset = normalizedTextOffset(container, offset); + } else { + childNodes = container.childNodes; + if (offset >= childNodes.length) { + outputOffset = 'after'; + offset = childNodes.length - 1; + } else { + outputOffset = 'before'; + } + container = childNodes[offset]; + } + path.push(createPathItem(container)); + parents = parentsUntil(root, container); + parents = ArrUtils.filter(parents, not(NodeType.isBogus)); + path = path.concat(ArrUtils.map(parents, function (node) { + return createPathItem(node); + })); + return path.reverse().join('/') + ',' + outputOffset; + }; + var resolvePathItem = function (node, name, index) { + var nodes = getChildNodes(node); + nodes = ArrUtils.filter(nodes, function (node, index) { + return !isText$5(node) || !isText$5(nodes[index - 1]); + }); + nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(name)); + return nodes[index]; + }; + var findTextPosition = function (container, offset) { + var node = container, targetOffset = 0, dataLen; + while (isText$5(node)) { + dataLen = node.data.length; + if (offset >= targetOffset && offset <= targetOffset + dataLen) { + container = node; + offset = offset - targetOffset; + break; + } + if (!isText$5(node.nextSibling)) { + container = node; + offset = dataLen; + break; + } + targetOffset += dataLen; + node = node.nextSibling; + } + if (isText$5(container) && offset > container.data.length) { + offset = container.data.length; + } + return CaretPosition$1(container, offset); + }; + var resolve$2 = function (root, path) { + var parts, container, offset; + if (!path) { + return null; + } + parts = path.split(','); + path = parts[0].split('/'); + offset = parts.length > 1 ? parts[1] : 'before'; + container = ArrUtils.reduce(path, function (result, value) { + value = /([\w\-\(\)]+)\[([0-9]+)\]/.exec(value); + if (!value) { + return null; + } + if (value[1] === 'text()') { + value[1] = '#text'; + } + return resolvePathItem(result, value[1], parseInt(value[2], 10)); + }, root); + if (!container) { + return null; + } + if (!isText$5(container)) { + if (offset === 'after') { + offset = nodeIndex$1(container) + 1; + } else { + offset = nodeIndex$1(container); + } + return CaretPosition$1(container.parentNode, offset); + } + return findTextPosition(container, parseInt(offset, 10)); + }; + + var trimEmptyTextNode = function (dom, node) { + if (NodeType.isText(node) && node.data.length === 0) { + dom.remove(node); + } + }; + var insertNode = function (dom, rng, node) { + rng.insertNode(node); + trimEmptyTextNode(dom, node.previousSibling); + trimEmptyTextNode(dom, node.nextSibling); + }; + var insertFragment = function (dom, rng, frag) { + var firstChild = Option.from(frag.firstChild); + var lastChild = Option.from(frag.lastChild); + rng.insertNode(frag); + firstChild.each(function (child) { + return trimEmptyTextNode(dom, child.previousSibling); + }); + lastChild.each(function (child) { + return trimEmptyTextNode(dom, child.nextSibling); + }); + }; + var rangeInsertNode = function (dom, rng, node) { + if (NodeType.isDocumentFragment(node)) { + insertFragment(dom, rng, node); + } else { + insertNode(dom, rng, node); + } + }; + + var isContentEditableFalse$2 = NodeType.isContentEditableFalse; + var getNormalizedTextOffset = function (trim, container, offset) { + var node, trimmedOffset; + trimmedOffset = trim(container.data.slice(0, offset)).length; + for (node = container.previousSibling; node && NodeType.isText(node); node = node.previousSibling) { + trimmedOffset += trim(node.data).length; + } + return trimmedOffset; + }; + var getPoint = function (dom, trim, normalized, rng, start) { + var container = rng[start ? 'startContainer' : 'endContainer']; + var offset = rng[start ? 'startOffset' : 'endOffset']; + var point = []; + var childNodes, after = 0; + var root = dom.getRoot(); + if (NodeType.isText(container)) { + point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset); + } else { + childNodes = container.childNodes; + if (offset >= childNodes.length && childNodes.length) { + after = 1; + offset = Math.max(0, childNodes.length - 1); + } + point.push(dom.nodeIndex(childNodes[offset], normalized) + after); + } + for (; container && container !== root; container = container.parentNode) { + point.push(dom.nodeIndex(container, normalized)); + } + return point; + }; + var getLocation = function (trim, selection, normalized, rng) { + var dom = selection.dom, bookmark = {}; + bookmark.start = getPoint(dom, trim, normalized, rng, true); + if (!selection.isCollapsed()) { + bookmark.end = getPoint(dom, trim, normalized, rng, false); + } + return bookmark; + }; + var findIndex$2 = function (dom, name, element) { + var count = 0; + Tools.each(dom.select(name), function (node) { + if (node.getAttribute('data-mce-bogus') === 'all') { + return; + } + if (node === element) { + return false; + } + count++; + }); + return count; + }; + var moveEndPoint = function (rng, start) { + var container, offset, childNodes; + var prefix = start ? 'start' : 'end'; + container = rng[prefix + 'Container']; + offset = rng[prefix + 'Offset']; + if (NodeType.isElement(container) && container.nodeName === 'TR') { + childNodes = container.childNodes; + container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)]; + if (container) { + offset = start ? 0 : container.childNodes.length; + rng['set' + (start ? 'Start' : 'End')](container, offset); + } + } + }; + var normalizeTableCellSelection = function (rng) { + moveEndPoint(rng, true); + moveEndPoint(rng, false); + return rng; + }; + var findSibling = function (node, offset) { + var sibling; + if (NodeType.isElement(node)) { + node = getNode(node, offset); + if (isContentEditableFalse$2(node)) { + return node; + } + } + if (isCaretContainer(node)) { + if (NodeType.isText(node) && isCaretContainerBlock(node)) { + node = node.parentNode; + } + sibling = node.previousSibling; + if (isContentEditableFalse$2(sibling)) { + return sibling; + } + sibling = node.nextSibling; + if (isContentEditableFalse$2(sibling)) { + return sibling; + } + } + }; + var findAdjacentContentEditableFalseElm = function (rng) { + return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset); + }; + var getOffsetBookmark = function (trim, normalized, selection) { + var element = selection.getNode(); + var name = element ? element.nodeName : null; + var rng = selection.getRng(); + if (isContentEditableFalse$2(element) || name === 'IMG') { + return { + name: name, + index: findIndex$2(selection.dom, name, element) + }; + } + var sibling = findAdjacentContentEditableFalseElm(rng); + if (sibling) { + name = sibling.tagName; + return { + name: name, + index: findIndex$2(selection.dom, name, sibling) + }; + } + return getLocation(trim, selection, normalized, rng); + }; + var getCaretBookmark = function (selection) { + var rng = selection.getRng(); + return { + start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)), + end: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeEnd(rng)) + }; + }; + var getRangeBookmark = function (selection) { + return { rng: selection.getRng() }; + }; + var createBookmarkSpan = function (dom, id, filled) { + var args = { + 'data-mce-type': 'bookmark', + 'id': id, + 'style': 'overflow:hidden;line-height:0px' + }; + return filled ? dom.create('span', args, '') : dom.create('span', args); + }; + var getPersistentBookmark = function (selection, filled) { + var dom = selection.dom; + var rng = selection.getRng(); + var id = dom.uniqueId(); + var collapsed = selection.isCollapsed(); + var element = selection.getNode(); + var name = element.nodeName; + if (name === 'IMG') { + return { + name: name, + index: findIndex$2(dom, name, element) + }; + } + var rng2 = normalizeTableCellSelection(rng.cloneRange()); + if (!collapsed) { + rng2.collapse(false); + var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled); + rangeInsertNode(dom, rng2, endBookmarkNode); + } + rng = normalizeTableCellSelection(rng); + rng.collapse(true); + var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled); + rangeInsertNode(dom, rng, startBookmarkNode); + selection.moveToBookmark({ + id: id, + keep: 1 + }); + return { id: id }; + }; + var getBookmark = function (selection, type, normalized) { + if (type === 2) { + return getOffsetBookmark(Zwsp.trim, normalized, selection); + } else if (type === 3) { + return getCaretBookmark(selection); + } else if (type) { + return getRangeBookmark(selection); + } else { + return getPersistentBookmark(selection, false); + } + }; + var GetBookmark = { + getBookmark: getBookmark, + getUndoBookmark: curry(getOffsetBookmark, identity, true), + getPersistentBookmark: getPersistentBookmark + }; + + var CARET_ID = '_mce_caret'; + var isCaretNode = function (node) { + return NodeType.isElement(node) && node.id === CARET_ID; + }; + var getParentCaretContainer = function (body, node) { + while (node && node !== body) { + if (node.id === CARET_ID) { + return node; + } + node = node.parentNode; + } + return null; + }; + + var isElement$4 = NodeType.isElement; + var isText$6 = NodeType.isText; + var removeNode = function (node) { + var parentNode = node.parentNode; + if (parentNode) { + parentNode.removeChild(node); + } + }; + var getNodeValue = function (node) { + try { + return node.nodeValue; + } catch (ex) { + return ''; + } + }; + var setNodeValue = function (node, text) { + if (text.length === 0) { + removeNode(node); + } else { + node.nodeValue = text; + } + }; + var trimCount = function (text) { + var trimmedText = Zwsp.trim(text); + return { + count: text.length - trimmedText.length, + text: trimmedText + }; + }; + var removeUnchanged = function (caretContainer, pos) { + remove$5(caretContainer); + return pos; + }; + var removeTextAndReposition = function (caretContainer, pos) { + var before = trimCount(caretContainer.data.substr(0, pos.offset())); + var after = trimCount(caretContainer.data.substr(pos.offset())); + var text = before.text + after.text; + if (text.length > 0) { + setNodeValue(caretContainer, text); + return CaretPosition$1(caretContainer, pos.offset() - before.count); + } else { + return pos; + } + }; + var removeElementAndReposition = function (caretContainer, pos) { + var parentNode = pos.container(); + var newPosition = indexOf(from$1(parentNode.childNodes), caretContainer).map(function (index) { + return index < pos.offset() ? CaretPosition$1(parentNode, pos.offset() - 1) : pos; + }).getOr(pos); + remove$5(caretContainer); + return newPosition; + }; + var removeTextCaretContainer = function (caretContainer, pos) { + return isText$6(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos); + }; + var removeElementCaretContainer = function (caretContainer, pos) { + return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos); + }; + var removeAndReposition = function (container, pos) { + return CaretPosition$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos); + }; + var remove$5 = function (caretContainerNode) { + if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) { + if (hasContent(caretContainerNode)) { + caretContainerNode.removeAttribute('data-mce-caret'); + } else { + removeNode(caretContainerNode); + } + } + if (isText$6(caretContainerNode)) { + var text = Zwsp.trim(getNodeValue(caretContainerNode)); + setNodeValue(caretContainerNode, text); + } + }; + var CaretContainerRemove = { + removeAndReposition: removeAndReposition, + remove: remove$5 + }; + + var browser$2 = PlatformDetection$1.detect().browser; + var isContentEditableFalse$3 = NodeType.isContentEditableFalse; + var isTableCell$1 = function (node) { + return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName); + }; + var getAbsoluteClientRect = function (root, element, before) { + var clientRect = collapse(element.getBoundingClientRect(), before); + var docElm, scrollX, scrollY, margin, rootRect; + if (root.tagName === 'BODY') { + docElm = root.ownerDocument.documentElement; + scrollX = root.scrollLeft || docElm.scrollLeft; + scrollY = root.scrollTop || docElm.scrollTop; + } else { + rootRect = root.getBoundingClientRect(); + scrollX = root.scrollLeft - rootRect.left; + scrollY = root.scrollTop - rootRect.top; + } + clientRect.left += scrollX; + clientRect.right += scrollX; + clientRect.top += scrollY; + clientRect.bottom += scrollY; + clientRect.width = 1; + margin = element.offsetWidth - element.clientWidth; + if (margin > 0) { + if (before) { + margin *= -1; + } + clientRect.left += margin; + clientRect.right += margin; + } + return clientRect; + }; + var trimInlineCaretContainers = function (root) { + var contentEditableFalseNodes, node, sibling, i, data; + contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root); + for (i = 0; i < contentEditableFalseNodes.length; i++) { + node = contentEditableFalseNodes[i]; + sibling = node.previousSibling; + if (endsWithCaretContainer(sibling)) { + data = sibling.data; + if (data.length === 1) { + sibling.parentNode.removeChild(sibling); + } else { + sibling.deleteData(data.length - 1, 1); + } + } + sibling = node.nextSibling; + if (startsWithCaretContainer(sibling)) { + data = sibling.data; + if (data.length === 1) { + sibling.parentNode.removeChild(sibling); + } else { + sibling.deleteData(0, 1); + } + } + } + }; + var FakeCaret = function (root, isBlock, hasFocus) { + var lastVisualCaret = Cell(Option.none()); + var cursorInterval, caretContainerNode; + var show = function (before, element) { + var clientRect, rng; + hide(); + if (isTableCell$1(element)) { + return null; + } + if (isBlock(element)) { + caretContainerNode = insertBlock('p', element, before); + clientRect = getAbsoluteClientRect(root, element, before); + DomQuery(caretContainerNode).css('top', clientRect.top); + var caret = DomQuery('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(clientRect).appendTo(root)[0]; + lastVisualCaret.set(Option.some({ + caret: caret, + element: element, + before: before + })); + lastVisualCaret.get().each(function (caretState) { + if (before) { + DomQuery(caretState.caret).addClass('mce-visual-caret-before'); + } + }); + startBlink(); + rng = element.ownerDocument.createRange(); + rng.setStart(caretContainerNode, 0); + rng.setEnd(caretContainerNode, 0); + } else { + caretContainerNode = insertInline(element, before); + rng = element.ownerDocument.createRange(); + if (isContentEditableFalse$3(caretContainerNode.nextSibling)) { + rng.setStart(caretContainerNode, 0); + rng.setEnd(caretContainerNode, 0); + } else { + rng.setStart(caretContainerNode, 1); + rng.setEnd(caretContainerNode, 1); + } + return rng; + } + return rng; + }; + var hide = function () { + trimInlineCaretContainers(root); + if (caretContainerNode) { + CaretContainerRemove.remove(caretContainerNode); + caretContainerNode = null; + } + lastVisualCaret.get().each(function (caretState) { + DomQuery(caretState.caret).remove(); + lastVisualCaret.set(Option.none()); + }); + Delay.clearInterval(cursorInterval); + }; + var startBlink = function () { + cursorInterval = Delay.setInterval(function () { + if (hasFocus()) { + DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden'); + } else { + DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden'); + } + }, 500); + }; + var reposition = function () { + lastVisualCaret.get().each(function (caretState) { + var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before); + DomQuery(caretState.caret).css(__assign({}, clientRect)); + }); + }; + var destroy = function () { + return Delay.clearInterval(cursorInterval); + }; + var getCss = function () { + return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}'; + }; + return { + show: show, + hide: hide, + getCss: getCss, + reposition: reposition, + destroy: destroy + }; + }; + var isFakeCaretTableBrowser = function () { + return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox(); + }; + var isFakeCaretTarget = function (node) { + return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser(); + }; + + var isContentEditableFalse$4 = NodeType.isContentEditableFalse; + var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item'); + var isCaretContainer$2 = isCaretContainer; + var isCaretContainerBlock$1 = isCaretContainerBlock; + var isElement$5 = NodeType.isElement; + var isCaretCandidate$2 = isCaretCandidate; + var isForwards = function (direction) { + return direction > 0; + }; + var isBackwards = function (direction) { + return direction < 0; + }; + var skipCaretContainers = function (walk, shallow) { + var node; + while (node = walk(shallow)) { + if (!isCaretContainerBlock$1(node)) { + return node; + } + } + return null; + }; + var findNode = function (node, direction, predicateFn, rootNode, shallow) { + var walker = new TreeWalker(node, rootNode); + if (isBackwards(direction)) { + if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) { + node = skipCaretContainers(walker.prev, true); + if (predicateFn(node)) { + return node; + } + } + while (node = skipCaretContainers(walker.prev, shallow)) { + if (predicateFn(node)) { + return node; + } + } + } + if (isForwards(direction)) { + if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) { + node = skipCaretContainers(walker.next, true); + if (predicateFn(node)) { + return node; + } + } + while (node = skipCaretContainers(walker.next, shallow)) { + if (predicateFn(node)) { + return node; + } + } + } + return null; + }; + var getParentBlock = function (node, rootNode) { + while (node && node !== rootNode) { + if (isBlockLike(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) { + return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode); + }; + var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) { + var container, offset; + if (!caretPosition) { + return null; + } + container = caretPosition.container(); + offset = caretPosition.offset(); + if (!isElement$5(container)) { + return null; + } + return container.childNodes[offset + relativeOffset]; + }; + var beforeAfter = function (before, node) { + var range = node.ownerDocument.createRange(); + if (before) { + range.setStartBefore(node); + range.setEndBefore(node); + } else { + range.setStartAfter(node); + range.setEndAfter(node); + } + return range; + }; + var isNodesInSameBlock = function (root, node1, node2) { + return getParentBlock(node1, root) === getParentBlock(node2, root); + }; + var lean = function (left, root, node) { + var sibling, siblingName; + if (left) { + siblingName = 'previousSibling'; + } else { + siblingName = 'nextSibling'; + } + while (node && node !== root) { + sibling = node[siblingName]; + if (isCaretContainer$2(sibling)) { + sibling = sibling[siblingName]; + } + if (isContentEditableFalse$4(sibling)) { + if (isNodesInSameBlock(root, sibling, node)) { + return sibling; + } + break; + } + if (isCaretCandidate$2(sibling)) { + break; + } + node = node.parentNode; + } + return null; + }; + var before$2 = curry(beforeAfter, true); + var after$1 = curry(beforeAfter, false); + var normalizeRange = function (direction, root, range) { + var node, container, offset, location; + var leanLeft = curry(lean, true, root); + var leanRight = curry(lean, false, root); + container = range.startContainer; + offset = range.startOffset; + if (isCaretContainerBlock(container)) { + if (!isElement$5(container)) { + container = container.parentNode; + } + location = container.getAttribute('data-mce-caret'); + if (location === 'before') { + node = container.nextSibling; + if (isFakeCaretTarget(node)) { + return before$2(node); + } + } + if (location === 'after') { + node = container.previousSibling; + if (isFakeCaretTarget(node)) { + return after$1(node); + } + } + } + if (!range.collapsed) { + return range; + } + if (NodeType.isText(container)) { + if (isCaretContainer$2(container)) { + if (direction === 1) { + node = leanRight(container); + if (node) { + return before$2(node); + } + node = leanLeft(container); + if (node) { + return after$1(node); + } + } + if (direction === -1) { + node = leanLeft(container); + if (node) { + return after$1(node); + } + node = leanRight(container); + if (node) { + return before$2(node); + } + } + return range; + } + if (endsWithCaretContainer(container) && offset >= container.data.length - 1) { + if (direction === 1) { + node = leanRight(container); + if (node) { + return before$2(node); + } + } + return range; + } + if (startsWithCaretContainer(container) && offset <= 1) { + if (direction === -1) { + node = leanLeft(container); + if (node) { + return after$1(node); + } + } + return range; + } + if (offset === container.data.length) { + node = leanRight(container); + if (node) { + return before$2(node); + } + return range; + } + if (offset === 0) { + node = leanLeft(container); + if (node) { + return after$1(node); + } + return range; + } + } + return range; + }; + var getRelativeCefElm = function (forward, caretPosition) { + return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$4); + }; + var getNormalizedRangeEndPoint = function (direction, root, range) { + var normalizedRange = normalizeRange(direction, root, range); + if (direction === -1) { + return CaretPosition.fromRangeStart(normalizedRange); + } + return CaretPosition.fromRangeEnd(normalizedRange); + }; + var getElementFromPosition = function (pos) { + return Option.from(pos.getNode()).map(Element.fromDom); + }; + var getElementFromPrevPosition = function (pos) { + return Option.from(pos.getNode(true)).map(Element.fromDom); + }; + var getVisualCaretPosition = function (walkFn, caretPosition) { + while (caretPosition = walkFn(caretPosition)) { + if (caretPosition.isVisible()) { + return caretPosition; + } + } + return caretPosition; + }; + var isMoveInsideSameBlock = function (from, to) { + var inSameBlock = isInSameBlock(from, to); + if (!inSameBlock && NodeType.isBr(from.getNode())) { + return true; + } + return inSameBlock; + }; + + var HDirection; + (function (HDirection) { + HDirection[HDirection['Backwards'] = -1] = 'Backwards'; + HDirection[HDirection['Forwards'] = 1] = 'Forwards'; + }(HDirection || (HDirection = {}))); + var isContentEditableFalse$5 = NodeType.isContentEditableFalse; + var isText$7 = NodeType.isText; + var isElement$6 = NodeType.isElement; + var isBr$4 = NodeType.isBr; + var isCaretCandidate$3 = isCaretCandidate; + var isAtomic$1 = isAtomic; + var isEditableCaretCandidate$1 = isEditableCaretCandidate; + var getParents = function (node, root) { + var parents = []; + while (node && node !== root) { + parents.push(node); + node = node.parentNode; + } + return parents; + }; + var nodeAtIndex = function (container, offset) { + if (container.hasChildNodes() && offset < container.childNodes.length) { + return container.childNodes[offset]; + } + return null; + }; + var getCaretCandidatePosition = function (direction, node) { + if (isForwards(direction)) { + if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) { + return CaretPosition$1.before(node); + } + if (isText$7(node)) { + return CaretPosition$1(node, 0); + } + } + if (isBackwards(direction)) { + if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) { + return CaretPosition$1.after(node); + } + if (isText$7(node)) { + return CaretPosition$1(node, node.data.length); + } + } + if (isBackwards(direction)) { + if (isBr$4(node)) { + return CaretPosition$1.before(node); + } + return CaretPosition$1.after(node); + } + return CaretPosition$1.before(node); + }; + var moveForwardFromBr = function (root, nextNode) { + var nextSibling = nextNode.nextSibling; + if (nextSibling && isCaretCandidate$3(nextSibling)) { + if (isText$7(nextSibling)) { + return CaretPosition$1(nextSibling, 0); + } else { + return CaretPosition$1.before(nextSibling); + } + } else { + return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root); + } + }; + var findCaretPosition = function (direction, startPos, root) { + var node, nextNode, innerNode; + var rootContentEditableFalseElm, caretPosition; + if (!isElement$6(root) || !startPos) { + return null; + } + if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) { + caretPosition = CaretPosition$1.after(root.lastChild); + if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) { + return isBr$4(root.lastChild) ? CaretPosition$1.before(root.lastChild) : caretPosition; + } + } else { + caretPosition = startPos; + } + var container = caretPosition.container(); + var offset = caretPosition.offset(); + if (isText$7(container)) { + if (isBackwards(direction) && offset > 0) { + return CaretPosition$1(container, --offset); + } + if (isForwards(direction) && offset < container.length) { + return CaretPosition$1(container, ++offset); + } + node = container; + } else { + if (isBackwards(direction) && offset > 0) { + nextNode = nodeAtIndex(container, offset - 1); + if (isCaretCandidate$3(nextNode)) { + if (!isAtomic$1(nextNode)) { + innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode); + if (innerNode) { + if (isText$7(innerNode)) { + return CaretPosition$1(innerNode, innerNode.data.length); + } + return CaretPosition$1.after(innerNode); + } + } + if (isText$7(nextNode)) { + return CaretPosition$1(nextNode, nextNode.data.length); + } + return CaretPosition$1.before(nextNode); + } + } + if (isForwards(direction) && offset < container.childNodes.length) { + nextNode = nodeAtIndex(container, offset); + if (isCaretCandidate$3(nextNode)) { + if (isBr$4(nextNode)) { + return moveForwardFromBr(root, nextNode); + } + if (!isAtomic$1(nextNode)) { + innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode); + if (innerNode) { + if (isText$7(innerNode)) { + return CaretPosition$1(innerNode, 0); + } + return CaretPosition$1.before(innerNode); + } + } + if (isText$7(nextNode)) { + return CaretPosition$1(nextNode, 0); + } + return CaretPosition$1.after(nextNode); + } + } + node = nextNode ? nextNode : caretPosition.getNode(); + } + if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) { + node = findNode(node, direction, constant(true), root, true); + if (isEditableCaretCandidate$1(node, root)) { + return getCaretCandidatePosition(direction, node); + } + } + nextNode = findNode(node, direction, isEditableCaretCandidate$1, root); + rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5)); + if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) { + if (isForwards(direction)) { + caretPosition = CaretPosition$1.after(rootContentEditableFalseElm); + } else { + caretPosition = CaretPosition$1.before(rootContentEditableFalseElm); + } + return caretPosition; + } + if (nextNode) { + return getCaretCandidatePosition(direction, nextNode); + } + return null; + }; + var CaretWalker = function (root) { + return { + next: function (caretPosition) { + return findCaretPosition(HDirection.Forwards, caretPosition, root); + }, + prev: function (caretPosition) { + return findCaretPosition(HDirection.Backwards, caretPosition, root); + } + }; + }; + + var walkToPositionIn = function (forward, root, start) { + var position = forward ? CaretPosition$1.before(start) : CaretPosition$1.after(start); + return fromPosition(forward, root, position); + }; + var afterElement = function (node) { + return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node); + }; + var isBeforeOrStart = function (position) { + if (CaretPosition$1.isTextPosition(position)) { + return position.offset() === 0; + } else { + return isCaretCandidate(position.getNode()); + } + }; + var isAfterOrEnd = function (position) { + if (CaretPosition$1.isTextPosition(position)) { + var container = position.container(); + return position.offset() === container.data.length; + } else { + return isCaretCandidate(position.getNode(true)); + } + }; + var isBeforeAfterSameElement = function (from, to) { + return !CaretPosition$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true); + }; + var isAtBr = function (position) { + return !CaretPosition$1.isTextPosition(position) && NodeType.isBr(position.getNode()); + }; + var shouldSkipPosition = function (forward, from, to) { + if (forward) { + return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to); + } else { + return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to); + } + }; + var fromPosition = function (forward, root, pos) { + var walker = CaretWalker(root); + return Option.from(forward ? walker.next(pos) : walker.prev(pos)); + }; + var navigate = function (forward, root, from) { + return fromPosition(forward, root, from).bind(function (to) { + if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) { + return fromPosition(forward, root, to); + } else { + return Option.some(to); + } + }); + }; + var navigateIgnore = function (forward, root, from, ignoreFilter) { + return navigate(forward, root, from).bind(function (pos) { + return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Option.some(pos); + }); + }; + var positionIn = function (forward, element) { + var startNode = forward ? element.firstChild : element.lastChild; + if (NodeType.isText(startNode)) { + return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length)); + } else if (startNode) { + if (isCaretCandidate(startNode)) { + return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode)); + } else { + return walkToPositionIn(forward, element, startNode); + } + } else { + return Option.none(); + } + }; + var nextPosition = curry(fromPosition, true); + var prevPosition = curry(fromPosition, false); + var CaretFinder = { + fromPosition: fromPosition, + nextPosition: nextPosition, + prevPosition: prevPosition, + navigate: navigate, + navigateIgnore: navigateIgnore, + positionIn: positionIn, + firstPositionIn: curry(positionIn, true), + lastPositionIn: curry(positionIn, false) + }; + + var isStringPathBookmark = function (bookmark) { + return typeof bookmark.start === 'string'; + }; + var isRangeBookmark = function (bookmark) { + return bookmark.hasOwnProperty('rng'); + }; + var isIdBookmark = function (bookmark) { + return bookmark.hasOwnProperty('id'); + }; + var isIndexBookmark = function (bookmark) { + return bookmark.hasOwnProperty('name'); + }; + var isPathBookmark = function (bookmark) { + return Tools.isArray(bookmark.start); + }; + + var addBogus = function (dom, node) { + if (dom.isBlock(node) && !node.innerHTML && !Env.ie) { + node.innerHTML = '<br data-mce-bogus="1" />'; + } + return node; + }; + var resolveCaretPositionBookmark = function (dom, bookmark) { + var rng, pos; + rng = dom.createRng(); + pos = resolve$2(dom.getRoot(), bookmark.start); + rng.setStart(pos.container(), pos.offset()); + pos = resolve$2(dom.getRoot(), bookmark.end); + rng.setEnd(pos.container(), pos.offset()); + return rng; + }; + var insertZwsp = function (node, rng) { + var textNode = node.ownerDocument.createTextNode(Zwsp.ZWSP); + node.appendChild(textNode); + rng.setStart(textNode, 0); + rng.setEnd(textNode, 0); + }; + var isEmpty = function (node) { + return node.hasChildNodes() === false; + }; + var tryFindRangePosition = function (node, rng) { + return CaretFinder.lastPositionIn(node).fold(function () { + return false; + }, function (pos) { + rng.setStart(pos.container(), pos.offset()); + rng.setEnd(pos.container(), pos.offset()); + return true; + }); + }; + var padEmptyCaretContainer = function (root, node, rng) { + if (isEmpty(node) && getParentCaretContainer(root, node)) { + insertZwsp(node, rng); + return true; + } else { + return false; + } + }; + var setEndPoint = function (dom, start, bookmark, rng) { + var point = bookmark[start ? 'start' : 'end']; + var i, node, offset, children; + var root = dom.getRoot(); + if (point) { + offset = point[0]; + for (node = root, i = point.length - 1; i >= 1; i--) { + children = node.childNodes; + if (padEmptyCaretContainer(root, node, rng)) { + return true; + } + if (point[i] > children.length - 1) { + if (padEmptyCaretContainer(root, node, rng)) { + return true; + } + return tryFindRangePosition(node, rng); + } + node = children[point[i]]; + } + if (node.nodeType === 3) { + offset = Math.min(point[0], node.nodeValue.length); + } + if (node.nodeType === 1) { + offset = Math.min(point[0], node.childNodes.length); + } + if (start) { + rng.setStart(node, offset); + } else { + rng.setEnd(node, offset); + } + } + return true; + }; + var isValidTextNode = function (node) { + return NodeType.isText(node) && node.data.length > 0; + }; + var restoreEndPoint = function (dom, suffix, bookmark) { + var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev; + var keep = bookmark.keep; + var container, offset; + if (marker) { + node = marker.parentNode; + if (suffix === 'start') { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + if (marker.hasChildNodes()) { + node = marker.firstChild; + idx = 1; + } else if (isValidTextNode(marker.nextSibling)) { + node = marker.nextSibling; + idx = 0; + } else if (isValidTextNode(marker.previousSibling)) { + node = marker.previousSibling; + idx = marker.previousSibling.data.length; + } else { + node = marker.parentNode; + idx = dom.nodeIndex(marker) + 1; + } + } + container = node; + offset = idx; + } else { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + if (marker.hasChildNodes()) { + node = marker.firstChild; + idx = 1; + } else if (isValidTextNode(marker.previousSibling)) { + node = marker.previousSibling; + idx = marker.previousSibling.data.length; + } else { + node = marker.parentNode; + idx = dom.nodeIndex(marker); + } + } + container = node; + offset = idx; + } + if (!keep) { + prev = marker.previousSibling; + next = marker.nextSibling; + Tools.each(Tools.grep(marker.childNodes), function (node) { + if (NodeType.isText(node)) { + node.nodeValue = node.nodeValue.replace(/\uFEFF/g, ''); + } + }); + while (marker = dom.get(bookmark.id + '_' + suffix)) { + dom.remove(marker, true); + } + if (prev && next && prev.nodeType === next.nodeType && NodeType.isText(prev) && !Env.opera) { + idx = prev.nodeValue.length; + prev.appendData(next.nodeValue); + dom.remove(next); + if (suffix === 'start') { + container = prev; + offset = idx; + } else { + container = prev; + offset = idx; + } + } + } + return Option.some(CaretPosition$1(container, offset)); + } else { + return Option.none(); + } + }; + var alt = function (o1, o2) { + return o1.isSome() ? o1 : o2; + }; + var resolvePaths = function (dom, bookmark) { + var rng = dom.createRng(); + if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) { + return Option.some(rng); + } else { + return Option.none(); + } + }; + var resolveId = function (dom, bookmark) { + var startPos = restoreEndPoint(dom, 'start', bookmark); + var endPos = restoreEndPoint(dom, 'end', bookmark); + return liftN([ + startPos, + alt(endPos, startPos) + ], function (spos, epos) { + var rng = dom.createRng(); + rng.setStart(addBogus(dom, spos.container()), spos.offset()); + rng.setEnd(addBogus(dom, epos.container()), epos.offset()); + return rng; + }); + }; + var resolveIndex$1 = function (dom, bookmark) { + return Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) { + var rng = dom.createRng(); + rng.selectNode(elm); + return rng; + }); + }; + var resolve$3 = function (selection, bookmark) { + var dom = selection.dom; + if (bookmark) { + if (isPathBookmark(bookmark)) { + return resolvePaths(dom, bookmark); + } else if (isStringPathBookmark(bookmark)) { + return Option.some(resolveCaretPositionBookmark(dom, bookmark)); + } else if (isIdBookmark(bookmark)) { + return resolveId(dom, bookmark); + } else if (isIndexBookmark(bookmark)) { + return resolveIndex$1(dom, bookmark); + } else if (isRangeBookmark(bookmark)) { + return Option.some(bookmark.rng); + } + } + return Option.none(); + }; + var ResolveBookmark = { resolve: resolve$3 }; + + var getBookmark$1 = function (selection, type, normalized) { + return GetBookmark.getBookmark(selection, type, normalized); + }; + var moveToBookmark = function (selection, bookmark) { + ResolveBookmark.resolve(selection, bookmark).each(function (rng) { + selection.setRng(rng); + }); + }; + var isBookmarkNode$1 = function (node) { + return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark'; + }; + var Bookmarks = { + getBookmark: getBookmark$1, + moveToBookmark: moveToBookmark, + isBookmarkNode: isBookmarkNode$1 + }; + + var isInlineBlock = function (node) { + return node && /^(IMG)$/.test(node.nodeName); + }; + var moveStart = function (dom, selection, rng) { + var offset = rng.startOffset; + var container = rng.startContainer, walker, node, nodes; + if (rng.startContainer === rng.endContainer) { + if (isInlineBlock(rng.startContainer.childNodes[rng.startOffset])) { + return; + } + } + if (container.nodeType === 1) { + nodes = container.childNodes; + if (offset < nodes.length) { + container = nodes[offset]; + walker = new TreeWalker(container, dom.getParent(container, dom.isBlock)); + } else { + container = nodes[nodes.length - 1]; + walker = new TreeWalker(container, dom.getParent(container, dom.isBlock)); + walker.next(true); + } + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType === 3 && !isWhiteSpaceNode(node)) { + rng.setStart(node, 0); + selection.setRng(rng); + return; + } + } + } + }; + var getNonWhiteSpaceSibling = function (node, next, inc) { + if (node) { + next = next ? 'nextSibling' : 'previousSibling'; + for (node = inc ? node : node[next]; node; node = node[next]) { + if (node.nodeType === 1 || !isWhiteSpaceNode(node)) { + return node; + } + } + } + }; + var isTextBlock$1 = function (editor, name) { + if (name.nodeType) { + name = name.nodeName; + } + return !!editor.schema.getTextBlockElements()[name.toLowerCase()]; + }; + var isValid = function (ed, parent, child) { + return ed.schema.isValidChild(parent, child); + }; + var isWhiteSpaceNode = function (node) { + return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue); + }; + var replaceVars = function (value, vars) { + if (typeof value !== 'string') { + value = value(vars); + } else if (vars) { + value = value.replace(/%(\w+)/g, function (str, name) { + return vars[name] || str; + }); + } + return value; + }; + var isEq = function (str1, str2) { + str1 = str1 || ''; + str2 = str2 || ''; + str1 = '' + (str1.nodeName || str1); + str2 = '' + (str2.nodeName || str2); + return str1.toLowerCase() === str2.toLowerCase(); + }; + var normalizeStyleValue = function (dom, value, name) { + if (name === 'color' || name === 'backgroundColor') { + value = dom.toHex(value); + } + if (name === 'fontWeight' && value === 700) { + value = 'bold'; + } + if (name === 'fontFamily') { + value = value.replace(/[\'\"]/g, '').replace(/,\s+/g, ','); + } + return '' + value; + }; + var getStyle = function (dom, node, name) { + return normalizeStyleValue(dom, dom.getStyle(node, name), name); + }; + var getTextDecoration = function (dom, node) { + var decoration; + dom.getParent(node, function (n) { + decoration = dom.getStyle(n, 'text-decoration'); + return decoration && decoration !== 'none'; + }); + return decoration; + }; + var getParents$1 = function (dom, node, selector) { + return dom.getParents(node, selector, dom.getRoot()); + }; + var FormatUtils = { + isInlineBlock: isInlineBlock, + moveStart: moveStart, + getNonWhiteSpaceSibling: getNonWhiteSpaceSibling, + isTextBlock: isTextBlock$1, + isValid: isValid, + isWhiteSpaceNode: isWhiteSpaceNode, + replaceVars: replaceVars, + isEq: isEq, + normalizeStyleValue: normalizeStyleValue, + getStyle: getStyle, + getTextDecoration: getTextDecoration, + getParents: getParents$1 + }; + + var isBookmarkNode$2 = Bookmarks.isBookmarkNode; + var getParents$2 = FormatUtils.getParents, isWhiteSpaceNode$1 = FormatUtils.isWhiteSpaceNode, isTextBlock$2 = FormatUtils.isTextBlock; + var findLeaf = function (node, offset) { + if (typeof offset === 'undefined') { + offset = node.nodeType === 3 ? node.length : node.childNodes.length; + } + while (node && node.hasChildNodes()) { + node = node.childNodes[offset]; + if (node) { + offset = node.nodeType === 3 ? node.length : node.childNodes.length; + } + } + return { + node: node, + offset: offset + }; + }; + var excludeTrailingWhitespace = function (endContainer, endOffset) { + var leaf = findLeaf(endContainer, endOffset); + if (leaf.node) { + while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) { + leaf = findLeaf(leaf.node.previousSibling); + } + if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') { + if (leaf.offset > 1) { + endContainer = leaf.node; + endContainer.splitText(leaf.offset - 1); + } + } + } + return endContainer; + }; + var isBogusBr = function (node) { + return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling; + }; + var findParentContentEditable = function (dom, node) { + var parent = node; + while (parent) { + if (parent.nodeType === 1 && dom.getContentEditable(parent)) { + return dom.getContentEditable(parent) === 'false' ? parent : node; + } + parent = parent.parentNode; + } + return node; + }; + var findSpace = function (start, remove, node, offset) { + var pos, pos2; + var str = node.nodeValue; + if (typeof offset === 'undefined') { + offset = start ? str.length : 0; + } + if (start) { + pos = str.lastIndexOf(' ', offset); + pos2 = str.lastIndexOf('\xA0', offset); + pos = pos > pos2 ? pos : pos2; + if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) { + pos++; + } + } else { + pos = str.indexOf(' ', offset); + pos2 = str.indexOf('\xA0', offset); + pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2; + } + return pos; + }; + var findWordEndPoint = function (dom, body, container, offset, start, remove) { + var node, pos, lastTextNode; + if (container.nodeType === 3) { + pos = findSpace(start, remove, container, offset); + if (pos !== -1) { + return { + container: container, + offset: pos + }; + } + lastTextNode = container; + } + var walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body); + while (node = walker[start ? 'prev' : 'next']()) { + if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) { + lastTextNode = node; + pos = findSpace(start, remove, node); + if (pos !== -1) { + return { + container: node, + offset: pos + }; + } + } else if (dom.isBlock(node) || FormatUtils.isEq(node, 'BR')) { + break; + } + } + if (lastTextNode) { + if (start) { + offset = 0; + } else { + offset = lastTextNode.length; + } + return { + container: lastTextNode, + offset: offset + }; + } + }; + var findSelectorEndPoint = function (dom, format, rng, container, siblingName) { + var parents, i, y, curFormat; + if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) { + container = container[siblingName]; + } + parents = getParents$2(dom, container); + for (i = 0; i < parents.length; i++) { + for (y = 0; y < format.length; y++) { + curFormat = format[y]; + if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) { + continue; + } + if (dom.is(parents[i], curFormat.selector)) { + return parents[i]; + } + } + } + return container; + }; + var findBlockEndPoint = function (editor, format, container, siblingName) { + var node; + var dom = editor.dom; + var root = dom.getRoot(); + if (!format[0].wrapper) { + node = dom.getParent(container, format[0].block, root); + } + if (!node) { + var scopeRoot = dom.getParent(container, 'LI,TD,TH'); + node = dom.getParent(container.nodeType === 3 ? container.parentNode : container, function (node) { + return node !== root && isTextBlock$2(editor, node); + }, scopeRoot); + } + if (node && format[0].wrapper) { + node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node; + } + if (!node) { + node = container; + while (node[siblingName] && !dom.isBlock(node[siblingName])) { + node = node[siblingName]; + if (FormatUtils.isEq(node, 'br')) { + break; + } + } + } + return node || container; + }; + var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) { + var container, parent, sibling, siblingName, root; + container = parent = start ? startContainer : endContainer; + siblingName = start ? 'previousSibling' : 'nextSibling'; + root = dom.getRoot(); + if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) { + if (start ? startOffset > 0 : endOffset < container.nodeValue.length) { + return container; + } + } + while (true) { + if (!format[0].block_expand && dom.isBlock(parent)) { + return parent; + } + for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) { + if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) { + return parent; + } + } + if (parent === root || parent.parentNode === root) { + container = parent; + break; + } + parent = parent.parentNode; + } + return container; + }; + var expandRng = function (editor, rng, format, remove) { + var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset; + var dom = editor.dom; + if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) { + startContainer = getNode(startContainer, startOffset); + if (startContainer.nodeType === 3) { + startOffset = 0; + } + } + if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) { + endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1); + if (endContainer.nodeType === 3) { + endOffset = endContainer.nodeValue.length; + } + } + startContainer = findParentContentEditable(dom, startContainer); + endContainer = findParentContentEditable(dom, endContainer); + if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) { + startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode; + if (rng.collapsed) { + startContainer = startContainer.previousSibling || startContainer; + } else { + startContainer = startContainer.nextSibling || startContainer; + } + if (startContainer.nodeType === 3) { + startOffset = rng.collapsed ? startContainer.length : 0; + } + } + if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) { + endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode; + if (rng.collapsed) { + endContainer = endContainer.nextSibling || endContainer; + } else { + endContainer = endContainer.previousSibling || endContainer; + } + if (endContainer.nodeType === 3) { + endOffset = rng.collapsed ? 0 : endContainer.length; + } + } + if (rng.collapsed) { + endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove); + if (endPoint) { + startContainer = endPoint.container; + startOffset = endPoint.offset; + } + endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove); + if (endPoint) { + endContainer = endPoint.container; + endOffset = endPoint.offset; + } + } + if (format[0].inline) { + endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset); + } + if (format[0].inline || format[0].block_expand) { + if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) { + startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true); + } + if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) { + endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false); + } + } + if (format[0].selector && format[0].expand !== false && !format[0].inline) { + startContainer = findSelectorEndPoint(dom, format, rng, startContainer, 'previousSibling'); + endContainer = findSelectorEndPoint(dom, format, rng, endContainer, 'nextSibling'); + } + if (format[0].block || format[0].selector) { + startContainer = findBlockEndPoint(editor, format, startContainer, 'previousSibling'); + endContainer = findBlockEndPoint(editor, format, endContainer, 'nextSibling'); + if (format[0].block) { + if (!dom.isBlock(startContainer)) { + startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true); + } + if (!dom.isBlock(endContainer)) { + endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false); + } + } + } + if (startContainer.nodeType === 1) { + startOffset = dom.nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + if (endContainer.nodeType === 1) { + endOffset = dom.nodeIndex(endContainer) + 1; + endContainer = endContainer.parentNode; + } + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + }; + var ExpandRange = { expandRng: expandRng }; + + var each$8 = Tools.each; + var getEndChild = function (container, index) { + var childNodes = container.childNodes; + index--; + if (index > childNodes.length - 1) { + index = childNodes.length - 1; + } else if (index < 0) { + index = 0; + } + return childNodes[index] || container; + }; + var walk$1 = function (dom, rng, callback) { + var startContainer = rng.startContainer; + var startOffset = rng.startOffset; + var endContainer = rng.endContainer; + var endOffset = rng.endOffset; + var ancestor; + var startPoint; + var endPoint; + var node; + var parent; + var siblings; + var nodes; + nodes = dom.select('td[data-mce-selected],th[data-mce-selected]'); + if (nodes.length > 0) { + each$8(nodes, function (node) { + callback([node]); + }); + return; + } + var exclude = function (nodes) { + var node; + node = nodes[0]; + if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) { + nodes.splice(0, 1); + } + node = nodes[nodes.length - 1]; + if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) { + nodes.splice(nodes.length - 1, 1); + } + return nodes; + }; + var collectSiblings = function (node, name, endNode) { + var siblings = []; + for (; node && node !== endNode; node = node[name]) { + siblings.push(node); + } + return siblings; + }; + var findEndPoint = function (node, root) { + do { + if (node.parentNode === root) { + return node; + } + node = node.parentNode; + } while (node); + }; + var walkBoundary = function (startNode, endNode, next) { + var siblingName = next ? 'nextSibling' : 'previousSibling'; + for (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) { + parent = node.parentNode; + siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName); + if (siblings.length) { + if (!next) { + siblings.reverse(); + } + callback(exclude(siblings)); + } + } + }; + if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) { + startContainer = startContainer.childNodes[startOffset]; + } + if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) { + endContainer = getEndChild(endContainer, endOffset); + } + if (startContainer === endContainer) { + return callback(exclude([startContainer])); + } + ancestor = dom.findCommonAncestor(startContainer, endContainer); + for (node = startContainer; node; node = node.parentNode) { + if (node === endContainer) { + return walkBoundary(startContainer, ancestor, true); + } + if (node === ancestor) { + break; + } + } + for (node = endContainer; node; node = node.parentNode) { + if (node === startContainer) { + return walkBoundary(endContainer, ancestor); + } + if (node === ancestor) { + break; + } + } + startPoint = findEndPoint(startContainer, ancestor) || startContainer; + endPoint = findEndPoint(endContainer, ancestor) || endContainer; + walkBoundary(startContainer, startPoint, true); + siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint); + if (siblings.length) { + callback(exclude(siblings)); + } + walkBoundary(endContainer, endPoint); + }; + var RangeWalk = { walk: walk$1 }; + + var zeroWidth = function () { + return '\uFEFF'; + }; + + function NodeValue (is, name) { + var get = function (element) { + if (!is(element)) { + throw new Error('Can only get ' + name + ' value of a ' + name + ' node'); + } + return getOption(element).getOr(''); + }; + var getOptionIE10 = function (element) { + try { + return getOptionSafe(element); + } catch (e) { + return Option.none(); + } + }; + var getOptionSafe = function (element) { + return is(element) ? Option.from(element.dom().nodeValue) : Option.none(); + }; + var browser = PlatformDetection$1.detect().browser; + var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe; + var set = function (element, value) { + if (!is(element)) { + throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node'); + } + element.dom().nodeValue = value; + }; + return { + get: get, + getOption: getOption, + set: set + }; + } + + var api = NodeValue(isText, 'text'); + var get$5 = function (element) { + return api.get(element); + }; + + var isZeroWidth = function (elem) { + return isText(elem) && get$5(elem) === zeroWidth(); + }; + var context = function (editor, elem, wrapName, nodeName) { + return parent(elem).fold(function () { + return 'skipping'; + }, function (parent) { + if (nodeName === 'br' || isZeroWidth(elem)) { + return 'valid'; + } else if (isAnnotation(elem)) { + return 'existing'; + } else if (isCaretNode(elem)) { + return 'caret'; + } else if (!FormatUtils.isValid(editor, wrapName, nodeName) || !FormatUtils.isValid(editor, name(parent), wrapName)) { + return 'invalid-child'; + } else { + return 'valid'; + } + }); + }; + + var shouldApplyToTrailingSpaces = function (rng) { + return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\xA0'; + }; + var applyWordGrab = function (editor, rng) { + var r = ExpandRange.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng)); + rng.setStart(r.startContainer, r.startOffset); + rng.setEnd(r.endContainer, r.endOffset); + editor.selection.setRng(rng); + }; + var makeAnnotation = function (eDoc, _a, annotationName, decorate) { + var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']); + var master = Element.fromTag('span', eDoc); + add$3(master, annotation()); + set(master, '' + dataAnnotationId(), uid); + set(master, '' + dataAnnotation(), annotationName); + var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e; + setAll(master, attributes); + add$4(master, classes); + return master; + }; + var annotate = function (editor, rng, annotationName, decorate, data) { + var newWrappers = []; + var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate); + var wrapper = Cell(Option.none()); + var finishWrapper = function () { + wrapper.set(Option.none()); + }; + var getOrOpenWrapper = function () { + return wrapper.get().getOrThunk(function () { + var nu = shallow(master); + newWrappers.push(nu); + wrapper.set(Option.some(nu)); + return nu; + }); + }; + var processElements = function (elems) { + each(elems, processElement); + }; + var processElement = function (elem) { + var ctx = context(editor, elem, 'span', name(elem)); + switch (ctx) { + case 'invalid-child': { + finishWrapper(); + var children$1 = children(elem); + processElements(children$1); + finishWrapper(); + break; + } + case 'valid': { + var w = getOrOpenWrapper(); + wrap$1(elem, w); + break; + } + case 'skipping': + case 'existing': + case 'caret': + } + }; + var processNodes = function (nodes) { + var elems = map(nodes, Element.fromDom); + processElements(elems); + }; + RangeWalk.walk(editor.dom, rng, function (nodes) { + finishWrapper(); + processNodes(nodes); + }); + return newWrappers; + }; + var annotateWithBookmark = function (editor, name, settings, data) { + editor.undoManager.transact(function () { + var initialRng = editor.selection.getRng(); + if (initialRng.collapsed) { + applyWordGrab(editor, initialRng); + } + if (editor.selection.getRng().collapsed) { + var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate); + set$1(wrapper, '\xA0'); + editor.selection.getRng().insertNode(wrapper.dom()); + editor.selection.select(wrapper.dom()); + } else { + var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false); + var rng = editor.selection.getRng(); + annotate(editor, rng, name, settings.decorate, data); + editor.selection.moveToBookmark(bookmark); + } + }); + }; + + var Annotator = function (editor) { + var registry = create$1(); + setup$1(editor, registry); + var changes = setup(editor, registry); + return { + register: function (name, settings) { + registry.register(name, settings); + }, + annotate: function (name, data) { + registry.lookup(name).each(function (settings) { + annotateWithBookmark(editor, name, settings, data); + }); + }, + annotationChanged: function (name, callback) { + changes.addListener(name, callback); + }, + remove: function (name) { + identify(editor, Option.some(name)).each(function (_a) { + var elements = _a.elements; + each(elements, unwrap); + }); + }, + getAll: function (name) { + var directory = findAll(editor, name); + return map$2(directory, function (elems) { + return map(elems, function (elem) { + return elem.dom(); + }); + }); + } + }; + }; + + var whiteSpaceRegExp$3 = /^[ \t\r\n]*$/; + var typeLookup = { + '#text': 3, + '#comment': 8, + '#cdata': 4, + '#pi': 7, + '#doctype': 10, + '#document-fragment': 11 + }; + var walk$2 = function (node, root, prev) { + var sibling; + var parent; + var startName = prev ? 'lastChild' : 'firstChild'; + var siblingName = prev ? 'prev' : 'next'; + if (node[startName]) { + return node[startName]; + } + if (node !== root) { + sibling = node[siblingName]; + if (sibling) { + return sibling; + } + for (parent = node.parent; parent && parent !== root; parent = parent.parent) { + sibling = parent[siblingName]; + if (sibling) { + return sibling; + } + } + } + }; + var Node$1 = function () { + function Node(name, type) { + this.name = name; + this.type = type; + if (type === 1) { + this.attributes = []; + this.attributes.map = {}; + } + } + Node.create = function (name, attrs) { + var node, attrName; + node = new Node(name, typeLookup[name] || 1); + if (attrs) { + for (attrName in attrs) { + node.attr(attrName, attrs[attrName]); + } + } + return node; + }; + Node.prototype.replace = function (node) { + var self = this; + if (node.parent) { + node.remove(); + } + self.insert(node, self); + self.remove(); + return self; + }; + Node.prototype.attr = function (name, value) { + var self = this; + var attrs, i; + if (typeof name !== 'string') { + for (i in name) { + self.attr(i, name[i]); + } + return self; + } + if (attrs = self.attributes) { + if (value !== undefined) { + if (value === null) { + if (name in attrs.map) { + delete attrs.map[name]; + i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs = attrs.splice(i, 1); + return self; + } + } + } + return self; + } + if (name in attrs.map) { + i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs[i].value = value; + break; + } + } + } else { + attrs.push({ + name: name, + value: value + }); + } + attrs.map[name] = value; + return self; + } + return attrs.map[name]; + } + }; + Node.prototype.clone = function () { + var self = this; + var clone = new Node(self.name, self.type); + var i, l, selfAttrs, selfAttr, cloneAttrs; + if (selfAttrs = self.attributes) { + cloneAttrs = []; + cloneAttrs.map = {}; + for (i = 0, l = selfAttrs.length; i < l; i++) { + selfAttr = selfAttrs[i]; + if (selfAttr.name !== 'id') { + cloneAttrs[cloneAttrs.length] = { + name: selfAttr.name, + value: selfAttr.value + }; + cloneAttrs.map[selfAttr.name] = selfAttr.value; + } + } + clone.attributes = cloneAttrs; + } + clone.value = self.value; + clone.shortEnded = self.shortEnded; + return clone; + }; + Node.prototype.wrap = function (wrapper) { + var self = this; + self.parent.insert(wrapper, self); + wrapper.append(self); + return self; + }; + Node.prototype.unwrap = function () { + var self = this; + var node, next; + for (node = self.firstChild; node;) { + next = node.next; + self.insert(node, self, true); + node = next; + } + self.remove(); + }; + Node.prototype.remove = function () { + var self = this, parent = self.parent, next = self.next, prev = self.prev; + if (parent) { + if (parent.firstChild === self) { + parent.firstChild = next; + if (next) { + next.prev = null; + } + } else { + prev.next = next; + } + if (parent.lastChild === self) { + parent.lastChild = prev; + if (prev) { + prev.next = null; + } + } else { + next.prev = prev; + } + self.parent = self.next = self.prev = null; + } + return self; + }; + Node.prototype.append = function (node) { + var self = this; + var last; + if (node.parent) { + node.remove(); + } + last = self.lastChild; + if (last) { + last.next = node; + node.prev = last; + self.lastChild = node; + } else { + self.lastChild = self.firstChild = node; + } + node.parent = self; + return node; + }; + Node.prototype.insert = function (node, refNode, before) { + var parent; + if (node.parent) { + node.remove(); + } + parent = refNode.parent || this; + if (before) { + if (refNode === parent.firstChild) { + parent.firstChild = node; + } else { + refNode.prev.next = node; + } + node.prev = refNode.prev; + node.next = refNode; + refNode.prev = node; + } else { + if (refNode === parent.lastChild) { + parent.lastChild = node; + } else { + refNode.next.prev = node; + } + node.next = refNode.next; + node.prev = refNode; + refNode.next = node; + } + node.parent = parent; + return node; + }; + Node.prototype.getAll = function (name) { + var self = this; + var node; + var collection = []; + for (node = self.firstChild; node; node = walk$2(node, self)) { + if (node.name === name) { + collection.push(node); + } + } + return collection; + }; + Node.prototype.empty = function () { + var self = this; + var nodes, i, node; + if (self.firstChild) { + nodes = []; + for (node = self.firstChild; node; node = walk$2(node, self)) { + nodes.push(node); + } + i = nodes.length; + while (i--) { + node = nodes[i]; + node.parent = node.firstChild = node.lastChild = node.next = node.prev = null; + } + } + self.firstChild = self.lastChild = null; + return self; + }; + Node.prototype.isEmpty = function (elements, whitespace, predicate) { + var self = this; + var node = self.firstChild, i, name; + whitespace = whitespace || {}; + if (node) { + do { + if (node.type === 1) { + if (node.attr('data-mce-bogus')) { + continue; + } + if (elements[node.name]) { + return false; + } + i = node.attributes.length; + while (i--) { + name = node.attributes[i].name; + if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) { + return false; + } + } + } + if (node.type === 8) { + return false; + } + if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) { + return false; + } + if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) { + return false; + } + if (predicate && predicate(node)) { + return false; + } + } while (node = walk$2(node, self)); + } + return true; + }; + Node.prototype.walk = function (prev) { + return walk$2(this, null, prev); + }; + return Node; + }(); + + var isValidPrefixAttrName = function (name) { + return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0; + }; + var trimComments = function (text) { + return text.replace(/<!--|-->/g, ''); + }; + var isInvalidUri = function (settings, uri) { + if (settings.allow_html_data_urls) { + return false; + } else if (/^data:image\//i.test(uri)) { + return settings.allow_svg_data_urls === false && /^data:image\/svg\+xml/i.test(uri); + } else { + return /^data:/i.test(uri); + } + }; + var findEndTagIndex = function (schema, html, startIndex) { + var count = 1, index, matches, tokenRegExp, shortEndedElements; + shortEndedElements = schema.getShortEndedElements(); + tokenRegExp = /<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g; + tokenRegExp.lastIndex = index = startIndex; + while (matches = tokenRegExp.exec(html)) { + index = tokenRegExp.lastIndex; + if (matches[1] === '/') { + count--; + } else if (!matches[1]) { + if (matches[2] in shortEndedElements) { + continue; + } + count++; + } + if (count === 0) { + break; + } + } + return index; + }; + var checkBogusAttribute = function (regExp, attrString) { + var matches = regExp.exec(attrString); + if (matches) { + var name = matches[1]; + var value = matches[2]; + return typeof name === 'string' && name.toLowerCase() === 'data-mce-bogus' ? value : null; + } else { + return null; + } + }; + function SaxParser(settings, schema) { + if (schema === void 0) { + schema = Schema(); + } + var noop = function () { + }; + settings = settings || {}; + if (settings.fix_self_closing !== false) { + settings.fix_self_closing = true; + } + var comment = settings.comment ? settings.comment : noop; + var cdata = settings.cdata ? settings.cdata : noop; + var text = settings.text ? settings.text : noop; + var start = settings.start ? settings.start : noop; + var end = settings.end ? settings.end : noop; + var pi = settings.pi ? settings.pi : noop; + var doctype = settings.doctype ? settings.doctype : noop; + var parse = function (html) { + var matches, index = 0, value, endRegExp; + var stack = []; + var attrList, i, textData, name; + var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded; + var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns; + var attributesRequired, attributesDefault, attributesForced, processHtml; + var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0; + var decode = Entities.decode; + var fixSelfClosing; + var filteredUrlAttrs = Tools.makeMap('src,href,data,background,formaction,poster,xlink:href'); + var scriptUriRegExp = /((java|vb)script|mhtml):/i; + var processEndTag = function (name) { + var pos, i; + pos = stack.length; + while (pos--) { + if (stack[pos].name === name) { + break; + } + } + if (pos >= 0) { + for (i = stack.length - 1; i >= pos; i--) { + name = stack[i]; + if (name.valid) { + end(name.name); + } + } + stack.length = pos; + } + }; + var parseAttribute = function (match, name, value, val2, val3) { + var attrRule, i; + var trimRegExp = /[\s\u0000-\u001F]+/g; + name = name.toLowerCase(); + value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); + if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) { + attrRule = validAttributesMap[name]; + if (!attrRule && validAttributePatterns) { + i = validAttributePatterns.length; + while (i--) { + attrRule = validAttributePatterns[i]; + if (attrRule.pattern.test(name)) { + break; + } + } + if (i === -1) { + attrRule = null; + } + } + if (!attrRule) { + return; + } + if (attrRule.validValues && !(value in attrRule.validValues)) { + return; + } + } + if (filteredUrlAttrs[name] && !settings.allow_script_urls) { + var uri = value.replace(trimRegExp, ''); + try { + uri = decodeURIComponent(uri); + } catch (ex) { + uri = unescape(uri); + } + if (scriptUriRegExp.test(uri)) { + return; + } + if (isInvalidUri(settings, uri)) { + return; + } + } + if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) { + return; + } + attrList.map[name] = value; + attrList.push({ + name: name, + value: value + }); + }; + tokenRegExp = new RegExp('<(?:' + '(?:!--([\\w\\W]*?)-->)|' + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + '(?:!DOCTYPE([\\w\\W]*?)>)|' + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + '(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + ')', 'g'); + attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g; + shortEndedElements = schema.getShortEndedElements(); + selfClosing = settings.self_closing_elements || schema.getSelfClosingElements(); + fillAttrsMap = schema.getBoolAttrs(); + validate = settings.validate; + removeInternalElements = settings.remove_internals; + fixSelfClosing = settings.fix_self_closing; + specialElements = schema.getSpecialElements(); + processHtml = html + '>'; + while (matches = tokenRegExp.exec(processHtml)) { + if (index < matches.index) { + text(decode(html.substr(index, matches.index - index))); + } + if (value = matches[6]) { + value = value.toLowerCase(); + if (value.charAt(0) === ':') { + value = value.substr(1); + } + processEndTag(value); + } else if (value = matches[7]) { + if (matches.index + matches[0].length > html.length) { + text(decode(html.substr(matches.index))); + index = matches.index + matches[0].length; + continue; + } + value = value.toLowerCase(); + if (value.charAt(0) === ':') { + value = value.substr(1); + } + isShortEnded = value in shortEndedElements; + if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) { + processEndTag(value); + } + var bogusValue = checkBogusAttribute(attrRegExp, matches[8]); + if (bogusValue !== null) { + if (bogusValue === 'all') { + index = findEndTagIndex(schema, html, tokenRegExp.lastIndex); + tokenRegExp.lastIndex = index; + continue; + } + isValidElement = false; + } + if (!validate || (elementRule = schema.getElementRule(value))) { + isValidElement = true; + if (validate) { + validAttributesMap = elementRule.attributes; + validAttributePatterns = elementRule.attributePatterns; + } + if (attribsValue = matches[8]) { + isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; + if (isInternalElement && removeInternalElements) { + isValidElement = false; + } + attrList = []; + attrList.map = {}; + attribsValue.replace(attrRegExp, parseAttribute); + } else { + attrList = []; + attrList.map = {}; + } + if (validate && !isInternalElement) { + attributesRequired = elementRule.attributesRequired; + attributesDefault = elementRule.attributesDefault; + attributesForced = elementRule.attributesForced; + anyAttributesRequired = elementRule.removeEmptyAttrs; + if (anyAttributesRequired && !attrList.length) { + isValidElement = false; + } + if (attributesForced) { + i = attributesForced.length; + while (i--) { + attr = attributesForced[i]; + name = attr.name; + attrValue = attr.value; + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + attrList.map[name] = attrValue; + attrList.push({ + name: name, + value: attrValue + }); + } + } + if (attributesDefault) { + i = attributesDefault.length; + while (i--) { + attr = attributesDefault[i]; + name = attr.name; + if (!(name in attrList.map)) { + attrValue = attr.value; + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + attrList.map[name] = attrValue; + attrList.push({ + name: name, + value: attrValue + }); + } + } + } + if (attributesRequired) { + i = attributesRequired.length; + while (i--) { + if (attributesRequired[i] in attrList.map) { + break; + } + } + if (i === -1) { + isValidElement = false; + } + } + if (attr = attrList.map['data-mce-bogus']) { + if (attr === 'all') { + index = findEndTagIndex(schema, html, tokenRegExp.lastIndex); + tokenRegExp.lastIndex = index; + continue; + } + isValidElement = false; + } + } + if (isValidElement) { + start(value, attrList, isShortEnded); + } + } else { + isValidElement = false; + } + if (endRegExp = specialElements[value]) { + endRegExp.lastIndex = index = matches.index + matches[0].length; + if (matches = endRegExp.exec(html)) { + if (isValidElement) { + textData = html.substr(index, matches.index - index); + } + index = matches.index + matches[0].length; + } else { + textData = html.substr(index); + index = html.length; + } + if (isValidElement) { + if (textData.length > 0) { + text(textData, true); + } + end(value); + } + tokenRegExp.lastIndex = index; + continue; + } + if (!isShortEnded) { + if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) { + stack.push({ + name: value, + valid: isValidElement + }); + } else if (isValidElement) { + end(value); + } + } + } else if (value = matches[1]) { + if (value.charAt(0) === '>') { + value = ' ' + value; + } + if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') { + value = ' ' + value; + } + comment(value); + } else if (value = matches[2]) { + cdata(trimComments(value)); + } else if (value = matches[3]) { + doctype(value); + } else if (value = matches[4]) { + pi(value, matches[5]); + } + index = matches.index + matches[0].length; + } + if (index < html.length) { + text(decode(html.substr(index))); + } + for (i = stack.length - 1; i >= 0; i--) { + value = stack[i]; + if (value.valid) { + end(value.name); + } + } + }; + return { parse: parse }; + } + (function (SaxParser) { + SaxParser.findEndTag = findEndTagIndex; + }(SaxParser || (SaxParser = {}))); + var SaxParser$1 = SaxParser; + + var trimHtml = function (tempAttrs, html) { + var trimContentRegExp = new RegExp(['\\s?(' + tempAttrs.join('|') + ')="[^"]+"'].join('|'), 'gi'); + return html.replace(trimContentRegExp, ''); + }; + var trimInternal = function (serializer, html) { + var content = html; + var bogusAllRegExp = /<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g; + var endTagIndex, index, matchLength, matches, shortEndedElements; + var schema = serializer.schema; + content = trimHtml(serializer.getTempAttrs(), content); + shortEndedElements = schema.getShortEndedElements(); + while (matches = bogusAllRegExp.exec(content)) { + index = bogusAllRegExp.lastIndex; + matchLength = matches[0].length; + if (shortEndedElements[matches[1]]) { + endTagIndex = index; + } else { + endTagIndex = SaxParser$1.findEndTag(schema, content, index); + } + content = content.substring(0, index - matchLength) + content.substring(endTagIndex); + bogusAllRegExp.lastIndex = index - matchLength; + } + return Zwsp.trim(content); + }; + var trimExternal = trimInternal; + var TrimHtml = { + trimExternal: trimExternal, + trimInternal: trimInternal + }; + + var getBodySetting = function (editor, name, defaultValue) { + var value = editor.getParam(name, defaultValue); + if (value.indexOf('=') !== -1) { + var bodyObj = editor.getParam(name, '', 'hash'); + return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue; + } else { + return value; + } + }; + var getIframeAttrs = function (editor) { + return editor.getParam('iframe_attrs', {}); + }; + var getDocType = function (editor) { + return editor.getParam('doctype', '<!DOCTYPE html>'); + }; + var getDocumentBaseUrl = function (editor) { + return editor.getParam('document_base_url', ''); + }; + var getBodyId = function (editor) { + return getBodySetting(editor, 'body_id', 'tinymce'); + }; + var getBodyClass = function (editor) { + return getBodySetting(editor, 'body_class', ''); + }; + var getContentSecurityPolicy = function (editor) { + return editor.getParam('content_security_policy', ''); + }; + var shouldPutBrInPre = function (editor) { + return editor.getParam('br_in_pre', true); + }; + var getForcedRootBlock = function (editor) { + if (editor.getParam('force_p_newlines', false)) { + return 'p'; + } + var block = editor.getParam('forced_root_block', 'p'); + if (block === false) { + return ''; + } else if (block === true) { + return 'p'; + } else { + return block; + } + }; + var getForcedRootBlockAttrs = function (editor) { + return editor.getParam('forced_root_block_attrs', {}); + }; + var getBrNewLineSelector = function (editor) { + return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption'); + }; + var getNoNewLineSelector = function (editor) { + return editor.getParam('no_newline_selector', ''); + }; + var shouldKeepStyles = function (editor) { + return editor.getParam('keep_styles', true); + }; + var shouldEndContainerOnEmptyBlock = function (editor) { + return editor.getParam('end_container_on_empty_block', false); + }; + var getFontStyleValues = function (editor) { + return Tools.explode(editor.getParam('font_size_style_values', '')); + }; + var getFontSizeClasses = function (editor) { + return Tools.explode(editor.getParam('font_size_classes', '')); + }; + var getImagesDataImgFilter = function (editor) { + return editor.getParam('images_dataimg_filter', constant(true), 'function'); + }; + var isAutomaticUploadsEnabled = function (editor) { + return editor.getParam('automatic_uploads', true, 'boolean'); + }; + var shouldReuseFileName = function (editor) { + return editor.getParam('images_reuse_filename', false, 'boolean'); + }; + var shouldReplaceBlobUris = function (editor) { + return editor.getParam('images_replace_blob_uris', true, 'boolean'); + }; + var getImageUploadUrl = function (editor) { + return editor.getParam('images_upload_url', '', 'string'); + }; + var getImageUploadBasePath = function (editor) { + return editor.getParam('images_upload_base_path', '', 'string'); + }; + var getImagesUploadCredentials = function (editor) { + return editor.getParam('images_upload_credentials', false, 'boolean'); + }; + var getImagesUploadHandler = function (editor) { + return editor.getParam('images_upload_handler', null, 'function'); + }; + var shouldUseContentCssCors = function (editor) { + return editor.getParam('content_css_cors', false, 'boolean'); + }; + var getLanguageCode = function (editor) { + return editor.getParam('language', 'en', 'string'); + }; + var getLanguageUrl = function (editor) { + return editor.getParam('language_url', '', 'string'); + }; + var shouldIndentUseMargin = function (editor) { + return editor.getParam('indent_use_margin', false); + }; + var getIndentation = function (editor) { + return editor.getParam('indentation', '40px', 'string'); + }; + var getContentCss = function (editor) { + var contentCss = editor.settings.content_css; + if (isString(contentCss)) { + return map(contentCss.split(','), trim$2); + } else if (isArray(contentCss)) { + return contentCss; + } else if (contentCss === false || editor.inline) { + return []; + } else { + return ['default']; + } + }; + var getDirectionality = function (editor) { + return editor.getParam('directionality', I18n.isRtl() ? 'rtl' : undefined); + }; + var Settings = { + getIframeAttrs: getIframeAttrs, + getDocType: getDocType, + getDocumentBaseUrl: getDocumentBaseUrl, + getBodyId: getBodyId, + getBodyClass: getBodyClass, + getContentSecurityPolicy: getContentSecurityPolicy, + shouldPutBrInPre: shouldPutBrInPre, + getForcedRootBlock: getForcedRootBlock, + getForcedRootBlockAttrs: getForcedRootBlockAttrs, + getBrNewLineSelector: getBrNewLineSelector, + getNoNewLineSelector: getNoNewLineSelector, + shouldKeepStyles: shouldKeepStyles, + shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock, + getFontStyleValues: getFontStyleValues, + getFontSizeClasses: getFontSizeClasses, + getImagesDataImgFilter: getImagesDataImgFilter, + isAutomaticUploadsEnabled: isAutomaticUploadsEnabled, + shouldReuseFileName: shouldReuseFileName, + shouldReplaceBlobUris: shouldReplaceBlobUris, + getImageUploadUrl: getImageUploadUrl, + getImageUploadBasePath: getImageUploadBasePath, + getImagesUploadCredentials: getImagesUploadCredentials, + getImagesUploadHandler: getImagesUploadHandler, + shouldUseContentCssCors: shouldUseContentCssCors, + getLanguageCode: getLanguageCode, + getLanguageUrl: getLanguageUrl, + shouldIndentUseMargin: shouldIndentUseMargin, + getIndentation: getIndentation, + getContentCss: getContentCss, + getDirectionality: getDirectionality + }; + + var defaultFormat = 'html'; + var trimEmptyContents = function (editor, html) { + var blockName = Settings.getForcedRootBlock(editor); + var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\s|\xA0|<br \\/>|)<\\/' + blockName + '>[\r\n]*|<br \\/>[\r\n]*)$'); + return html.replace(emptyRegExp, ''); + }; + var getContentFromBody = function (editor, args, body) { + var content; + args.format = args.format ? args.format : defaultFormat; + args.get = true; + args.getInner = true; + if (!args.no_events) { + editor.fire('BeforeGetContent', args); + } + if (args.format === 'raw') { + content = Tools.trim(TrimHtml.trimExternal(editor.serializer, body.innerHTML)); + } else if (args.format === 'text') { + content = Zwsp.trim(body.innerText || body.textContent); + } else if (args.format === 'tree') { + return editor.serializer.serialize(body, args); + } else { + content = trimEmptyContents(editor, editor.serializer.serialize(body, args)); + } + if (args.format !== 'text' && !isWsPreserveElement(Element.fromDom(body))) { + args.content = Tools.trim(content); + } else { + args.content = content; + } + if (!args.no_events) { + editor.fire('GetContent', args); + } + return args.content; + }; + var getContent = function (editor, args) { + if (args === void 0) { + args = {}; + } + return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$1('body', 11) : ''), function (body) { + return getContentFromBody(editor, args, body); + }); + }; + + var makeMap$3 = Tools.makeMap; + var Writer = function (settings) { + var html = []; + var indent, indentBefore, indentAfter, encode, htmlOutput; + settings = settings || {}; + indent = settings.indent; + indentBefore = makeMap$3(settings.indent_before || ''); + indentAfter = makeMap$3(settings.indent_after || ''); + encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities); + htmlOutput = settings.element_format === 'html'; + return { + start: function (name, attrs, empty) { + var i, l, attr, value; + if (indent && indentBefore[name] && html.length > 0) { + value = html[html.length - 1]; + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + html.push('<', name); + if (attrs) { + for (i = 0, l = attrs.length; i < l; i++) { + attr = attrs[i]; + html.push(' ', attr.name, '="', encode(attr.value, true), '"'); + } + } + if (!empty || htmlOutput) { + html[html.length] = '>'; + } else { + html[html.length] = ' />'; + } + if (empty && indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + end: function (name) { + var value; + html.push('</', name, '>'); + if (indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + text: function (text, raw) { + if (text.length > 0) { + html[html.length] = raw ? text : encode(text); + } + }, + cdata: function (text) { + html.push('<![CDATA[', text, ']]>'); + }, + comment: function (text) { + html.push('<!--', text, '-->'); + }, + pi: function (name, text) { + if (text) { + html.push('<?', name, ' ', encode(text), '?>'); + } else { + html.push('<?', name, '?>'); + } + if (indent) { + html.push('\n'); + } + }, + doctype: function (text) { + html.push('<!DOCTYPE', text, '>', indent ? '\n' : ''); + }, + reset: function () { + html.length = 0; + }, + getContent: function () { + return html.join('').replace(/\n$/, ''); + } + }; + }; + + var Serializer = function (settings, schema) { + if (schema === void 0) { + schema = Schema(); + } + var writer = Writer(settings); + settings = settings || {}; + settings.validate = 'validate' in settings ? settings.validate : true; + var serialize = function (node) { + var handlers, validate; + validate = settings.validate; + handlers = { + 3: function (node) { + writer.text(node.value, node.raw); + }, + 8: function (node) { + writer.comment(node.value); + }, + 7: function (node) { + writer.pi(node.name, node.value); + }, + 10: function (node) { + writer.doctype(node.value); + }, + 4: function (node) { + writer.cdata(node.value); + }, + 11: function (node) { + if (node = node.firstChild) { + do { + walk(node); + } while (node = node.next); + } + } + }; + writer.reset(); + var walk = function (node) { + var handler = handlers[node.type]; + var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule; + if (!handler) { + name = node.name; + isEmpty = node.shortEnded; + attrs = node.attributes; + if (validate && attrs && attrs.length > 1) { + sortedAttrs = []; + sortedAttrs.map = {}; + elementRule = schema.getElementRule(node.name); + if (elementRule) { + for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) { + attrName = elementRule.attributesOrder[i]; + if (attrName in attrs.map) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({ + name: attrName, + value: attrValue + }); + } + } + for (i = 0, l = attrs.length; i < l; i++) { + attrName = attrs[i].name; + if (!(attrName in sortedAttrs.map)) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({ + name: attrName, + value: attrValue + }); + } + } + attrs = sortedAttrs; + } + } + writer.start(node.name, attrs, isEmpty); + if (!isEmpty) { + if (node = node.firstChild) { + do { + walk(node); + } while (node = node.next); + } + writer.end(name); + } + } else { + handler(node); + } + }; + if (node.type === 1 && !settings.inner) { + walk(node); + } else { + handlers[11](node); + } + return writer.getContent(); + }; + return { serialize: serialize }; + }; + + var traverse = function (node, fn) { + fn(node); + if (node.firstChild) { + traverse(node.firstChild, fn); + } + if (node.next) { + traverse(node.next, fn); + } + }; + var findMatchingNodes = function (nodeFilters, attributeFilters, node) { + var nodeMatches = {}; + var attrMatches = {}; + var matches = []; + if (node.firstChild) { + traverse(node.firstChild, function (node) { + each(nodeFilters, function (filter) { + if (filter.name === node.name) { + if (nodeMatches[filter.name]) { + nodeMatches[filter.name].nodes.push(node); + } else { + nodeMatches[filter.name] = { + filter: filter, + nodes: [node] + }; + } + } + }); + each(attributeFilters, function (filter) { + if (typeof node.attr(filter.name) === 'string') { + if (attrMatches[filter.name]) { + attrMatches[filter.name].nodes.push(node); + } else { + attrMatches[filter.name] = { + filter: filter, + nodes: [node] + }; + } + } + }); + }); + } + for (var name in nodeMatches) { + if (nodeMatches.hasOwnProperty(name)) { + matches.push(nodeMatches[name]); + } + } + for (var name in attrMatches) { + if (attrMatches.hasOwnProperty(name)) { + matches.push(attrMatches[name]); + } + } + return matches; + }; + var filter$2 = function (nodeFilters, attributeFilters, node) { + var matches = findMatchingNodes(nodeFilters, attributeFilters, node); + each(matches, function (match) { + each(match.filter.callbacks, function (callback) { + callback(match.nodes, match.filter.name, {}); + }); + }); + }; + + var hasFocus = function (element) { + var doc = owner(element).dom(); + return element.dom() === doc.activeElement; + }; + var active = function (_DOC) { + var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document; + return Option.from(doc.activeElement).map(Element.fromDom); + }; + var search = function (element) { + return active(owner(element)).filter(function (e) { + return element.dom().contains(e.dom()); + }); + }; + + var generate$1 = function (cases) { + if (!isArray(cases)) { + throw new Error('cases must be an array'); + } + if (cases.length === 0) { + throw new Error('there must be at least one case'); + } + var constructors = []; + var adt = {}; + each(cases, function (acase, count) { + var keys$1 = keys(acase); + if (keys$1.length !== 1) { + throw new Error('one and only one name per case'); + } + var key = keys$1[0]; + var value = acase[key]; + if (adt[key] !== undefined) { + throw new Error('duplicate key detected:' + key); + } else if (key === 'cata') { + throw new Error('cannot have a case named cata (sorry)'); + } else if (!isArray(value)) { + throw new Error('case arguments must be an array'); + } + constructors.push(key); + adt[key] = function () { + var argLength = arguments.length; + if (argLength !== value.length) { + throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength); + } + var args = new Array(argLength); + for (var i = 0; i < args.length; i++) + args[i] = arguments[i]; + var match = function (branches) { + var branchKeys = keys(branches); + if (constructors.length !== branchKeys.length) { + throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(',')); + } + var allReqd = forall(constructors, function (reqKey) { + return contains(branchKeys, reqKey); + }); + if (!allReqd) + throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', ')); + return branches[key].apply(null, args); + }; + return { + fold: function () { + if (arguments.length !== cases.length) { + throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length); + } + var target = arguments[count]; + return target.apply(null, args); + }, + match: match, + log: function (label) { + domGlobals.console.log(label, { + constructors: constructors, + constructor: key, + params: args + }); + } + }; + }; + }); + return adt; + }; + var Adt = { generate: generate$1 }; + + var adt = Adt.generate([ + { before: ['element'] }, + { + on: [ + 'element', + 'offset' + ] + }, + { after: ['element'] } + ]); + + var type$1 = Adt.generate([ + { domRange: ['rng'] }, + { + relative: [ + 'startSitu', + 'finishSitu' + ] + }, + { + exact: [ + 'start', + 'soffset', + 'finish', + 'foffset' + ] + } + ]); + var range$1 = Immutable('start', 'soffset', 'finish', 'foffset'); + + var browser$3 = PlatformDetection$1.detect().browser; + var clamp = function (offset, element) { + var max = isText(element) ? get$5(element).length : children(element).length + 1; + if (offset > max) { + return max; + } else if (offset < 0) { + return 0; + } + return offset; + }; + var normalizeRng = function (rng) { + return range$1(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish())); + }; + var isOrContains = function (root, elm) { + return contains$3(root, elm) || eq(root, elm); + }; + var isRngInRoot = function (root) { + return function (rng) { + return isOrContains(root, rng.start()) && isOrContains(root, rng.finish()); + }; + }; + var shouldStore = function (editor) { + return editor.inline === true || browser$3.isIE(); + }; + var nativeRangeToSelectionRange = function (r) { + return range$1(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset); + }; + var readRange = function (win) { + var selection = win.getSelection(); + var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.from(selection.getRangeAt(0)); + return rng.map(nativeRangeToSelectionRange); + }; + var getBookmark$2 = function (root) { + var win = defaultView(root); + return readRange(win.dom()).filter(isRngInRoot(root)); + }; + var validate = function (root, bookmark) { + return Option.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng); + }; + var bookmarkToNativeRng = function (bookmark) { + var rng = domGlobals.document.createRange(); + try { + rng.setStart(bookmark.start().dom(), bookmark.soffset()); + rng.setEnd(bookmark.finish().dom(), bookmark.foffset()); + return Option.some(rng); + } catch (_) { + return Option.none(); + } + }; + var store = function (editor) { + var newBookmark = shouldStore(editor) ? getBookmark$2(Element.fromDom(editor.getBody())) : Option.none(); + editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark; + }; + var storeNative = function (editor, rng) { + var root = Element.fromDom(editor.getBody()); + var range = shouldStore(editor) ? Option.from(rng) : Option.none(); + var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root)); + editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark; + }; + var getRng = function (editor) { + var bookmark = editor.bookmark ? editor.bookmark : Option.none(); + return bookmark.bind(curry(validate, Element.fromDom(editor.getBody()))).bind(bookmarkToNativeRng); + }; + var restore = function (editor) { + getRng(editor).each(function (rng) { + editor.selection.setRng(rng); + }); + }; + var SelectionBookmark = { + store: store, + storeNative: storeNative, + readRange: readRange, + restore: restore, + getRng: getRng, + getBookmark: getBookmark$2, + validate: validate + }; + + var getContentEditableHost = function (editor, node) { + return editor.dom.getParent(node, function (node) { + return editor.dom.getContentEditable(node) === 'true'; + }); + }; + var getCollapsedNode = function (rng) { + return rng.collapsed ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element.fromDom) : Option.none(); + }; + var getFocusInElement = function (root, rng) { + return getCollapsedNode(rng).bind(function (node) { + if (isTableSection(node)) { + return Option.some(node); + } else if (contains$3(root, node) === false) { + return Option.some(root); + } else { + return Option.none(); + } + }); + }; + var normalizeSelection = function (editor, rng) { + getFocusInElement(Element.fromDom(editor.getBody()), rng).bind(function (elm) { + return CaretFinder.firstPositionIn(elm.dom()); + }).fold(function () { + editor.selection.normalize(); + return; + }, function (caretPos) { + return editor.selection.setRng(caretPos.toRange()); + }); + }; + var focusBody = function (body) { + if (body.setActive) { + try { + body.setActive(); + } catch (ex) { + body.focus(); + } + } else { + body.focus(); + } + }; + var hasElementFocus = function (elm) { + return hasFocus(elm) || search(elm).isSome(); + }; + var hasIframeFocus = function (editor) { + return editor.iframeElement && hasFocus(Element.fromDom(editor.iframeElement)); + }; + var hasInlineFocus = function (editor) { + var rawBody = editor.getBody(); + return rawBody && hasElementFocus(Element.fromDom(rawBody)); + }; + var hasFocus$1 = function (editor) { + return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor); + }; + var focusEditor = function (editor) { + var selection = editor.selection; + var body = editor.getBody(); + var rng = selection.getRng(); + editor.quirks.refreshContentEditable(); + var contentEditableHost = getContentEditableHost(editor, selection.getNode()); + if (editor.$.contains(body, contentEditableHost)) { + focusBody(contentEditableHost); + normalizeSelection(editor, rng); + activateEditor(editor); + return; + } + if (editor.bookmark !== undefined && hasFocus$1(editor) === false) { + SelectionBookmark.getRng(editor).each(function (bookmarkRng) { + editor.selection.setRng(bookmarkRng); + rng = bookmarkRng; + }); + } + if (!editor.inline) { + if (!Env.opera) { + focusBody(body); + } + editor.getWin().focus(); + } + if (Env.gecko || editor.inline) { + focusBody(body); + normalizeSelection(editor, rng); + } + activateEditor(editor); + }; + var activateEditor = function (editor) { + return editor.editorManager.setActive(editor); + }; + var focus = function (editor, skipFocus) { + if (editor.removed) { + return; + } + skipFocus ? activateEditor(editor) : focusEditor(editor); + }; + var EditorFocus = { + focus: focus, + hasFocus: hasFocus$1 + }; + + var defaultFormat$1 = 'html'; + var isTreeNode = function (content) { + return content instanceof Node$1; + }; + var moveSelection = function (editor) { + if (EditorFocus.hasFocus(editor)) { + CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) { + var node = pos.getNode(); + var caretPos = NodeType.isTable(node) ? CaretFinder.firstPositionIn(node).getOr(pos) : pos; + editor.selection.setRng(caretPos.toRange()); + }); + } + }; + var setEditorHtml = function (editor, html) { + editor.dom.setHTML(editor.getBody(), html); + moveSelection(editor); + }; + var setContentString = function (editor, body, content, args) { + var forcedRootBlockName, padd; + if (content.length === 0 || /^\s+$/.test(content)) { + padd = '<br data-mce-bogus="1">'; + if (body.nodeName === 'TABLE') { + content = '<tr><td>' + padd + '</td></tr>'; + } else if (/^(UL|OL)$/.test(body.nodeName)) { + content = '<li>' + padd + '</li>'; + } + forcedRootBlockName = Settings.getForcedRootBlock(editor); + if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) { + content = padd; + content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, content); + } else if (!content) { + content = '<br data-mce-bogus="1">'; + } + setEditorHtml(editor, content); + editor.fire('SetContent', args); + } else { + if (args.format !== 'raw') { + content = Serializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, { + isRootContent: true, + insert: true + })); + } + args.content = isWsPreserveElement(Element.fromDom(body)) ? content : Tools.trim(content); + setEditorHtml(editor, args.content); + if (!args.no_events) { + editor.fire('SetContent', args); + } + } + return args.content; + }; + var setContentTree = function (editor, body, content, args) { + filter$2(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content); + var html = Serializer({ validate: editor.validate }, editor.schema).serialize(content); + args.content = isWsPreserveElement(Element.fromDom(body)) ? html : Tools.trim(html); + setEditorHtml(editor, args.content); + if (!args.no_events) { + editor.fire('SetContent', args); + } + return content; + }; + var setContent = function (editor, content, args) { + if (args === void 0) { + args = {}; + } + args.format = args.format ? args.format : defaultFormat$1; + args.set = true; + args.content = isTreeNode(content) ? '' : content; + if (!isTreeNode(content) && !args.no_events) { + editor.fire('BeforeSetContent', args); + content = args.content; + } + return Option.from(editor.getBody()).fold(constant(content), function (body) { + return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args); + }); + }; + + var firePreProcess = function (editor, args) { + return editor.fire('PreProcess', args); + }; + var firePostProcess = function (editor, args) { + return editor.fire('PostProcess', args); + }; + var fireRemove = function (editor) { + return editor.fire('remove'); + }; + var fireDetach = function (editor) { + return editor.fire('detach'); + }; + var fireSwitchMode = function (editor, mode) { + return editor.fire('SwitchMode', { mode: mode }); + }; + var fireObjectResizeStart = function (editor, target, width, height) { + editor.fire('ObjectResizeStart', { + target: target, + width: width, + height: height + }); + }; + var fireObjectResized = function (editor, target, width, height) { + editor.fire('ObjectResized', { + target: target, + width: width, + height: height + }); + }; + var Events = { + firePreProcess: firePreProcess, + firePostProcess: firePostProcess, + fireRemove: fireRemove, + fireDetach: fireDetach, + fireSwitchMode: fireSwitchMode, + fireObjectResizeStart: fireObjectResizeStart, + fireObjectResized: fireObjectResized + }; + + var DOM$1 = DOMUtils$1.DOM; + var restoreOriginalStyles = function (editor) { + DOM$1.setStyle(editor.id, 'display', editor.orgDisplay); + }; + var safeDestroy = function (x) { + return Option.from(x).each(function (x) { + return x.destroy(); + }); + }; + var clearDomReferences = function (editor) { + editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null; + editor.bodyElement = editor.contentDocument = editor.contentWindow = null; + editor.iframeElement = editor.targetElm = null; + if (editor.selection) { + editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null; + } + }; + var restoreForm = function (editor) { + var form = editor.formElement; + if (form) { + if (form._mceOldSubmit) { + form.submit = form._mceOldSubmit; + form._mceOldSubmit = null; + } + DOM$1.unbind(form, 'submit reset', editor.formEventDelegate); + } + }; + var remove$6 = function (editor) { + if (!editor.removed) { + var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload; + var body = editor.getBody(); + var element = editor.getElement(); + if (body) { + editor.save({ is_removing: true }); + } + editor.removed = true; + editor.unbindAllNativeEvents(); + if (editor.hasHiddenInput && element) { + DOM$1.remove(element.nextSibling); + } + Events.fireRemove(editor); + editor.editorManager.remove(editor); + if (!editor.inline && body) { + restoreOriginalStyles(editor); + } + Events.fireDetach(editor); + DOM$1.remove(editor.getContainer()); + safeDestroy(_selectionOverrides); + safeDestroy(editorUpload); + editor.destroy(); + } + }; + var destroy = function (editor, automatic) { + var selection = editor.selection, dom = editor.dom; + if (editor.destroyed) { + return; + } + if (!automatic && !editor.removed) { + editor.remove(); + return; + } + if (!automatic) { + editor.editorManager.off('beforeunload', editor._beforeUnload); + if (editor.theme && editor.theme.destroy) { + editor.theme.destroy(); + } + safeDestroy(selection); + safeDestroy(dom); + } + restoreForm(editor); + clearDomReferences(editor); + editor.destroyed = true; + }; + + var sectionResult = Immutable('sections', 'settings'); + var detection = PlatformDetection$1.detect(); + var isTouch = detection.deviceType.isTouch(); + var isPhone = detection.deviceType.isPhone(); + var mobilePlugins = [ + 'lists', + 'autolink', + 'autosave' + ]; + var defaultMobileSettings = isPhone ? { theme: 'mobile' } : {}; + var normalizePlugins = function (plugins) { + var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins; + var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2); + return filter(trimmedPlugins, function (item) { + return item.length > 0; + }); + }; + var filterMobilePlugins = function (plugins) { + return filter(plugins, curry(contains, mobilePlugins)); + }; + var extractSections = function (keys, settings) { + var result = bifilter(settings, function (value, key) { + return contains(keys, key); + }); + return sectionResult(result.t, result.f); + }; + var getSection = function (sectionResult, name, defaults) { + var sections = sectionResult.sections(); + var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {}; + return Tools.extend({}, defaults, sectionSettings); + }; + var hasSection = function (sectionResult, name) { + return sectionResult.sections().hasOwnProperty(name); + }; + var getDefaultSettings = function (id, documentBaseUrl, editor) { + return { + id: id, + theme: 'silver', + popup_css: '', + plugins: '', + document_base_url: documentBaseUrl, + add_form_submit_trigger: true, + submit_patch: true, + add_unload_trigger: true, + convert_urls: true, + relative_urls: true, + remove_script_host: true, + object_resizing: true, + doctype: '<!DOCTYPE html>', + visual: true, + font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large', + font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%', + forced_root_block: 'p', + hidden_input: true, + render_ui: true, + inline_styles: true, + convert_fonts_to_spans: true, + indent: true, + indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist', + indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist', + entity_encoding: 'named', + url_converter: editor.convertURL, + url_converter_scope: editor, + ie7_compat: true + }; + }; + var getExternalPlugins = function (overrideSettings, settings) { + var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {}; + if (overrideSettings && overrideSettings.external_plugins) { + return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins); + } else { + return userDefinedExternalPlugins; + } + }; + var combinePlugins = function (forcedPlugins, plugins) { + return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins)); + }; + var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) { + var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins); + var plugins = normalizePlugins(settings.plugins); + var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins; + var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins); + return Tools.extend(settings, { plugins: combinedPlugins.join(' ') }); + }; + var isOnMobile = function (isTouchDevice, sectionResult) { + var isInline = sectionResult.settings().inline; + return isTouchDevice && !isInline; + }; + var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) { + var sectionResult = extractSections(['mobile'], settings); + var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, { + validate: true, + external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings()) + }); + return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings); + }; + var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) { + var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor); + return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings); + }; + var getFiltered = function (predicate, editor, name) { + return Option.from(editor.settings[name]).filter(predicate); + }; + var getString = curry(getFiltered, isString); + var getParamObject = function (value) { + var output = {}; + if (typeof value === 'string') { + each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) { + var arr = val.split('='); + if (arr.length > 1) { + output[Tools.trim(arr[0])] = Tools.trim(arr[1]); + } else { + output[Tools.trim(arr[0])] = Tools.trim(arr[0]); + } + }); + } else { + output = value; + } + return output; + }; + var isArrayOf = function (p) { + return function (a) { + return isArray(a) && forall(a, p); + }; + }; + var getParam = function (editor, name, defaultVal, type) { + var value = name in editor.settings ? editor.settings[name] : defaultVal; + if (type === 'hash') { + return getParamObject(value); + } else if (type === 'string') { + return getFiltered(isString, editor, name).getOr(defaultVal); + } else if (type === 'number') { + return getFiltered(isNumber, editor, name).getOr(defaultVal); + } else if (type === 'boolean') { + return getFiltered(isBoolean, editor, name).getOr(defaultVal); + } else if (type === 'object') { + return getFiltered(isObject, editor, name).getOr(defaultVal); + } else if (type === 'array') { + return getFiltered(isArray, editor, name).getOr(defaultVal); + } else if (type === 'string[]') { + return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal); + } else if (type === 'function') { + return getFiltered(isFunction, editor, name).getOr(defaultVal); + } else { + return value; + } + }; + + var getProp = function (propName, elm) { + var rawElm = elm.dom(); + return rawElm[propName]; + }; + var getComputedSizeProp = function (propName, elm) { + return parseInt(get$2(elm, propName), 10); + }; + var getClientWidth = curry(getProp, 'clientWidth'); + var getClientHeight = curry(getProp, 'clientHeight'); + var getMarginTop = curry(getComputedSizeProp, 'margin-top'); + var getMarginLeft = curry(getComputedSizeProp, 'margin-left'); + var getBoundingClientRect$1 = function (elm) { + return elm.dom().getBoundingClientRect(); + }; + var isInsideElementContentArea = function (bodyElm, clientX, clientY) { + var clientWidth = getClientWidth(bodyElm); + var clientHeight = getClientHeight(bodyElm); + return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight; + }; + var transpose = function (inline, elm, clientX, clientY) { + var clientRect = getBoundingClientRect$1(elm); + var deltaX = inline ? clientRect.left + elm.dom().clientLeft + getMarginLeft(elm) : 0; + var deltaY = inline ? clientRect.top + elm.dom().clientTop + getMarginTop(elm) : 0; + var x = clientX - deltaX; + var y = clientY - deltaY; + return { + x: x, + y: y + }; + }; + var isXYInContentArea = function (editor, clientX, clientY) { + var bodyElm = Element.fromDom(editor.getBody()); + var targetElm = editor.inline ? bodyElm : documentElement(bodyElm); + var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY); + return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y); + }; + var fromDomSafe = function (node) { + return Option.from(node).map(Element.fromDom); + }; + var isEditorAttachedToDom = function (editor) { + var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer(); + return fromDomSafe(rawContainer).map(function (container) { + return contains$3(owner(container), container); + }).getOr(false); + }; + var EditorView = { + isXYInContentArea: isXYInContentArea, + isEditorAttachedToDom: isEditorAttachedToDom + }; + + function NotificationManagerImpl() { + var unimplemented = function () { + throw new Error('Theme did not provide a NotificationManager implementation.'); + }; + return { + open: unimplemented, + close: unimplemented, + reposition: unimplemented, + getArgs: unimplemented + }; + } + + function NotificationManager(editor) { + var notifications = []; + var getImplementation = function () { + var theme = editor.theme; + return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl(); + }; + var getTopNotification = function () { + return Option.from(notifications[0]); + }; + var isEqual = function (a, b) { + return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout; + }; + var reposition = function () { + if (notifications.length > 0) { + getImplementation().reposition(notifications); + } + }; + var addNotification = function (notification) { + notifications.push(notification); + }; + var closeNotification = function (notification) { + findIndex(notifications, function (otherNotification) { + return otherNotification === notification; + }).each(function (index) { + notifications.splice(index, 1); + }); + }; + var open = function (spec) { + if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) { + return; + } + return find(notifications, function (notification) { + return isEqual(getImplementation().getArgs(notification), spec); + }).getOrThunk(function () { + editor.editorManager.setActive(editor); + var notification = getImplementation().open(spec, function () { + closeNotification(notification); + reposition(); + }); + addNotification(notification); + reposition(); + return notification; + }); + }; + var close = function () { + getTopNotification().each(function (notification) { + getImplementation().close(notification); + closeNotification(notification); + reposition(); + }); + }; + var getNotifications = function () { + return notifications; + }; + var registerEvents = function (editor) { + editor.on('SkinLoaded', function () { + var serviceMessage = editor.settings.service_message; + if (serviceMessage) { + open({ + text: serviceMessage, + type: 'warn', + timeout: 0 + }); + } + }); + editor.on('ResizeEditor ResizeWindow NodeChange', function () { + Delay.requestAnimationFrame(reposition); + }); + editor.on('remove', function () { + each(notifications.slice(), function (notification) { + getImplementation().close(notification); + }); + }); + }; + registerEvents(editor); + return { + open: open, + close: close, + getNotifications: getNotifications + }; + } + + function WindowManagerImpl () { + var unimplemented = function () { + throw new Error('Theme did not provide a WindowManager implementation.'); + }; + return { + open: unimplemented, + openUrl: unimplemented, + alert: unimplemented, + confirm: unimplemented, + close: unimplemented, + getParams: unimplemented, + setParams: unimplemented + }; + } + + var WindowManager = function (editor) { + var dialogs = []; + var getImplementation = function () { + var theme = editor.theme; + return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl(); + }; + var funcBind = function (scope, f) { + return function () { + return f ? f.apply(scope, arguments) : undefined; + }; + }; + var fireOpenEvent = function (dialog) { + editor.fire('OpenWindow', { dialog: dialog }); + }; + var fireCloseEvent = function (dialog) { + editor.fire('CloseWindow', { dialog: dialog }); + }; + var addDialog = function (dialog) { + dialogs.push(dialog); + fireOpenEvent(dialog); + }; + var closeDialog = function (dialog) { + fireCloseEvent(dialog); + dialogs = filter(dialogs, function (otherDialog) { + return otherDialog !== dialog; + }); + if (dialogs.length === 0) { + editor.focus(); + } + }; + var getTopDialog = function () { + return Option.from(dialogs[dialogs.length - 1]); + }; + var storeSelectionAndOpenDialog = function (openDialog) { + editor.editorManager.setActive(editor); + SelectionBookmark.store(editor); + var dialog = openDialog(); + addDialog(dialog); + return dialog; + }; + var open = function (args, params) { + return storeSelectionAndOpenDialog(function () { + return getImplementation().open(args, params, closeDialog); + }); + }; + var openUrl = function (args) { + return storeSelectionAndOpenDialog(function () { + return getImplementation().openUrl(args, closeDialog); + }); + }; + var alert = function (message, callback, scope) { + getImplementation().alert(message, funcBind(scope ? scope : this, callback)); + }; + var confirm = function (message, callback, scope) { + getImplementation().confirm(message, funcBind(scope ? scope : this, callback)); + }; + var close = function () { + getTopDialog().each(function (dialog) { + getImplementation().close(dialog); + closeDialog(dialog); + }); + }; + editor.on('remove', function () { + each(dialogs, function (dialog) { + getImplementation().close(dialog); + }); + }); + return { + open: open, + openUrl: openUrl, + alert: alert, + confirm: confirm, + close: close + }; + }; + + var PluginManager = AddOnManager$1.PluginManager; + var resolvePluginName = function (targetUrl, suffix) { + for (var name in PluginManager.urls) { + var matchUrl = PluginManager.urls[name] + '/plugin' + suffix + '.js'; + if (matchUrl === targetUrl) { + return name; + } + } + return null; + }; + var pluginUrlToMessage = function (editor, url) { + var plugin = resolvePluginName(url, editor.suffix); + return plugin ? I18n.translate([ + 'Failed to load plugin: {0} from url {1}', + plugin, + url + ]) : I18n.translate([ + 'Failed to load plugin url: {0}', + url + ]); + }; + var displayNotification = function (editor, message) { + editor.notificationManager.open({ + type: 'error', + text: message + }); + }; + var displayError = function (editor, message) { + if (editor._skinLoaded) { + displayNotification(editor, message); + } else { + editor.on('SkinLoaded', function () { + displayNotification(editor, message); + }); + } + }; + var uploadError = function (editor, message) { + displayError(editor, I18n.translate([ + 'Failed to upload image: {0}', + message + ])); + }; + var pluginLoadError = function (editor, url) { + displayError(editor, pluginUrlToMessage(editor, url)); + }; + var pluginInitError = function (editor, name, err) { + var message = I18n.translate([ + 'Failed to initialize plugin: {0}', + name + ]); + initError(message, err); + displayError(editor, message); + }; + var initError = function (message) { + var x = []; + for (var _i = 1; _i < arguments.length; _i++) { + x[_i - 1] = arguments[_i]; + } + var console = domGlobals.window.console; + if (console) { + if (console.error) { + console.error.apply(console, arguments); + } else { + console.log.apply(console, arguments); + } + } + }; + var ErrorReporter = { + pluginLoadError: pluginLoadError, + pluginInitError: pluginInitError, + uploadError: uploadError, + displayError: displayError, + initError: initError + }; + + var getAll = function () { + return { + 'accessibility-check': '<svg width="24" height="24"><path d="M12 2a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1.1.9-2 2-2zm8 7h-5v12c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5c0-.6-.4-1-1-1a1 1 0 0 0-1 1v5c0 .6-.4 1-1 1a1 1 0 0 1-1-1V9H4a1 1 0 1 1 0-2h16c.6 0 1 .4 1 1s-.4 1-1 1z" fill-rule="nonzero"/></svg>', + 'align-center': '<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm3 4h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm-3-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>', + 'align-justify': '<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>', + 'align-left': '<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 4h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>', + 'align-none': '<svg width="24" height="24"><path d="M14.2 5L13 7H5a1 1 0 1 1 0-2h9.2zm4 0h.8a1 1 0 0 1 0 2h-2l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 0 1 0-2h6.8zm4 0H19a1 1 0 0 1 0 2h-4.4l1.2-2zm-6.4 4l-1.2 2H5a1 1 0 0 1 0-2h4.4zm4 0H19a1 1 0 0 1 0 2h-6.8l1.2-2zM7 17l-1.2 2H5a1 1 0 0 1 0-2h2zm4 0h8a1 1 0 0 1 0 2H9.8l1.2-2zm5.2-13.5l1.3.7-9.7 16.3-1.3-.7 9.7-16.3z" fill-rule="evenodd"/></svg>', + 'align-right': '<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm6 4h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm-6-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>', + 'arrow-left': '<svg width="24" height="24"><path d="M5.6 13l12 6a1 1 0 0 0 1.4-1V6a1 1 0 0 0-1.4-.9l-12 6a1 1 0 0 0 0 1.8z" fill-rule="evenodd"/></svg>', + 'arrow-right': '<svg width="24" height="24"><path d="M18.5 13l-12 6A1 1 0 0 1 5 18V6a1 1 0 0 1 1.4-.9l12 6a1 1 0 0 1 0 1.8z" fill-rule="evenodd"/></svg>', + 'bold': '<svg width="24" height="24"><path d="M7.8 19c-.3 0-.5 0-.6-.2l-.2-.5V5.7c0-.2 0-.4.2-.5l.6-.2h5c1.5 0 2.7.3 3.5 1 .7.6 1.1 1.4 1.1 2.5a3 3 0 0 1-.6 1.9c-.4.6-1 1-1.6 1.2.4.1.9.3 1.3.6s.8.7 1 1.2c.4.4.5 1 .5 1.6 0 1.3-.4 2.3-1.3 3-.8.7-2.1 1-3.8 1H7.8zm5-8.3c.6 0 1.2-.1 1.6-.5.4-.3.6-.7.6-1.3 0-1.1-.8-1.7-2.3-1.7H9.3v3.5h3.4zm.5 6c.7 0 1.3-.1 1.7-.4.4-.4.6-.9.6-1.5s-.2-1-.7-1.4c-.4-.3-1-.4-2-.4H9.4v3.8h4z" fill-rule="evenodd"/></svg>', + 'bookmark': '<svg width="24" height="24"><path d="M6 4v17l6-4 6 4V4c0-.6-.4-1-1-1H7a1 1 0 0 0-1 1z" fill-rule="nonzero"/></svg>', + 'border-width': '<svg width="24" height="24"><path d="M5 14.8h14a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2zm-.5 3.7h15c.3 0 .5.2.5.5s-.2.5-.5.5h-15a.5.5 0 1 1 0-1zm.5-8.3h14c.6 0 1 .4 1 1v1c0 .5-.4 1-1 1H5a1 1 0 0 1-1-1v-1c0-.6.4-1 1-1zm0-5.7h14c.6 0 1 .4 1 1v2c0 .6-.4 1-1 1H5a1 1 0 0 1-1-1v-2c0-.6.4-1 1-1z" fill-rule="evenodd"/></svg>', + 'brightness': '<svg width="24" height="24"><path d="M12 17c.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7v-1c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3zm0-10a1 1 0 0 1-.7-.3A1 1 0 0 1 11 6V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3zm7 4c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-1a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1zM7 12c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H5a1 1 0 0 1-.7-.3A1 1 0 0 1 4 12c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1c.3 0 .5.1.7.3.2.2.3.4.3.7zm10 3.5l.7.8c.2.1.3.4.3.6 0 .3-.1.6-.3.8a1 1 0 0 1-.8.3 1 1 0 0 1-.6-.3l-.8-.7a1 1 0 0 1-.3-.8c0-.2.1-.5.3-.7a1 1 0 0 1 1.4 0zm-10-7l-.7-.8a1 1 0 0 1-.3-.6c0-.3.1-.6.3-.8.2-.2.5-.3.8-.3.2 0 .5.1.7.3l.7.7c.2.2.3.5.3.8 0 .2-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.8-.3zm10 0a1 1 0 0 1-.8.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.6.3-.8l.8-.7c.1-.2.4-.3.6-.3.3 0 .6.1.8.3.2.2.3.5.3.8 0 .2-.1.5-.3.7l-.7.7zm-10 7c.2-.2.5-.3.8-.3.2 0 .5.1.7.3a1 1 0 0 1 0 1.4l-.8.8a1 1 0 0 1-.6.3 1 1 0 0 1-.8-.3 1 1 0 0 1-.3-.8c0-.2.1-.5.3-.6l.7-.8zM12 8a4 4 0 0 1 3.7 2.4 4 4 0 0 1 0 3.2A4 4 0 0 1 12 16a4 4 0 0 1-3.7-2.4 4 4 0 0 1 0-3.2A4 4 0 0 1 12 8zm0 6.5c.7 0 1.3-.2 1.8-.7.5-.5.7-1.1.7-1.8s-.2-1.3-.7-1.8c-.5-.5-1.1-.7-1.8-.7s-1.3.2-1.8.7c-.5.5-.7 1.1-.7 1.8s.2 1.3.7 1.8c.5.5 1.1.7 1.8.7z" fill-rule="evenodd"/></svg>', + 'browse': '<svg width="24" height="24"><path d="M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-4v-2h4V8H5v10h4v2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14zm-8 9.4l-2.3 2.3a1 1 0 1 1-1.4-1.4l4-4a1 1 0 0 1 1.4 0l4 4a1 1 0 0 1-1.4 1.4L13 13.4V20a1 1 0 0 1-2 0v-6.6z" fill-rule="nonzero"/></svg>', + 'cancel': '<svg width="24" height="24"><path d="M12 4.6a7.4 7.4 0 1 1 0 14.8 7.4 7.4 0 0 1 0-14.8zM12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18zm0 8L14.8 8l1 1.1-2.7 2.8 2.7 2.7-1.1 1.1-2.7-2.7-2.7 2.7-1-1.1 2.6-2.7-2.7-2.7 1-1.1 2.8 2.7z" fill-rule="nonzero"/></svg>', + 'change-case': '<svg width="24" height="24"><path d="M18.4 18.2v-.6c-.5.8-1.3 1.2-2.4 1.2-2.2 0-3.3-1.6-3.3-4.8 0-3.1 1-4.7 3.3-4.7 1.1 0 1.8.3 2.4 1.1v-.6c0-.5.4-.8.8-.8s.8.3.8.8v8.4c0 .5-.4.8-.8.8a.8.8 0 0 1-.8-.8zm-2-7.4c-1.3 0-1.8.9-1.8 3.2 0 2.4.5 3.3 1.7 3.3 1.3 0 1.8-.9 1.8-3.2 0-2.4-.5-3.3-1.7-3.3zM10 15.7H5.5l-.8 2.6a1 1 0 0 1-1 .7h-.2a.7.7 0 0 1-.7-1l4-12a1 1 0 1 1 2 0l4 12a.7.7 0 0 1-.8 1h-.2a1 1 0 0 1-1-.7l-.8-2.6zm-.3-1.5l-2-6.5-1.9 6.5h3.9z" fill-rule="evenodd"/></svg>', + 'character-count': '<svg width="24" height="24"><path d="M4 11.5h16v1H4v-1zm4.8-6.8V10H7.7V5.8h-1v-1h2zM11 8.3V9h2v1h-3V7.7l2-1v-.9h-2v-1h3v2.4l-2 1zm6.3-3.4V10h-3.1V9h2.1V8h-2.1V6.8h2.1v-1h-2.1v-1h3.1zM5.8 16.4c0-.5.2-.8.5-1 .2-.2.6-.3 1.2-.3l.8.1c.2 0 .4.2.5.3l.4.4v2.8l.2.3H8.2v-.1-.2l-.6.3H7c-.4 0-.7 0-1-.2a1 1 0 0 1-.3-.9c0-.3 0-.6.3-.8.3-.2.7-.4 1.2-.4l.6-.2h.3v-.2l-.1-.2a.8.8 0 0 0-.5-.1 1 1 0 0 0-.4 0l-.3.4h-1zm2.3.8h-.2l-.2.1-.4.1a1 1 0 0 0-.4.2l-.2.2.1.3.5.1h.4l.4-.4v-.6zm2-3.4h1.2v1.7l.5-.3h.5c.5 0 .9.1 1.2.5.3.4.5.8.5 1.4 0 .6-.2 1.1-.5 1.5-.3.4-.7.6-1.3.6l-.6-.1-.4-.4v.4h-1.1v-5.4zm1.1 3.3c0 .3 0 .6.2.8a.7.7 0 0 0 1.2 0l.2-.8c0-.4 0-.6-.2-.8a.7.7 0 0 0-.6-.3l-.6.3-.2.8zm6.1-.5c0-.2 0-.3-.2-.4a.8.8 0 0 0-.5-.2c-.3 0-.5.1-.6.3l-.2.9c0 .3 0 .6.2.8.1.2.3.3.6.3.2 0 .4 0 .5-.2l.2-.4h1.1c0 .5-.3.8-.6 1.1a2 2 0 0 1-1.3.4c-.5 0-1-.2-1.3-.6a2 2 0 0 1-.5-1.4c0-.6.1-1.1.5-1.5.3-.4.8-.5 1.4-.5.5 0 1 0 1.2.3.4.3.5.7.5 1.2h-1v-.1z" fill-rule="evenodd"/></svg>', + 'checklist-rtl': '<svg width="24" height="24"><path d="M5 17h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm14.2 11c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 8c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z" fill-rule="evenodd"/></svg>', + 'checklist': '<svg width="24" height="24"><path d="M11 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2h-8a1 1 0 0 1 0-2zM7.2 16c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 8c-.2.3-.7.4-1 0L3.8 6.9a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z" fill-rule="evenodd"/></svg>', + 'checkmark': '<svg width="24" height="24"><path d="M18.2 5.4a1 1 0 0 1 1.6 1.2l-8 12a1 1 0 0 1-1.5.1l-5-5a1 1 0 1 1 1.4-1.4l4.1 4.1 7.4-11z" fill-rule="nonzero"/></svg>', + 'chevron-down': '<svg width="10" height="10"><path d="M8.7 2.2c.3-.3.8-.3 1 0 .4.4.4.9 0 1.2L5.7 7.8c-.3.3-.9.3-1.2 0L.2 3.4a.8.8 0 0 1 0-1.2c.3-.3.8-.3 1.1 0L5 6l3.7-3.8z" fill-rule="nonzero"/></svg>', + 'chevron-left': '<svg width="10" height="10"><path d="M7.8 1.3L4 5l3.8 3.7c.3.3.3.8 0 1-.4.4-.9.4-1.2 0L2.2 5.7a.8.8 0 0 1 0-1.2L6.6.2C7 0 7.4 0 7.8.2c.3.3.3.8 0 1.1z" fill-rule="nonzero"/></svg>', + 'chevron-right': '<svg width="10" height="10"><path d="M2.2 1.3a.8.8 0 0 1 0-1c.4-.4.9-.4 1.2 0l4.4 4.1c.3.4.3.9 0 1.2L3.4 9.8c-.3.3-.8.3-1.2 0a.8.8 0 0 1 0-1.1L6 5 2.2 1.3z" fill-rule="nonzero"/></svg>', + 'chevron-up': '<svg width="10" height="10"><path d="M8.7 7.8L5 4 1.3 7.8c-.3.3-.8.3-1 0a.8.8 0 0 1 0-1.2l4.1-4.4c.3-.3.9-.3 1.2 0l4.2 4.4c.3.3.3.9 0 1.2-.3.3-.8.3-1.1 0z" fill-rule="nonzero"/></svg>', + 'close': '<svg width="24" height="24"><path d="M17.3 8.2L13.4 12l3.9 3.8a1 1 0 0 1-1.5 1.5L12 13.4l-3.8 3.9a1 1 0 0 1-1.5-1.5l3.9-3.8-3.9-3.8a1 1 0 0 1 1.5-1.5l3.8 3.9 3.8-3.9a1 1 0 0 1 1.5 1.5z" fill-rule="evenodd"/></svg>', + 'code-sample': '<svg width="24" height="26"><path d="M7.1 11a2.8 2.8 0 0 1-.8 2 2.8 2.8 0 0 1 .8 2v1.7c0 .3.1.6.4.8.2.3.5.4.8.4.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.7 0-1.4-.3-2-.8-.5-.6-.8-1.3-.8-2V15c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 0 1-.4-.4v-.8c0-.2.2-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V9.3c0-.7.3-1.4.8-2 .6-.5 1.3-.8 2-.8.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8V11zm9.8 0V9.3c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 0 1-.4-.4V7c0-.2.1-.4.4-.4.7 0 1.4.3 2 .8.5.6.8 1.3.8 2V11c0 .3.1.6.4.8.2.3.5.4.8.4.2 0 .4.2.4.4v.8c0 .2-.2.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8v1.7c0 .7-.3 1.4-.8 2-.6.5-1.3.8-2 .8a.4.4 0 0 1-.4-.4v-.8c0-.2.1-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V15a2.8 2.8 0 0 1 .8-2 2.8 2.8 0 0 1-.8-2zm-3.3-.4c0 .4-.1.8-.5 1.1-.3.3-.7.5-1.1.5-.4 0-.8-.2-1.1-.5-.4-.3-.5-.7-.5-1.1 0-.5.1-.9.5-1.2.3-.3.7-.4 1.1-.4.4 0 .8.1 1.1.4.4.3.5.7.5 1.2zM12 13c.4 0 .8.1 1.1.5.4.3.5.7.5 1.1 0 1-.1 1.6-.5 2a3 3 0 0 1-1.1 1c-.4.3-.8.4-1.1.4a.5.5 0 0 1-.5-.5V17a3 3 0 0 0 1-.2l.6-.6c-.6 0-1-.2-1.3-.5-.2-.3-.3-.7-.3-1 0-.5.1-1 .5-1.2.3-.4.7-.5 1.1-.5z" fill-rule="evenodd"/></svg>', + 'color-levels': '<svg width="24" height="24"><path d="M17.5 11.4A9 9 0 0 1 18 14c0 .5 0 1-.2 1.4 0 .4-.3.9-.5 1.3a6.2 6.2 0 0 1-3.7 3 5.7 5.7 0 0 1-3.2 0A5.9 5.9 0 0 1 7.6 18a6.2 6.2 0 0 1-1.4-2.6 6.7 6.7 0 0 1 0-2.8c0-.4.1-.9.3-1.3a13.6 13.6 0 0 1 2.3-4A20 20 0 0 1 12 4a26.4 26.4 0 0 1 3.2 3.4 18.2 18.2 0 0 1 2.3 4zm-2 4.5c.4-.7.5-1.4.5-2a7.3 7.3 0 0 0-1-3.2c.2.6.2 1.2.2 1.9a4.5 4.5 0 0 1-1.3 3 5.3 5.3 0 0 1-2.3 1.5 4.9 4.9 0 0 1-2 .1 4.3 4.3 0 0 0 2.4.8 4 4 0 0 0 2-.6 4 4 0 0 0 1.5-1.5z" fill-rule="evenodd"/></svg>', + 'color-picker': '<svg width="24" height="24"><path d="M12 3a9 9 0 0 0 0 18 1.5 1.5 0 0 0 1.1-2.5c-.2-.3-.4-.6-.4-1 0-.8.7-1.5 1.5-1.5H16a5 5 0 0 0 5-5c0-4.4-4-8-9-8zm-5.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm3-4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm3 4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z" fill-rule="nonzero"/></svg>', + 'color-swatch-remove-color': '<svg width="24" height="24"><path stroke="#000" stroke-width="2" d="M21 3L3 21" fill-rule="evenodd"/></svg>', + 'color-swatch': '<svg width="24" height="24"><rect x="3" y="3" width="18" height="18" rx="1" fill-rule="evenodd"/></svg>', + 'comment-add': '<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 0 0-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3h-6.4L7 23z"/><path d="M13 10h2a1 1 0 0 1 0 2h-2v2a1 1 0 0 1-2 0v-2H9a1 1 0 0 1 0-2h2V8a1 1 0 0 1 2 0v2z"/></g></svg>', + 'comment': '<svg width="24" height="24"><path fill-rule="nonzero" d="M9 19l3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 0 0-1 1v10c0 .6.4 1 1 1h4v2zm-2 4v-4H5a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3h-6.4L7 23z"/></svg>', + 'contrast': '<svg width="24" height="24"><path d="M12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4zm-6 8a6 6 0 0 0 6 6V6a6 6 0 0 0-6 6z" fill-rule="evenodd"/></svg>', + 'copy': '<svg width="24" height="24"><path d="M16 3H6a2 2 0 0 0-2 2v11h2V5h10V3zm1 4a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V9c0-1.2.9-2 2-2h7zm0 12V9h-7v10h7z" fill-rule="nonzero"/></svg>', + 'crop': '<svg width="24" height="24"><path d="M17 8v7h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v2c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-2H7V9H5a1 1 0 1 1 0-2h2V5c0-.6.4-1 1-1s1 .4 1 1v2h7l3-3 1 1-3 3zM9 9v5l5-5H9zm1 6h5v-5l-5 5z" fill-rule="evenodd"/></svg>', + 'cut': '<svg width="24" height="24"><path d="M18 15c.6.7 1 1.4 1 2.3 0 .8-.2 1.5-.7 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 0 1-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 0 1 8.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 0 1 0-2c0-.4.3-.7.5-1l6 6 6-6 .5 1a3.3 3.3 0 0 1 0 2c0 .4-.3.7-.5 1l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8zm-8.5 2.2l.1-.4v-.3-.4a1 1 0 0 0-.2-.5 1 1 0 0 0-.4-.2 1.6 1.6 0 0 0-.8 0 2.6 2.6 0 0 0-.8.3 2.5 2.5 0 0 0-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 0 0 .8-.3 2.8 2.8 0 0 0 1-1zm2.5-2.8c.4 0 .7-.1 1-.4.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4s-.7.1-1 .4c-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4zm5.4 4l.2-.5v-.4-.3a2.6 2.6 0 0 0-.3-.8 2.4 2.4 0 0 0-.7-.7 2.5 2.5 0 0 0-.8-.3 1.5 1.5 0 0 0-.8 0 1 1 0 0 0-.4.2 1 1 0 0 0-.2.5 1.5 1.5 0 0 0 0 .7v.4l.3.4.3.4a2.8 2.8 0 0 0 .8.5l.4.1h.7l.5-.2z" fill-rule="evenodd"/></svg>', + 'document-properties': '<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z" fill-rule="nonzero"/></svg>', + 'drag': '<svg width="24" height="24"><path d="M13 5h2v2h-2V5zm0 4h2v2h-2V9zM9 9h2v2H9V9zm4 4h2v2h-2v-2zm-4 0h2v2H9v-2zm0 4h2v2H9v-2zm4 0h2v2h-2v-2zM9 5h2v2H9V5z" fill-rule="evenodd"/></svg>', + 'duplicate': '<svg width="24" height="24"><g fill-rule="nonzero"><path d="M16 3v2H6v11H4V5c0-1.1.9-2 2-2h10zm3 8h-2V9h-7v10h9a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V9c0-1.2.9-2 2-2h7a2 2 0 0 1 2 2v2z"/><path d="M17 14h1a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1h-1a1 1 0 0 1 0-2h1v-1a1 1 0 0 1 2 0v1z"/></g></svg>', + 'edit-block': '<svg width="24" height="24"><path fill-rule="nonzero" d="M19.8 8.8l-9.4 9.4c-.2.2-.5.4-.9.4l-5.4 1.2 1.2-5.4.5-.8 9.4-9.4c.7-.7 1.8-.7 2.5 0l2.1 2.1c.7.7.7 1.8 0 2.5zm-2-.2l1-.9v-.3l-2.2-2.2a.3.3 0 0 0-.3 0l-1 1L18 8.5zm-1 1l-2.5-2.4-6 6 2.5 2.5 6-6zm-7 7.1l-2.6-2.4-.3.3-.1.2-.7 3 3.1-.6h.1l.4-.5z"/></svg>', + 'edit-image': '<svg width="24" height="24"><path d="M18 16h2V7a2 2 0 0 0-2-2H7v2h11v9zM6 17h15a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1H6a2 2 0 0 1-2-2V7H3a1 1 0 1 1 0-2h1V4a1 1 0 1 1 2 0v13zm3-5.3l1.3 2 3-4.7 3.7 6H7l2-3.3z" fill-rule="nonzero"/></svg>', + 'embed-page': '<svg width="24" height="24"><path d="M19 6V5H5v14h2A13 13 0 0 1 19 6zm0 1.4c-.8.8-1.6 2.4-2.2 4.6H19V7.4zm0 5.6h-2.4c-.4 1.8-.6 3.8-.6 6h3v-6zm-4 6c0-2.2.2-4.2.6-6H13c-.7 1.8-1.1 3.8-1.1 6h3zm-4 0c0-2.2.4-4.2 1-6H9.6A12 12 0 0 0 8 19h3zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm11.8 9c.4-1.9 1-3.4 1.8-4.5a9.2 9.2 0 0 0-4 4.5h2.2zm-3.4 0a12 12 0 0 1 2.8-4 12 12 0 0 0-5 4h2.2z" fill-rule="nonzero"/></svg>', + 'embed': '<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm4.8 2.6l5.6 4a.5.5 0 0 1 0 .8l-5.6 4A.5.5 0 0 1 9 16V8a.5.5 0 0 1 .8-.4z" fill-rule="nonzero"/></svg>', + 'emoji': '<svg width="24" height="24"><path d="M9 11c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 0 0-1 1c0 .6.4 1 1 1zm6 0c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 0 0-1 1c0 .6.4 1 1 1zm-3 5.5c2.1 0 4-1.5 4.4-3.5H7.6c.5 2 2.3 3.5 4.4 3.5zM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16zm0 14.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13z" fill-rule="nonzero"/></svg>', + 'fill': '<svg width="24" height="26"><path d="M16.6 12l-9-9-1.4 1.4 2.4 2.4-5.2 5.1c-.5.6-.5 1.6 0 2.2L9 19.6a1.5 1.5 0 0 0 2.2 0l5.5-5.5c.5-.6.5-1.6 0-2.2zM5.2 13L10 8.2l4.8 4.8H5.2zM19 14.5s-2 2.2-2 3.5c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.3-2-3.5-2-3.5z" fill-rule="nonzero"/></svg>', + 'flip-horizontally': '<svg width="24" height="24"><path d="M14 19h2v-2h-2v2zm4-8h2V9h-2v2zM4 7v10c0 1.1.9 2 2 2h3v-2H6V7h3V5H6a2 2 0 0 0-2 2zm14-2v2h2a2 2 0 0 0-2-2zm-7 16h2V3h-2v18zm7-6h2v-2h-2v2zm-4-8h2V5h-2v2zm4 12a2 2 0 0 0 2-2h-2v2z" fill-rule="nonzero"/></svg>', + 'flip-vertically': '<svg width="24" height="24"><path d="M5 14v2h2v-2H5zm8 4v2h2v-2h-2zm4-14H7a2 2 0 0 0-2 2v3h2V6h10v3h2V6a2 2 0 0 0-2-2zm2 14h-2v2a2 2 0 0 0 2-2zM3 11v2h18v-2H3zm6 7v2h2v-2H9zm8-4v2h2v-2h-2zM5 18c0 1.1.9 2 2 2v-2H5z" fill-rule="nonzero"/></svg>', + 'format-painter': '<svg width="24" height="24"><path d="M18 5V4c0-.5-.4-1-1-1H5a1 1 0 0 0-1 1v4c0 .6.5 1 1 1h12c.6 0 1-.4 1-1V7h1v4H9v9c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-7h8V5h-3z" fill-rule="nonzero"/></svg>', + 'fullscreen': '<svg width="24" height="24"><path d="M15.3 10l-1.2-1.3 2.9-3h-2.3a.9.9 0 1 1 0-1.7H19c.5 0 .9.4.9.9v4.4a.9.9 0 1 1-1.8 0V7l-2.9 3zm0 4l3 3v-2.3a.9.9 0 1 1 1.7 0V19c0 .5-.4.9-.9.9h-4.4a.9.9 0 1 1 0-1.8H17l-3-2.9 1.3-1.2zM10 15.4l-2.9 3h2.3a.9.9 0 1 1 0 1.7H5a.9.9 0 0 1-.9-.9v-4.4a.9.9 0 1 1 1.8 0V17l2.9-3 1.2 1.3zM8.7 10L5.7 7v2.3a.9.9 0 0 1-1.7 0V5c0-.5.4-.9.9-.9h4.4a.9.9 0 0 1 0 1.8H7l3 2.9-1.3 1.2z" fill-rule="nonzero"/></svg>', + 'gallery': '<svg width="24" height="24"><path fill-rule="nonzero" d="M5 15.7l2.3-2.2c.3-.3.7-.3 1 0L11 16l5.1-5c.3-.4.8-.4 1 0l2 1.9V8H5v7.7zM5 18V19h3l1.8-1.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 6h16c.6 0 1 .4 1 1v13c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V7c0-.6.4-1 1-1zm6 7a2 2 0 1 1 0-4 2 2 0 0 1 0 4zM4.5 4h15a.5.5 0 1 1 0 1h-15a.5.5 0 0 1 0-1zm2-2h11a.5.5 0 1 1 0 1h-11a.5.5 0 0 1 0-1z"/></svg>', + 'gamma': '<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm1 2v14h14V5H5zm6.5 11.8V14L9.2 8.7a5.1 5.1 0 0 0-.4-.8l-.1-.2H8 8v-1l.3-.1.3-.1h.7a1 1 0 0 1 .6.5l.1.3a8.5 8.5 0 0 1 .3.6l1.9 4.6 2-5.2a1 1 0 0 1 1-.6.5.5 0 0 1 .5.6L13 14v2.8a.7.7 0 0 1-1.4 0z" fill-rule="nonzero"/></svg>', + 'help': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M12 5.5a6.5 6.5 0 0 0-6 9 6.3 6.3 0 0 0 1.4 2l1 1a6.3 6.3 0 0 0 3.6 1 6.5 6.5 0 0 0 6-9 6.3 6.3 0 0 0-1.4-2l-1-1a6.3 6.3 0 0 0-3.6-1zM12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4z"/><path d="M9.6 9.7a.7.7 0 0 1-.7-.8c0-1.1 1.5-1.8 3.2-1.8 1.8 0 3.2.8 3.2 2.4 0 1.4-.4 2.1-1.5 2.8-.2 0-.3.1-.3.2a2 2 0 0 0-.8.8.8.8 0 0 1-1.4-.6c.3-.7.8-1 1.3-1.5l.4-.2c.7-.4.8-.6.8-1.5 0-.5-.6-.9-1.7-.9-.5 0-1 .1-1.4.3-.2 0-.3.1-.3.2v-.2c0 .4-.4.8-.8.8z" fill-rule="nonzero"/><circle cx="12" cy="16" r="1"/></g></svg>', + 'highlight-bg-color': '<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-highlight-bg-color__color" d="M3 18h18v3H3z"/><path fill-rule="nonzero" d="M7.7 16.7H3l3.3-3.3-.7-.8L10.2 8l4 4.1-4 4.2c-.2.2-.6.2-.8 0l-.6-.7-1.1 1.1zm5-7.5L11 7.4l3-2.9a2 2 0 0 1 2.6 0L18 6c.7.7.7 2 0 2.7l-2.9 2.9-1.8-1.8-.5-.6"/></g></svg>', + 'home': '<svg width="24" height="24"><path fill-rule="nonzero" d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>', + 'horizontal-rule': '<svg width="24" height="24"><path d="M4 11h16v2H4z" fill-rule="evenodd"/></svg>', + 'image-options': '<svg width="24" height="24"><path d="M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2z" fill-rule="nonzero"/></svg>', + 'image': '<svg width="24" height="24"><path d="M5 15.7l3.3-3.2c.3-.3.7-.3 1 0L12 15l4.1-4c.3-.4.8-.4 1 0l2 1.9V5H5v10.7zM5 18V19h3l2.8-2.9-2-2L5 17.9zm14-3l-2.5-2.4-6.4 6.5H19v-4zM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1zm6 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4z" fill-rule="nonzero"/></svg>', + 'indent': '<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2zm-2.6-3.8L6.2 12l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6z" fill-rule="evenodd"/></svg>', + 'info': '<svg width="24" height="24"><path d="M12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4zm-1 3v2h2V7h-2zm3 10v-1h-1v-5h-3v1h1v4h-1v1h4z" fill-rule="evenodd"/></svg>', + 'insert-character': '<svg width="24" height="24"><path d="M15 18h4l1-2v4h-6v-3.3l1.4-1a6 6 0 0 0 1.8-2.9 6.3 6.3 0 0 0-.1-4.1 5.8 5.8 0 0 0-3-3.2c-.6-.3-1.3-.5-2.1-.5a5.1 5.1 0 0 0-3.9 1.8 6.3 6.3 0 0 0-1.3 6 6.2 6.2 0 0 0 1.8 3l1.4.9V20H4v-4l1 2h4v-.5l-2-1L5.4 15A6.5 6.5 0 0 1 4 11c0-1 .2-1.9.6-2.7A7 7 0 0 1 6.3 6C7.1 5.4 8 5 9 4.5c1-.3 2-.5 3.1-.5a8.8 8.8 0 0 1 5.7 2 7 7 0 0 1 1.7 2.3 6 6 0 0 1 .2 4.8c-.2.7-.6 1.3-1 1.9a7.6 7.6 0 0 1-3.6 2.5v.5z" fill-rule="evenodd"/></svg>', + 'insert-time': '<svg width="24" height="24"><g fill-rule="nonzero"><path d="M12 19a7 7 0 1 0 0-14 7 7 0 0 0 0 14zm0 2a9 9 0 1 1 0-18 9 9 0 0 1 0 18z"/><path d="M16 12h-3V7c0-.6-.4-1-1-1a1 1 0 0 0-1 1v7h5c.6 0 1-.4 1-1s-.4-1-1-1z"/></g></svg>', + 'invert': '<svg width="24" height="24"><path d="M18 19.3L16.5 18a5.8 5.8 0 0 1-3.1 1.9 6.1 6.1 0 0 1-5.5-1.6A5.8 5.8 0 0 1 6 14v-.3l.1-1.2A13.9 13.9 0 0 1 7.7 9l-3-3 .7-.8 2.8 2.9 9 8.9 1.5 1.6-.7.6zm0-5.5v.3l-.1 1.1-.4 1-1.2-1.2a4.3 4.3 0 0 0 .2-1v-.2c0-.4 0-.8-.2-1.3l-.5-1.4a14.8 14.8 0 0 0-3-4.2L12 6a26.1 26.1 0 0 0-2.2 2.5l-1-1a20.9 20.9 0 0 1 2.9-3.3L12 4l1 .8a22.2 22.2 0 0 1 4 5.4c.6 1.2 1 2.4 1 3.6z" fill-rule="evenodd"/></svg>', + 'italic': '<svg width="24" height="24"><path d="M16.7 4.7l-.1.9h-.3c-.6 0-1 0-1.4.3-.3.3-.4.6-.5 1.1l-2.1 9.8v.6c0 .5.4.8 1.4.8h.2l-.2.8H8l.2-.8h.2c1.1 0 1.8-.5 2-1.5l2-9.8.1-.5c0-.6-.4-.8-1.4-.8h-.3l.2-.9h5.8z" fill-rule="evenodd"/></svg>', + 'line': '<svg width="24" height="24"><path d="M15 9l-8 8H4v-3l8-8 3 3zm1-1l-3-3 1-1h1c-.2 0 0 0 0 0l2 2s0 .2 0 0v1l-1 1zM4 18h16v2H4v-2z" fill-rule="evenodd"/></svg>', + 'link': '<svg width="24" height="24"><path d="M6.2 12.3a1 1 0 0 1 1.4 1.4l-2.1 2a2 2 0 1 0 2.7 2.8l4.8-4.8a1 1 0 0 0 0-1.4 1 1 0 1 1 1.4-1.3 2.9 2.9 0 0 1 0 4L9.6 20a3.9 3.9 0 0 1-5.5-5.5l2-2zm11.6-.6a1 1 0 0 1-1.4-1.4l2-2a2 2 0 1 0-2.6-2.8L11 10.3a1 1 0 0 0 0 1.4A1 1 0 1 1 9.6 13a2.9 2.9 0 0 1 0-4L14.4 4a3.9 3.9 0 0 1 5.5 5.5l-2 2z" fill-rule="nonzero"/></svg>', + 'list-bull-circle': '<svg width="48" height="48"><g fill-rule="evenodd"><path d="M11 16a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6zM11 26a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6zM11 36a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6z" fill-rule="nonzero"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>', + 'list-bull-default': '<svg width="48" height="48"><g fill-rule="evenodd"><circle cx="11" cy="14" r="3"/><circle cx="11" cy="24" r="3"/><circle cx="11" cy="34" r="3"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>', + 'list-bull-square': '<svg width="48" height="48"><g fill-rule="evenodd"><path d="M8 11h6v6H8zM8 21h6v6H8zM8 31h6v6H8z"/><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/></g></svg>', + 'list-num-default-rtl': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M37.4 17v-4.8l-1.6 1v-1.1l1.6-1h1.2V17zM33.3 17.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm1.7 5.7c0-1.2 1-2 2.2-2 1.3 0 2.1.8 2.1 1.8 0 .7-.3 1.2-1.3 2.2l-1.2 1v.2h2.6v1h-4.3v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H35zm-1.7 4.3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm3.2 7.3v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H35c0-1.1 1-1.8 2.2-1.8 1.2 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.7.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .6 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm-3.3 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z"/></g></svg>', + 'list-num-default': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10 17v-4.8l-1.5 1v-1.1l1.6-1h1.2V17h-1.2zm3.6.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-5 5.7c0-1.2.8-2 2.1-2s2.1.8 2.1 1.8c0 .7-.3 1.2-1.4 2.2l-1.1 1v.2h2.6v1H8.6v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H8.5zm6.3 4.3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM10 34.4v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H8.6c0-1.1 1-1.8 2.2-1.8 1.3 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.8.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .7 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm4.7 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z"/></g></svg>', + 'list-num-lower-alpha-rtl': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M36.5 16c-.9 0-1.5-.5-1.5-1.3s.6-1.3 1.8-1.4h1v-.4c0-.4-.2-.6-.7-.6-.4 0-.7.1-.8.4h-1.1c0-.8.8-1.4 2-1.4S39 12 39 13V16h-1.2v-.6c-.3.4-.8.7-1.4.7zm.4-.8c.6 0 1-.4 1-.9V14h-1c-.5.1-.7.3-.7.6 0 .4.3.6.7.6zM33.1 16.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zM37.7 26c-.7 0-1.2-.2-1.5-.7v.7H35v-6.3h1.2v2.5c.3-.5.8-.9 1.5-.9 1.1 0 1.8 1 1.8 2.4 0 1.5-.7 2.4-1.8 2.4zm-.5-3.6c-.6 0-1 .5-1 1.3s.4 1.4 1 1.4c.7 0 1-.6 1-1.4 0-.8-.3-1.3-1-1.3zM33.2 26.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm6 7h-1c-.1-.5-.4-.8-1-.8s-1 .5-1 1.4c0 1 .4 1.4 1 1.4.5 0 .9-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm-6.1 3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>', + 'list-num-lower-alpha': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10.3 15.2c.5 0 1-.4 1-.9V14h-1c-.5.1-.8.3-.8.6 0 .4.3.6.8.6zm-.4.9c-1 0-1.5-.6-1.5-1.4 0-.8.6-1.3 1.7-1.4h1.1v-.4c0-.4-.2-.6-.7-.6-.5 0-.8.1-.9.4h-1c0-.8.8-1.4 2-1.4 1.1 0 1.8.6 1.8 1.6V16h-1.1v-.6h-.1c-.2.4-.7.7-1.3.7zm4.6 0c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-3.2 10c-.6 0-1.2-.3-1.4-.8v.7H8.5v-6.3H10v2.5c.3-.5.8-.9 1.4-.9 1.2 0 1.9 1 1.9 2.4 0 1.5-.7 2.4-1.9 2.4zm-.4-3.7c-.7 0-1 .5-1 1.3s.3 1.4 1 1.4c.6 0 1-.6 1-1.4 0-.8-.4-1.3-1-1.3zm4 3.7c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-2.2 7h-1.2c0-.5-.4-.8-.9-.8-.6 0-1 .5-1 1.4 0 1 .4 1.4 1 1.4.5 0 .8-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm1.8 3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>', + 'list-num-lower-greek-rtl': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M37.4 16c-1.2 0-2-.8-2-2.3 0-1.5.8-2.4 2-2.4.6 0 1 .4 1.3 1v-.9H40v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1-.7h-.2c-.2.4-.7.8-1.3.8zm.3-1c.6 0 1-.5 1-1.3s-.4-1.3-1-1.3-1 .5-1 1.3.4 1.4 1 1.4zM33.3 16.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM36 21.9c0-1.5.8-2.3 2.1-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.9 1.3.9.3 1.3.8 1.3 1.7 0 1.2-.7 1.9-1.8 1.9-.6 0-1.1-.3-1.4-.8v2.2H36V22zm1.8 1.2v-1h.3c.5 0 .9-.2.9-.7 0-.5-.3-.8-.9-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1 1.3s1-.4 1-1-.4-1-1.2-1h-.3zM33.3 26.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zM37.1 34.6L34.8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.2.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 0 0-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zM33.3 36.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>', + 'list-num-lower-greek': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M10.5 15c.7 0 1-.5 1-1.3s-.3-1.3-1-1.3c-.5 0-.9.5-.9 1.3s.4 1.4 1 1.4zm-.3 1c-1.1 0-1.8-.8-1.8-2.3 0-1.5.7-2.4 1.8-2.4.7 0 1.1.4 1.3 1h.1v-.9h1.2v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1.1-.7h-.1c-.2.4-.7.8-1.4.8zm5 .1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm-4.9 7v-1h.3c.6 0 1-.2 1-.7 0-.5-.4-.8-1-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1.1 1.3.6 0 1-.4 1-1s-.5-1-1.3-1h-.3zM8.6 22c0-1.5.7-2.3 2-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.8 1.3.8.3 1.3.8 1.3 1.7 0 1.2-.8 1.9-1.9 1.9-.6 0-1.1-.3-1.3-.8v2.2H8.5V22zm6.2 4.2c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm-4.5 8.5L8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.1.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2zm.7 1a2 2 0 0 0-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1zm4.5.5c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>', + 'list-num-lower-roman-rtl': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M32.9 16v-1.2h-1.3V16H33zm0 10v-1.2h-1.3V26H33zm0 10v-1.2h-1.3V36H33z"/><path fill-rule="nonzero" d="M36 21h-1.5v5H36zM36 31h-1.5v5H36zM39 21h-1.5v5H39zM39 31h-1.5v5H39zM42 31h-1.5v5H42zM36 11h-1.5v5H36zM36 19h-1.5v1H36zM36 29h-1.5v1H36zM39 19h-1.5v1H39zM39 29h-1.5v1H39zM42 29h-1.5v1H42zM36 9h-1.5v1H36z"/></g></svg>', + 'list-num-lower-roman': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 16v-1.2h1.3V16H15zm0 10v-1.2h1.3V26H15zm0 10v-1.2h1.3V36H15z"/><path fill-rule="nonzero" d="M12 21h1.5v5H12zM12 31h1.5v5H12zM9 21h1.5v5H9zM9 31h1.5v5H9zM6 31h1.5v5H6zM12 11h1.5v5H12zM12 19h1.5v1H12zM12 29h1.5v1H12zM9 19h1.5v1H9zM9 29h1.5v1H9zM6 29h1.5v1H6zM12 9h1.5v1H12z"/></g></svg>', + 'list-num-upper-alpha-rtl': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M39.3 17l-.5-1.4h-2l-.5 1.4H35l2-6h1.6l2 6h-1.3zm-1.6-4.7l-.7 2.3h1.6l-.8-2.3zM33.4 17c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zm4.7 9.9h-2.7v-6H38c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zm-1.4-5v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4h1.1c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9h-1.1V26zM33 27.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm4.9 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm-4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>', + 'list-num-upper-alpha': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M12.6 17l-.5-1.4h-2L9.5 17H8.3l2-6H12l2 6h-1.3zM11 12.3l-.7 2.3h1.6l-.8-2.3zm4.7 4.8c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7zM11.4 27H8.7v-6h2.6c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7zM10 22v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1zm0 4H11c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9H10V26zm5.4 1.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm-4.1 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2zm4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z"/></g></svg>', + 'list-num-upper-roman-rtl': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z"/><path d="M31.6 17v-1.2H33V17h-1.3zm0 10v-1.2H33V27h-1.3zm0 10v-1.2H33V37h-1.3z"/><path fill-rule="nonzero" d="M34.5 20H36v7h-1.5zM34.5 30H36v7h-1.5zM37.5 20H39v7h-1.5zM37.5 30H39v7h-1.5zM40.5 30H42v7h-1.5zM34.5 10H36v7h-1.5z"/></g></svg>', + 'list-num-upper-roman': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 17v-1.2h1.3V17H15zm0 10v-1.2h1.3V27H15zm0 10v-1.2h1.3V37H15z"/><path fill-rule="nonzero" d="M12 20h1.5v7H12zM12 30h1.5v7H12zM9 20h1.5v7H9zM9 30h1.5v7H9zM6 30h1.5v7H6zM12 10h1.5v7H12z"/></g></svg>', + 'lock': '<svg width="24" height="24"><path d="M16.3 11c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H8V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h.3zM10 8v3h4V8a1 1 0 0 0-.3-.7A1 1 0 0 0 13 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7z" fill-rule="evenodd"/></svg>', + 'ltr': '<svg width="24" height="24"><path d="M11 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 7.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L11 5zM4.4 16.2L6.2 15l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6z" fill-rule="evenodd"/></svg>', + 'more-drawer': '<svg width="24" height="24"><path d="M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2z" fill-rule="nonzero"/></svg>', + 'new-document': '<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3zM17 19H7V5h6v4h4v10z" fill-rule="nonzero"/></svg>', + 'new-tab': '<svg width="24" height="24"><path d="M15 13l2-2v8H5V7h8l-2 2H7v8h8v-4zm4-8v5.5l-2-2-5.6 5.5H10v-1.4L15.5 7l-2-2H19z" fill-rule="evenodd"/></svg>', + 'non-breaking': '<svg width="24" height="24"><path d="M11 11H8a1 1 0 1 1 0-2h3V6c0-.6.4-1 1-1s1 .4 1 1v3h3c.6 0 1 .4 1 1s-.4 1-1 1h-3v3c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-3zm10 4v5H3v-5c0-.6.4-1 1-1s1 .4 1 1v3h14v-3c0-.6.4-1 1-1s1 .4 1 1z" fill-rule="evenodd"/></svg>', + 'notice': '<svg width="24" height="24"><path d="M17.8 9.8L15.4 4 20 8.5v7L15.5 20h-7L4 15.5v-7L8.5 4h7l2.3 5.8zm0 0l2.2 5.7-2.3-5.8zM13 17v-2h-2v2h2zm0-4V7h-2v6h2z" fill-rule="evenodd"/></svg>', + 'ordered-list-rtl': '<svg width="24" height="24"><path d="M6 17h8a1 1 0 0 1 0 2H6a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2H6a1 1 0 0 1 0-2zm0-6h8a1 1 0 0 1 0 2H6a1 1 0 1 1 0-2zm13-1v3.5a.5.5 0 1 1-1 0V5h-.5a.5.5 0 1 1 0-1H19zm-1 8.8l.2.2h1.3a.5.5 0 1 1 0 1h-1.6a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2h-1.3a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zm2 4.2v2c0 .6-.4 1-1 1h-1.5a.5.5 0 0 1 0-1h1.2a.3.3 0 1 0 0-.6h-1.3a.4.4 0 1 1 0-.8h1.3a.3.3 0 0 0 0-.6h-1.2a.5.5 0 1 1 0-1H19c.6 0 1 .4 1 1z" fill-rule="evenodd"/></svg>', + 'ordered-list': '<svg width="24" height="24"><path d="M10 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 1 1 0-2zM6 4v3.5c0 .3-.2.5-.5.5a.5.5 0 0 1-.5-.5V5h-.5a.5.5 0 0 1 0-1H6zm-1 8.8l.2.2h1.3c.3 0 .5.2.5.5s-.2.5-.5.5H4.9a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2H4.5a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3zM7 17v2c0 .6-.4 1-1 1H4.5a.5.5 0 0 1 0-1h1.2c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.4a.4.4 0 1 1 0-.8h1.3c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.5a.5.5 0 1 1 0-1H6c.6 0 1 .4 1 1z" fill-rule="evenodd"/></svg>', + 'orientation': '<svg width="24" height="24"><path d="M7.3 6.4L1 13l6.4 6.5 6.5-6.5-6.5-6.5zM3.7 13l3.6-3.7L11 13l-3.7 3.7-3.6-3.7zM12 6l2.8 2.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0L9.2 5.7a.8.8 0 0 1 0-1.2L13.6.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L12 4h1a9 9 0 1 1-4.3 16.9l1.5-1.5A7 7 0 1 0 13 6h-1z" fill-rule="nonzero"/></svg>', + 'outdent': '<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2zm1.6-3.8a1 1 0 0 1-1.2 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 0 1 1.2 1.6L6.8 12l1.8 1.2z" fill-rule="evenodd"/></svg>', + 'page-break': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M5 11c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1h-1a1 1 0 0 1 0-2zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zM7 3v5h10V3c0-.6.4-1 1-1s1 .4 1 1v7H5V3c0-.6.4-1 1-1s1 .4 1 1zM6 22a1 1 0 0 1-1-1v-7h14v7c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5H7v5c0 .6-.4 1-1 1z"/></g></svg>', + 'paragraph': '<svg width="24" height="24"><path d="M10 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 6.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L10 5z" fill-rule="evenodd"/></svg>', + 'paste-text': '<svg width="24" height="24"><path d="M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0 1 12 1a3 3 0 0 1 2.8 2H18a2 2 0 0 1 2 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 0 0-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1zm0 9h6v2h-.5l-.5-1h-1v4h.8v1h-3.6v-1h.8v-4h-1l-.5 1H12v-2z" fill-rule="nonzero"/></svg>', + 'paste': '<svg width="24" height="24"><path d="M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h3V9h9zM9 20H6a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0 1 12 1a3 3 0 0 1 2.8 2H18a2 2 0 0 1 2 2v4h1v12H9v-1zm1.5-9.5v9h9v-9h-9zM12 3a1 1 0 0 0-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1z" fill-rule="nonzero"/></svg>', + 'permanent-pen': '<svg width="24" height="24"><path d="M10.5 17.5L8 20H3v-3l3.5-3.5a2 2 0 0 1 0-3L14 3l1 1-7.3 7.3a1 1 0 0 0 0 1.4l3.6 3.6c.4.4 1 .4 1.4 0L20 9l1 1-7.6 7.6a2 2 0 0 1-2.8 0l-.1-.1z" fill-rule="nonzero"/></svg>', + 'plus': '<svg width="24" height="24"><g fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke="#000" stroke-width="2"><path d="M12 5v14M5 12h14"/></g></svg>', + 'preferences': '<svg width="24" height="24"><path d="M20.1 13.5l-1.9.2a5.8 5.8 0 0 1-.6 1.5l1.2 1.5c.4.4.3 1 0 1.4l-.7.7a1 1 0 0 1-1.4 0l-1.5-1.2a6.2 6.2 0 0 1-1.5.6l-.2 1.9c0 .5-.5.9-1 .9h-1a1 1 0 0 1-1-.9l-.2-1.9a5.8 5.8 0 0 1-1.5-.6l-1.5 1.2a1 1 0 0 1-1.4 0l-.7-.7a1 1 0 0 1 0-1.4l1.2-1.5a6.2 6.2 0 0 1-.6-1.5l-1.9-.2a1 1 0 0 1-.9-1v-1c0-.5.4-1 .9-1l1.9-.2a5.8 5.8 0 0 1 .6-1.5L5.2 7.3a1 1 0 0 1 0-1.4l.7-.7a1 1 0 0 1 1.4 0l1.5 1.2a6.2 6.2 0 0 1 1.5-.6l.2-1.9c0-.5.5-.9 1-.9h1c.5 0 1 .4 1 .9l.2 1.9a5.8 5.8 0 0 1 1.5.6l1.5-1.2a1 1 0 0 1 1.4 0l.7.7c.3.4.4 1 0 1.4l-1.2 1.5a6.2 6.2 0 0 1 .6 1.5l1.9.2c.5 0 .9.5.9 1v1c0 .5-.4 1-.9 1zM12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z" fill-rule="evenodd"/></svg>', + 'preview': '<svg width="24" height="24"><path d="M3.5 12.5c.5.8 1.1 1.6 1.8 2.3 2 2 4.2 3.2 6.7 3.2s4.7-1.2 6.7-3.2a16.2 16.2 0 0 0 2.1-2.8 15.7 15.7 0 0 0-2.1-2.8c-2-2-4.2-3.2-6.7-3.2a9.3 9.3 0 0 0-6.7 3.2A16.2 16.2 0 0 0 3.2 12c0 .2.2.3.3.5zm-2.4-1l.7-1.2L4 7.8C6.2 5.4 8.9 4 12 4c3 0 5.8 1.4 8.1 3.8a18.2 18.2 0 0 1 2.8 3.7v1l-.7 1.2-2.1 2.5c-2.3 2.4-5 3.8-8.1 3.8-3 0-5.8-1.4-8.1-3.8a18.2 18.2 0 0 1-2.8-3.7 1 1 0 0 1 0-1zm12-3.3a2 2 0 1 0 2.7 2.6 4 4 0 1 1-2.6-2.6z" fill-rule="nonzero"/></svg>', + 'print': '<svg width="24" height="24"><path d="M18 8H6a3 3 0 0 0-3 3v6h2v3h14v-3h2v-6a3 3 0 0 0-3-3zm-1 10H7v-4h10v4zm.5-5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm.5-8H6v2h12V5z" fill-rule="nonzero"/></svg>', + 'quote': '<svg width="24" height="24"><path d="M7.5 17h.9c.4 0 .7-.2.9-.6L11 13V8c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 0 0 .8 1.3zm8 0h.9c.4 0 .7-.2.9-.6L19 13V8c0-.6-.4-1-1-1h-4a1 1 0 0 0-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 0 0 .8 1.3z" fill-rule="nonzero"/></svg>', + 'redo': '<svg width="24" height="24"><path d="M17.6 10H12c-2.8 0-4.4 1.4-4.9 3.5-.4 2 .3 4 1.4 4.6a1 1 0 1 1-1 1.8c-2-1.2-2.9-4.1-2.3-6.8.6-3 3-5.1 6.8-5.1h5.6l-3.3-3.3a1 1 0 1 1 1.4-1.4l5 5a1 1 0 0 1 0 1.4l-5 5a1 1 0 0 1-1.4-1.4l3.3-3.3z" fill-rule="nonzero"/></svg>', + 'reload': '<svg width="24" height="24"><g fill-rule="nonzero"><path d="M5 22.1l-1.2-4.7v-.2a1 1 0 0 1 1-1l5 .4a1 1 0 1 1-.2 2l-2.2-.2a7.8 7.8 0 0 0 8.4.2 7.5 7.5 0 0 0 3.5-6.4 1 1 0 1 1 2 0 9.5 9.5 0 0 1-4.5 8 9.9 9.9 0 0 1-10.2 0l.4 1.4a1 1 0 1 1-2 .5zM13.6 7.4c0-.5.5-1 1-.9l2.8.2a8 8 0 0 0-9.5-1 7.5 7.5 0 0 0-3.6 7 1 1 0 0 1-2 0 9.5 9.5 0 0 1 4.5-8.6 10 10 0 0 1 10.9.3l-.3-1a1 1 0 0 1 2-.5l1.1 4.8a1 1 0 0 1-1 1.2l-5-.4a1 1 0 0 1-.9-1z"/></g></svg>', + 'remove-formatting': '<svg width="24" height="24"><path d="M13.2 6a1 1 0 0 1 0 .2l-2.6 10a1 1 0 0 1-1 .8h-.2a.8.8 0 0 1-.8-1l2.6-10H8a1 1 0 1 1 0-2h9a1 1 0 0 1 0 2h-3.8zM5 18h7a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2zm13 1.5L16.5 18 15 19.5a.7.7 0 0 1-1-1l1.5-1.5-1.5-1.5a.7.7 0 0 1 1-1l1.5 1.5 1.5-1.5a.7.7 0 0 1 1 1L17.5 17l1.5 1.5a.7.7 0 0 1-1 1z" fill-rule="evenodd"/></svg>', + 'remove': '<svg width="24" height="24"><path d="M16 7h3a1 1 0 0 1 0 2h-1v9a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V9H5a1 1 0 1 1 0-2h3V6a3 3 0 0 1 3-3h2a3 3 0 0 1 3 3v1zm-2 0V6c0-.6-.4-1-1-1h-2a1 1 0 0 0-1 1v1h4zm2 2H8v9c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V9zm-7 3a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0v-4zm4 0a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0v-4z" fill-rule="nonzero"/></svg>', + 'resize-handle': '<svg width="10" height="10"><g fill-rule="nonzero"><path d="M8.1 1.1A.5.5 0 1 1 9 2l-7 7A.5.5 0 1 1 1 8l7-7zM8.1 5.1A.5.5 0 1 1 9 6l-3 3A.5.5 0 1 1 5 8l3-3z"/></g></svg>', + 'resize': '<svg width="24" height="24"><path d="M4 5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h6c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H7.4L18 16.6V13c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v6c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-6a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3.6L6 7.4V11c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3A1 1 0 0 1 4 11V5z" fill-rule="evenodd"/></svg>', + 'restore-draft': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M17 13c0 .6-.4 1-1 1h-4V8c0-.6.4-1 1-1s1 .4 1 1v4h2c.6 0 1 .4 1 1z"/><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10z" fill-rule="nonzero"/></g></svg>', + 'rotate-left': '<svg width="24" height="24"><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10z" fill-rule="nonzero"/></svg>', + 'rotate-right': '<svg width="24" height="24"><path d="M20 8V5a1 1 0 0 1 2 0v6c0 .6-.4 1-1 1h-6a1 1 0 0 1 0-2h4.3L16 7A7.2 7.2 0 0 0 7.7 6a7 7 0 0 0 3 13.1c1.9.1 3.7-.5 5-1.7a1 1 0 0 1 1.4 1.5A9.2 9.2 0 0 1 2.2 14c-.9-3.9 1-8 4.5-9.9 3.5-1.9 8-1.3 10.8 1.5L20 8z" fill-rule="nonzero"/></svg>', + 'rtl': '<svg width="24" height="24"><path d="M8 5h8v2h-2v12h-2V7h-2v12H8v-7c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 4.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L8 5zm12 11.2a1 1 0 1 1-1 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 1 1 1 1.6L18.4 15l1.8 1.2z" fill-rule="evenodd"/></svg>', + 'save': '<svg width="24" height="24"><path d="M5 16h14a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2zm0 2v2h14v-2H5zm10 0h2v2h-2v-2zm-4-6.4L8.7 9.3a1 1 0 1 0-1.4 1.4l4 4c.4.4 1 .4 1.4 0l4-4a1 1 0 1 0-1.4-1.4L13 11.6V4a1 1 0 0 0-2 0v7.6z" fill-rule="nonzero"/></svg>', + 'search': '<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12z" fill-rule="nonzero"/></svg>', + 'select-all': '<svg width="24" height="24"><path d="M3 5h2V3a2 2 0 0 0-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2a2 2 0 0 0-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8a2 2 0 0 0 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm2-8h6v6H9V9z" fill-rule="nonzero"/></svg>', + 'selected': '<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2zm3.6 10.9L7 12.3a.7.7 0 0 0-1 1L9.6 17 18 8.6a.7.7 0 0 0 0-1 .7.7 0 0 0-1 0l-7.4 7.3z"/></svg>', + 'settings': '<svg width="24" height="24"><path d="M11 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V8H5a1 1 0 1 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.5V6zM8 8h2V6H8v2zm9 2.8v.2h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v.3c0 .2 0 .3-.2.5l-.6.2h-2.4c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V13H5a1 1 0 0 1 0-2h8v-.3c0-.2 0-.3.2-.5l.6-.2h2.4c.3 0 .4 0 .6.2l.2.6zM14 13h2v-2h-2v2zm-3 2.8v.2h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V18H5a1 1 0 0 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.6zM8 18h2v-2H8v2z" fill-rule="evenodd"/></svg>', + 'sharpen': '<svg width="24" height="24"><path d="M16 6l4 4-8 9-8-9 4-4h8zm-4 10.2l5.5-6.2-.1-.1H12v-.3h5.1l-.2-.2H12V9h4.6l-.2-.2H12v-.3h4.1l-.2-.2H12V8h3.6l-.2-.2H8.7L6.5 10l.1.1H12v.3H6.9l.2.2H12v.3H7.3l.2.2H12v.3H7.7l.3.2h4v.3H8.2l.2.2H12v.3H8.6l.3.2H12v.3H9l.3.2H12v.3H9.5l.2.2H12v.3h-2l.2.2H12v.3h-1.6l.2.2H12v.3h-1.1l.2.2h.9v.3h-.7l.2.2h.5v.3h-.3l.3.2z" fill-rule="evenodd"/></svg>', + 'sourcecode': '<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9.8 15.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0l-4.4-4.1a.8.8 0 0 1 0-1.2l4.4-4.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L6 12l3.8 3.7zM14.2 15.7c-.3.3-.3.8 0 1 .4.4.9.4 1.2 0l4.4-4.1c.3-.3.3-.9 0-1.2l-4.4-4.2a.8.8 0 0 0-1.2 0c-.3.3-.3.8 0 1.1L18 12l-3.8 3.7z"/></g></svg>', + 'spell-check': '<svg width="24" height="24"><path d="M6 8v3H5V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h2c.3 0 .5.1.7.3.2.2.3.4.3.7v6H8V8H6zm0-3v2h2V5H6zm13 0h-3v5h3v1h-3a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3v1zm-5 1.5l-.1.7c-.1.2-.3.3-.6.3.3 0 .5.1.6.3l.1.7V10c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-3V4h3c.3 0 .5.1.7.3.2.2.3.4.3.7v1.5zM13 10V8h-2v2h2zm0-3V5h-2v2h2zm3 5l1 1-6.5 7L7 15.5l1.3-1 2.2 2.2L16 12z" fill-rule="evenodd"/></svg>', + 'strike-through': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M15.6 8.5c-.5-.7-1-1.1-1.3-1.3-.6-.4-1.3-.6-2-.6-2.7 0-2.8 1.7-2.8 2.1 0 1.6 1.8 2 3.2 2.3 4.4.9 4.6 2.8 4.6 3.9 0 1.4-.7 4.1-5 4.1A6.2 6.2 0 0 1 7 16.4l1.5-1.1c.4.6 1.6 2 3.7 2 1.6 0 2.5-.4 3-1.2.4-.8.3-2-.8-2.6-.7-.4-1.6-.7-2.9-1-1-.2-3.9-.8-3.9-3.6C7.6 6 10.3 5 12.4 5c2.9 0 4.2 1.6 4.7 2.4l-1.5 1.1z"/><path d="M5 11h14a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2z" fill-rule="nonzero"/></g></svg>', + 'subscript': '<svg width="24" height="24"><path d="M10.4 10l4.6 4.6-1.4 1.4L9 11.4 4.4 16 3 14.6 7.6 10 3 5.4 4.4 4 9 8.6 13.6 4 15 5.4 10.4 10zM21 19h-5v-1l1-.8 1.7-1.6c.3-.4.5-.8.5-1.2 0-.3 0-.6-.2-.7-.2-.2-.5-.3-.9-.3a2 2 0 0 0-.8.2l-.7.3-.4-1.1 1-.6 1.2-.2c.8 0 1.4.3 1.8.7.4.4.6.9.6 1.5s-.2 1.1-.5 1.6a8 8 0 0 1-1.3 1.3l-.6.6h2.6V19z" fill-rule="nonzero"/></svg>', + 'superscript': '<svg width="24" height="24"><path d="M15 9.4L10.4 14l4.6 4.6-1.4 1.4L9 15.4 4.4 20 3 18.6 7.6 14 3 9.4 4.4 8 9 12.6 13.6 8 15 9.4zm5.9 1.6h-5v-1l1-.8 1.7-1.6c.3-.5.5-.9.5-1.3 0-.3 0-.5-.2-.7-.2-.2-.5-.3-.9-.3l-.8.2-.7.4-.4-1.2c.2-.2.5-.4 1-.5.3-.2.8-.2 1.2-.2.8 0 1.4.2 1.8.6.4.4.6 1 .6 1.6 0 .5-.2 1-.5 1.5l-1.3 1.4-.6.5h2.6V11z" fill-rule="nonzero"/></svg>', + 'table-cell-properties': '<svg width="24" height="24"><path d="M4 5h16v14H4V5zm10 10h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10 0v3h4v-3h-4zm0-1h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>', + 'table-cell-select-all': '<svg width="24" height="24"><path d="M12.5 5.5v6h6v-6h-6zm-1 0h-6v6h6v-6zm1 13h6v-6h-6v6zm-1 0v-6h-6v6h6zm-7-14h15v15h-15v-15z" fill-rule="nonzero"/></svg>', + 'table-cell-select-inner': '<svg width="24" height="24"><g fill-rule="nonzero"><path d="M5.5 5.5v13h13v-13h-13zm-1-1h15v15h-15v-15z" opacity=".2"/><path d="M11.5 11.5v-7h1v7h7v1h-7v7h-1v-7h-7v-1h7z"/></g></svg>', + 'table-delete-column': '<svg width="24" height="24"><path d="M9 11.2l1 1v.2l-1 1v-2.2zm5 1l1-1v2.2l-1-1v-.2zM20 5v14H4V5h16zm-1 2h-4v.8l-.2-.2-.8.8V7h-4v1.4l-.8-.8-.2.2V7H5v11h4v-1.8l.5.5.5-.4V18h4v-1.8l.8.8.2-.3V18h4V7zm-3.9 3.4l-1.8 1.9 1.8 1.9c.4.3.4.9 0 1.2-.3.3-.8.3-1.2 0L12 13.5l-1.8 1.9a.8.8 0 0 1-1.2 0 .9.9 0 0 1 0-1.2l1.8-1.9-1.9-2a.9.9 0 0 1 1.2-1.2l2 2 1.8-1.8c.3-.4.9-.4 1.2 0a.8.8 0 0 1 0 1.1z" fill-rule="evenodd"/></svg>', + 'table-delete-row': '<svg width="24" height="24"><path d="M16.7 8.8l1.1 1.2-2.4 2.5L18 15l-1.2 1.2-2.5-2.5-2.4 2.5-1.3-1.2 2.5-2.5-2.5-2.5 1.2-1.3 2.6 2.6 2.4-2.5zM4 5h16v14H4V5zm15 5V7H5v3h4.8l1 1H5v3h5.8l-1 1H5v3h14v-3h-.4l-1-1H19v-3h-1.3l1-1h.3z" fill-rule="evenodd"/></svg>', + 'table-delete-table': '<svg width="24" height="26"><path d="M4 6h16v14H4V6zm1 2v11h14V8H5zm11.7 8.7l-1.5 1.5L12 15l-3.3 3.2-1.4-1.5 3.2-3.2-3.3-3.2 1.5-1.5L12 12l3.2-3.2 1.5 1.5-3.2 3.2 3.2 3.2z" fill-rule="evenodd"/></svg>', + 'table-insert-column-after': '<svg width="24" height="24"><path d="M14.3 9c.4 0 .7.3.7.6v2.2h2.1c.4 0 .7.3.7.7 0 .4-.3.7-.7.7H15v2.2c0 .3-.3.6-.7.6a.7.7 0 0 1-.6-.6v-2.2h-2.2a.7.7 0 0 1 0-1.4h2.2V9.6c0-.3.3-.6.6-.6zM4 5h16v14H4V5zm5 13v-3H5v3h4zm0-4v-3H5v3h4zm0-4V7H5v3h4zm10 8V7h-9v11h9z" fill-rule="evenodd"/></svg>', + 'table-insert-column-before': '<svg width="24" height="24"><path d="M9.7 16a.7.7 0 0 1-.7-.6v-2.2H6.9a.7.7 0 0 1 0-1.4H9V9.6c0-.3.3-.6.7-.6.3 0 .6.3.6.6v2.2h2.2c.4 0 .8.3.8.7 0 .4-.4.7-.8.7h-2.2v2.2c0 .3-.3.6-.6.6zM4 5h16v14H4V5zm10 13V7H5v11h9zm5 0v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V7h-4v3h4z" fill-rule="evenodd"/></svg>', + 'table-insert-row-above': '<svg width="24" height="24"><path d="M14.8 10.5c0 .3-.2.5-.5.5h-1.8v1.8c0 .3-.2.5-.5.5a.5.5 0 0 1-.5-.6V11H9.7a.5.5 0 0 1 0-1h1.8V8.3c0-.3.2-.6.5-.6s.5.3.5.6V10h1.8c.3 0 .5.2.5.5zM4 5h16v14H4V5zm5 13v-3H5v3h4zm5 0v-3h-4v3h4zm5 0v-3h-4v3h4zm0-4V7H5v7h14z" fill-rule="evenodd"/></svg>', + 'table-insert-row-after': '<svg width="24" height="24"><path d="M9.2 14.5c0-.3.2-.5.5-.5h1.8v-1.8c0-.3.2-.5.5-.5s.5.2.5.6V14h1.8c.3 0 .5.2.5.5s-.2.5-.5.5h-1.8v1.7c0 .3-.2.6-.5.6a.5.5 0 0 1-.5-.6V15H9.7a.5.5 0 0 1-.5-.5zM4 5h16v14H4V5zm6 2v3h4V7h-4zM5 7v3h4V7H5zm14 11v-7H5v7h14zm0-8V7h-4v3h4z" fill-rule="evenodd"/></svg>', + 'table-left-header': '<svg width="24" height="24"><path d="M4 5h16v13H4V5zm10 12v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V6h-4v3h4zm5 8v-3h-4v3h4zm0-4v-3h-4v3h4zm0-4V6h-4v3h4z" fill-rule="evenodd"/></svg>', + 'table-merge-cells': '<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 13h9v-7h-9v7zm4-11h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10-1h4V7h-4v3zM5 15v3h4v-3H5z" fill-rule="evenodd"/></svg>', + 'table-row-properties': '<svg width="24" height="24"><path d="M4 5h16v14H4V5zm10 10h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm6 3h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>', + 'table-split-cells': '<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 2v3h4V7h-4zM9 18v-3H5v3h4zm0-4v-3H5v3h4zm0-4V7H5v3h4zm10 8v-7h-9v7h9zm0-8V7h-4v3h4zm-3.5 4.5l1.5 1.6c.3.2.3.7 0 1-.2.2-.7.2-1 0l-1.5-1.6-1.6 1.5c-.2.3-.7.3-1 0a.7.7 0 0 1 0-1l1.6-1.5-1.5-1.6a.7.7 0 0 1 1-1l1.5 1.6 1.6-1.5c.2-.3.7-.3 1 0 .2.2.2.7 0 1l-1.6 1.5z" fill-rule="evenodd"/></svg>', + 'table-top-header': '<svg width="24" height="24"><path d="M4 5h16v13H4V5zm5 12v-3H5v3h4zm0-4v-3H5v3h4zm5 4v-3h-4v3h4zm0-4v-3h-4v3h4zm5 4v-3h-4v3h4zm0-4v-3h-4v3h4z" fill-rule="evenodd"/></svg>', + 'table': '<svg width="24" height="24"><path d="M4 5h16v14H4V5zm6 9h4v-3h-4v3zm4 1h-4v3h4v-3zm0-8h-4v3h4V7zM9 7H5v3h4V7zm-4 4v3h4v-3H5zm10 0v3h4v-3h-4zm0-1h4V7h-4v3zM5 15v3h4v-3H5zm10 3h4v-3h-4v3z" fill-rule="evenodd"/></svg>', + 'template': '<svg width="24" height="24"><path d="M19 19v-1H5v1h14zM9 16v-4a5 5 0 1 1 6 0v4h4a2 2 0 0 1 2 2v3H3v-3c0-1.1.9-2 2-2h4zm4 0v-5l.8-.6a3 3 0 1 0-3.6 0l.8.6v5h2z" fill-rule="nonzero"/></svg>', + 'temporary-placeholder': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M9 7.6V6h2.5V4.5a.5.5 0 1 1 1 0V6H15v1.6a8 8 0 1 1-6 0zm-2.6 5.3a.5.5 0 0 0 .3.6c.3 0 .6 0 .6-.3l.1-.2a5 5 0 0 1 3.3-2.8c.3-.1.4-.4.4-.6-.1-.3-.4-.5-.6-.4a6 6 0 0 0-4.1 3.7z"/><circle cx="14" cy="4" r="1"/><circle cx="12" cy="2" r="1"/><circle cx="10" cy="4" r="1"/></g></svg>', + 'text-color': '<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-text-color__color" d="M3 18h18v3H3z"/><path d="M8.7 16h-.8a.5.5 0 0 1-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 0 1-.5.6h-.8a.5.5 0 0 1-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4zm2.6-7.6l-.6 2a.5.5 0 0 0 .5.6h1.6a.5.5 0 0 0 .5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4z"/></g></svg>', + 'toc': '<svg width="24" height="24"><path d="M5 5c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2zm0-4c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>', + 'translate': '<svg width="24" height="24"><path d="M12.7 14.3l-.3.7-.4.7-2.2-2.2-3.1 3c-.3.4-.8.4-1 0a.7.7 0 0 1 0-1l3.1-3A12.4 12.4 0 0 1 6.7 9H8a10.1 10.1 0 0 0 1.7 2.4c.5-.5 1-1.1 1.4-1.8l.9-2H4.7a.7.7 0 1 1 0-1.5h4.4v-.7c0-.4.3-.8.7-.8.4 0 .7.4.7.8v.7H15c.4 0 .8.3.8.7 0 .4-.4.8-.8.8h-1.4a12.3 12.3 0 0 1-1 2.4 13.5 13.5 0 0 1-1.7 2.3l1.9 1.8zm4.3-3l2.7 7.3a.5.5 0 0 1-.4.7 1 1 0 0 1-1-.7l-.6-1.5h-3.4l-.6 1.5a1 1 0 0 1-1 .7.5.5 0 0 1-.4-.7l2.7-7.4a1 1 0 1 1 2 0zm-2.2 4.4h2.4L16 12.5l-1.2 3.2z" fill-rule="evenodd"/></svg>', + 'underline': '<svg width="24" height="24"><path d="M16 5c.6 0 1 .4 1 1v5.5a4 4 0 0 1-.4 1.8l-1 1.4a5.3 5.3 0 0 1-5.5 1 5 5 0 0 1-1.6-1c-.5-.4-.8-.9-1.1-1.4a4 4 0 0 1-.4-1.8V6c0-.6.4-1 1-1s1 .4 1 1v5.5c0 .3 0 .6.2 1l.6.7a3.3 3.3 0 0 0 2.2.8 3.4 3.4 0 0 0 2.2-.8c.3-.2.4-.5.6-.8l.2-.9V6c0-.6.4-1 1-1zM8 17h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2z" fill-rule="evenodd"/></svg>', + 'undo': '<svg width="24" height="24"><path d="M6.4 8H12c3.7 0 6.2 2 6.8 5.1.6 2.7-.4 5.6-2.3 6.8a1 1 0 0 1-1-1.8c1.1-.6 1.8-2.7 1.4-4.6-.5-2.1-2.1-3.5-4.9-3.5H6.4l3.3 3.3a1 1 0 1 1-1.4 1.4l-5-5a1 1 0 0 1 0-1.4l5-5a1 1 0 0 1 1.4 1.4L6.4 8z" fill-rule="nonzero"/></svg>', + 'unlink': '<svg width="24" height="24"><path d="M6.2 12.3a1 1 0 0 1 1.4 1.4l-2 2a2 2 0 1 0 2.6 2.8l4.8-4.8a1 1 0 0 0 0-1.4 1 1 0 1 1 1.4-1.3 2.9 2.9 0 0 1 0 4L9.6 20a3.9 3.9 0 0 1-5.5-5.5l2-2zm11.6-.6a1 1 0 0 1-1.4-1.4l2.1-2a2 2 0 1 0-2.7-2.8L11 10.3a1 1 0 0 0 0 1.4A1 1 0 1 1 9.6 13a2.9 2.9 0 0 1 0-4L14.4 4a3.9 3.9 0 0 1 5.5 5.5l-2 2zM7.6 6.3a.8.8 0 0 1-1 1.1L3.3 4.2a.7.7 0 1 1 1-1l3.2 3.1zM5.1 8.6a.8.8 0 0 1 0 1.5H3a.8.8 0 0 1 0-1.5H5zm5-3.5a.8.8 0 0 1-1.5 0V3a.8.8 0 0 1 1.5 0V5zm6 11.8a.8.8 0 0 1 1-1l3.2 3.2a.8.8 0 0 1-1 1L16 17zm-2.2 2a.8.8 0 0 1 1.5 0V21a.8.8 0 0 1-1.5 0V19zm5-3.5a.7.7 0 1 1 0-1.5H21a.8.8 0 0 1 0 1.5H19z" fill-rule="nonzero"/></svg>', + 'unlock': '<svg width="24" height="24"><path d="M16 5c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h-2V8a1 1 0 0 0-.3-.7A1 1 0 0 0 16 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7v3h.3c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H4.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H11V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2z" fill-rule="evenodd"/></svg>', + 'unordered-list': '<svg width="24" height="24"><path d="M11 5h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2zM4.5 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1z" fill-rule="evenodd"/></svg>', + 'unselected': '<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2zm0 1a1 1 0 0 0-1 1v12c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H6z"/></svg>', + 'upload': '<svg width="24" height="24"><path d="M18 19v-2a1 1 0 0 1 2 0v3c0 .6-.4 1-1 1H5a1 1 0 0 1-1-1v-3a1 1 0 0 1 2 0v2h12zM11 6.4L8.7 8.7a1 1 0 0 1-1.4-1.4l4-4a1 1 0 0 1 1.4 0l4 4a1 1 0 1 1-1.4 1.4L13 6.4V16a1 1 0 0 1-2 0V6.4z" fill-rule="nonzero"/></svg>', + 'user': '<svg width="24" height="24"><path d="M12 24a12 12 0 1 1 0-24 12 12 0 0 1 0 24zm-8.7-5.3a11 11 0 0 0 17.4 0C19.4 16.3 14.6 15 12 15c-2.6 0-7.4 1.3-8.7 3.7zM12 13c2.2 0 4-2 4-4.5S14.2 4 12 4 8 6 8 8.5 9.8 13 12 13z" fill-rule="nonzero"/></svg>', + 'warning': '<svg width="24" height="24"><path d="M19.8 18.3c.2.5.3.9 0 1.2-.1.3-.5.5-1 .5H5.2c-.5 0-.9-.2-1-.5-.3-.3-.2-.7 0-1.2L11 4.7l.5-.5.5-.2c.2 0 .3 0 .5.2.2 0 .3.3.5.5l6.8 13.6zM12 18c.3 0 .5-.1.7-.3.2-.2.3-.4.3-.7a1 1 0 0 0-.3-.7 1 1 0 0 0-.7-.3 1 1 0 0 0-.7.3 1 1 0 0 0-.3.7c0 .3.1.5.3.7.2.2.4.3.7.3zm.7-3l.3-4a1 1 0 0 0-.3-.7 1 1 0 0 0-.7-.3 1 1 0 0 0-.7.3 1 1 0 0 0-.3.7l.3 4h1.4z" fill-rule="evenodd"/></svg>', + 'zoom-in': '<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12zm-1-9a1 1 0 0 1 2 0v6a1 1 0 0 1-2 0V8zm-2 4a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2H8z" fill-rule="nonzero"/></svg>', + 'zoom-out': '<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12zm-3-5a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2H8z" fill-rule="nonzero"/></svg>' + }; + }; + + var CreateIconManager = function () { + var lookup = {}; + var add = function (id, iconPack) { + lookup[id] = iconPack; + }; + var get = function (id) { + if (lookup[id]) { + return lookup[id]; + } + return { icons: {} }; + }; + var has$1 = function (id) { + return has(lookup, id); + }; + return { + add: add, + get: get, + has: has$1 + }; + }; + var IconManager = CreateIconManager(); + + var PluginManager$1 = AddOnManager$1.PluginManager; + + var ThemeManager = AddOnManager$1.ThemeManager; + + function XMLHttpRequest () { + var f = Global$1.getOrDie('XMLHttpRequest'); + return new f(); + } + + function Uploader(uploadStatus, settings) { + var pendingPromises = {}; + var pathJoin = function (path1, path2) { + if (path1) { + return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, ''); + } + return path2; + }; + var defaultHandler = function (blobInfo, success, failure, progress) { + var xhr, formData; + xhr = XMLHttpRequest(); + xhr.open('POST', settings.url); + xhr.withCredentials = settings.credentials; + xhr.upload.onprogress = function (e) { + progress(e.loaded / e.total * 100); + }; + xhr.onerror = function () { + failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status); + }; + xhr.onload = function () { + var json; + if (xhr.status < 200 || xhr.status >= 300) { + failure('HTTP Error: ' + xhr.status); + return; + } + json = JSON.parse(xhr.responseText); + if (!json || typeof json.location !== 'string') { + failure('Invalid JSON: ' + xhr.responseText); + return; + } + success(pathJoin(settings.basePath, json.location)); + }; + formData = new domGlobals.FormData(); + formData.append('file', blobInfo.blob(), blobInfo.filename()); + xhr.send(formData); + }; + var noUpload = function () { + return new promiseObj(function (resolve) { + resolve([]); + }); + }; + var handlerSuccess = function (blobInfo, url) { + return { + url: url, + blobInfo: blobInfo, + status: true + }; + }; + var handlerFailure = function (blobInfo, error) { + return { + url: '', + blobInfo: blobInfo, + status: false, + error: error + }; + }; + var resolvePending = function (blobUri, result) { + Tools.each(pendingPromises[blobUri], function (resolve) { + resolve(result); + }); + delete pendingPromises[blobUri]; + }; + var uploadBlobInfo = function (blobInfo, handler, openNotification) { + uploadStatus.markPending(blobInfo.blobUri()); + return new promiseObj(function (resolve) { + var notification, progress; + var noop = function () { + }; + try { + var closeNotification_1 = function () { + if (notification) { + notification.close(); + progress = noop; + } + }; + var success = function (url) { + closeNotification_1(); + uploadStatus.markUploaded(blobInfo.blobUri(), url); + resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url)); + resolve(handlerSuccess(blobInfo, url)); + }; + var failure = function (error) { + closeNotification_1(); + uploadStatus.removeFailed(blobInfo.blobUri()); + resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error)); + resolve(handlerFailure(blobInfo, error)); + }; + progress = function (percent) { + if (percent < 0 || percent > 100) { + return; + } + if (!notification) { + notification = openNotification(); + } + notification.progressBar.value(percent); + }; + handler(blobInfo, success, failure, progress); + } catch (ex) { + resolve(handlerFailure(blobInfo, ex.message)); + } + }); + }; + var isDefaultHandler = function (handler) { + return handler === defaultHandler; + }; + var pendingUploadBlobInfo = function (blobInfo) { + var blobUri = blobInfo.blobUri(); + return new promiseObj(function (resolve) { + pendingPromises[blobUri] = pendingPromises[blobUri] || []; + pendingPromises[blobUri].push(resolve); + }); + }; + var uploadBlobs = function (blobInfos, openNotification) { + blobInfos = Tools.grep(blobInfos, function (blobInfo) { + return !uploadStatus.isUploaded(blobInfo.blobUri()); + }); + return promiseObj.all(Tools.map(blobInfos, function (blobInfo) { + return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification); + })); + }; + var upload = function (blobInfos, openNotification) { + return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification); + }; + if (isFunction(settings.handler) === false) { + settings.handler = defaultHandler; + } + return { upload: upload }; + } + + function FileReader () { + var f = Global$1.getOrDie('FileReader'); + return new f(); + } + + function Uint8Array (arr) { + var f = Global$1.getOrDie('Uint8Array'); + return new f(arr); + } + + var requestAnimationFrame$1 = function (callback) { + var f = Global$1.getOrDie('requestAnimationFrame'); + f(callback); + }; + var atob = function (base64) { + var f = Global$1.getOrDie('atob'); + return f(base64); + }; + var Window = { + atob: atob, + requestAnimationFrame: requestAnimationFrame$1 + }; + + var blobUriToBlob = function (url) { + return new promiseObj(function (resolve, reject) { + var rejectWithError = function () { + reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.'); + }; + try { + var xhr = XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'blob'; + xhr.onload = function () { + if (this.status === 200) { + resolve(this.response); + } else { + rejectWithError(); + } + }; + xhr.onerror = rejectWithError; + xhr.send(); + } catch (ex) { + rejectWithError(); + } + }); + }; + var parseDataUri = function (uri) { + var type, matches; + var uriParts = decodeURIComponent(uri).split(','); + matches = /data:([^;]+)/.exec(uriParts[0]); + if (matches) { + type = matches[1]; + } + return { + type: type, + data: uriParts[1] + }; + }; + var dataUriToBlob = function (uri) { + return new promiseObj(function (resolve) { + var str, arr, i; + var uriParts = parseDataUri(uri); + try { + str = Window.atob(uriParts.data); + } catch (e) { + resolve(new domGlobals.Blob([])); + return; + } + arr = Uint8Array(str.length); + for (i = 0; i < arr.length; i++) { + arr[i] = str.charCodeAt(i); + } + resolve(new domGlobals.Blob([arr], { type: uriParts.type })); + }); + }; + var uriToBlob = function (url) { + if (url.indexOf('blob:') === 0) { + return blobUriToBlob(url); + } + if (url.indexOf('data:') === 0) { + return dataUriToBlob(url); + } + return null; + }; + var blobToDataUri = function (blob) { + return new promiseObj(function (resolve) { + var reader = FileReader(); + reader.onloadend = function () { + resolve(reader.result); + }; + reader.readAsDataURL(blob); + }); + }; + var Conversions = { + uriToBlob: uriToBlob, + blobToDataUri: blobToDataUri, + parseDataUri: parseDataUri + }; + + var count = 0; + var uniqueId = function (prefix) { + return (prefix || 'blobid') + count++; + }; + var imageToBlobInfo = function (blobCache, img, resolve, reject) { + var base64, blobInfo; + if (img.src.indexOf('blob:') === 0) { + blobInfo = blobCache.getByUri(img.src); + if (blobInfo) { + resolve({ + image: img, + blobInfo: blobInfo + }); + } else { + Conversions.uriToBlob(img.src).then(function (blob) { + Conversions.blobToDataUri(blob).then(function (dataUri) { + base64 = Conversions.parseDataUri(dataUri).data; + blobInfo = blobCache.create(uniqueId(), blob, base64); + blobCache.add(blobInfo); + resolve({ + image: img, + blobInfo: blobInfo + }); + }); + }, function (err) { + reject(err); + }); + } + return; + } + base64 = Conversions.parseDataUri(img.src).data; + blobInfo = blobCache.findFirst(function (cachedBlobInfo) { + return cachedBlobInfo.base64() === base64; + }); + if (blobInfo) { + resolve({ + image: img, + blobInfo: blobInfo + }); + } else { + Conversions.uriToBlob(img.src).then(function (blob) { + blobInfo = blobCache.create(uniqueId(), blob, base64); + blobCache.add(blobInfo); + resolve({ + image: img, + blobInfo: blobInfo + }); + }, function (err) { + reject(err); + }); + } + }; + var getAllImages = function (elm) { + return elm ? from$1(elm.getElementsByTagName('img')) : []; + }; + function ImageScanner(uploadStatus, blobCache) { + var cachedPromises = {}; + var findAll = function (elm, predicate) { + var images; + if (!predicate) { + predicate = constant(true); + } + images = filter(getAllImages(elm), function (img) { + var src = img.src; + if (!Env.fileApi) { + return false; + } + if (img.hasAttribute('data-mce-bogus')) { + return false; + } + if (img.hasAttribute('data-mce-placeholder')) { + return false; + } + if (!src || src === Env.transparentSrc) { + return false; + } + if (src.indexOf('blob:') === 0) { + return !uploadStatus.isUploaded(src) && predicate(img); + } + if (src.indexOf('data:') === 0) { + return predicate(img); + } + return false; + }); + var promises = map(images, function (img) { + if (cachedPromises[img.src]) { + return new promiseObj(function (resolve) { + cachedPromises[img.src].then(function (imageInfo) { + if (typeof imageInfo === 'string') { + return imageInfo; + } + resolve({ + image: img, + blobInfo: imageInfo.blobInfo + }); + }); + }); + } + var newPromise = new promiseObj(function (resolve, reject) { + imageToBlobInfo(blobCache, img, resolve, reject); + }).then(function (result) { + delete cachedPromises[result.image.src]; + return result; + }).catch(function (error) { + delete cachedPromises[img.src]; + return error; + }); + cachedPromises[img.src] = newPromise; + return newPromise; + }); + return promiseObj.all(promises); + }; + return { findAll: findAll }; + } + + var count$1 = 0; + var seed = function () { + var rnd = function () { + return Math.round(Math.random() * 4294967295).toString(36); + }; + var now = new Date().getTime(); + return 's' + now.toString(36) + rnd() + rnd() + rnd(); + }; + var uuid = function (prefix) { + return prefix + count$1++ + seed(); + }; + var Uuid = { uuid: uuid }; + + var BlobCache = function () { + var cache = []; + var mimeToExt = function (mime) { + var mimes = { + 'image/jpeg': 'jpg', + 'image/jpg': 'jpg', + 'image/gif': 'gif', + 'image/png': 'png' + }; + return mimes[mime.toLowerCase()] || 'dat'; + }; + var create = function (o, blob, base64, filename) { + if (isString(o)) { + var id = o; + return toBlobInfo({ + id: id, + name: filename, + blob: blob, + base64: base64 + }); + } else if (isObject(o)) { + return toBlobInfo(o); + } else { + throw new Error('Unknown input type'); + } + }; + var toBlobInfo = function (o) { + var id, name; + if (!o.blob || !o.base64) { + throw new Error('blob and base64 representations of the image are required for BlobInfo to be created'); + } + id = o.id || Uuid.uuid('blobid'); + name = o.name || id; + return { + id: constant(id), + name: constant(name), + filename: constant(name + '.' + mimeToExt(o.blob.type)), + blob: constant(o.blob), + base64: constant(o.base64), + blobUri: constant(o.blobUri || URL.createObjectURL(o.blob)), + uri: constant(o.uri) + }; + }; + var add = function (blobInfo) { + if (!get(blobInfo.id())) { + cache.push(blobInfo); + } + }; + var get = function (id) { + return findFirst(function (cachedBlobInfo) { + return cachedBlobInfo.id() === id; + }); + }; + var findFirst = function (predicate) { + return filter(cache, predicate)[0]; + }; + var getByUri = function (blobUri) { + return findFirst(function (blobInfo) { + return blobInfo.blobUri() === blobUri; + }); + }; + var removeByUri = function (blobUri) { + cache = filter(cache, function (blobInfo) { + if (blobInfo.blobUri() === blobUri) { + URL.revokeObjectURL(blobInfo.blobUri()); + return false; + } + return true; + }); + }; + var destroy = function () { + each(cache, function (cachedBlobInfo) { + URL.revokeObjectURL(cachedBlobInfo.blobUri()); + }); + cache = []; + }; + return { + create: create, + add: add, + get: get, + getByUri: getByUri, + findFirst: findFirst, + removeByUri: removeByUri, + destroy: destroy + }; + }; + + function UploadStatus () { + var PENDING = 1, UPLOADED = 2; + var blobUriStatuses = {}; + var createStatus = function (status, resultUri) { + return { + status: status, + resultUri: resultUri + }; + }; + var hasBlobUri = function (blobUri) { + return blobUri in blobUriStatuses; + }; + var getResultUri = function (blobUri) { + var result = blobUriStatuses[blobUri]; + return result ? result.resultUri : null; + }; + var isPending = function (blobUri) { + return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false; + }; + var isUploaded = function (blobUri) { + return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false; + }; + var markPending = function (blobUri) { + blobUriStatuses[blobUri] = createStatus(PENDING, null); + }; + var markUploaded = function (blobUri, resultUri) { + blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri); + }; + var removeFailed = function (blobUri) { + delete blobUriStatuses[blobUri]; + }; + var destroy = function () { + blobUriStatuses = {}; + }; + return { + hasBlobUri: hasBlobUri, + getResultUri: getResultUri, + isPending: isPending, + isUploaded: isUploaded, + markPending: markPending, + markUploaded: markUploaded, + removeFailed: removeFailed, + destroy: destroy + }; + } + + var EditorUpload = function (editor) { + var blobCache = BlobCache(); + var uploader, imageScanner; + var uploadStatus = UploadStatus(); + var urlFilters = []; + var aliveGuard = function (callback) { + return function (result) { + if (editor.selection) { + return callback(result); + } + return []; + }; + }; + var cacheInvalidator = function () { + return '?' + new Date().getTime(); + }; + var replaceString = function (content, search, replace) { + var index = 0; + do { + index = content.indexOf(search, index); + if (index !== -1) { + content = content.substring(0, index) + replace + content.substr(index + search.length); + index += replace.length - search.length + 1; + } + } while (index !== -1); + return content; + }; + var replaceImageUrl = function (content, targetUrl, replacementUrl) { + content = replaceString(content, 'src="' + targetUrl + '"', 'src="' + replacementUrl + '"'); + content = replaceString(content, 'data-mce-src="' + targetUrl + '"', 'data-mce-src="' + replacementUrl + '"'); + return content; + }; + var replaceUrlInUndoStack = function (targetUrl, replacementUrl) { + each(editor.undoManager.data, function (level) { + if (level.type === 'fragmented') { + level.fragments = map(level.fragments, function (fragment) { + return replaceImageUrl(fragment, targetUrl, replacementUrl); + }); + } else { + level.content = replaceImageUrl(level.content, targetUrl, replacementUrl); + } + }); + }; + var openNotification = function () { + return editor.notificationManager.open({ + text: editor.translate('Image uploading...'), + type: 'info', + timeout: -1, + progressBar: true + }); + }; + var replaceImageUri = function (image, resultUri) { + blobCache.removeByUri(image.src); + replaceUrlInUndoStack(image.src, resultUri); + editor.$(image).attr({ + 'src': Settings.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri, + 'data-mce-src': editor.convertURL(resultUri, 'src') + }); + }; + var uploadImages = function (callback) { + if (!uploader) { + uploader = Uploader(uploadStatus, { + url: Settings.getImageUploadUrl(editor), + basePath: Settings.getImageUploadBasePath(editor), + credentials: Settings.getImagesUploadCredentials(editor), + handler: Settings.getImagesUploadHandler(editor) + }); + } + return scanForImages().then(aliveGuard(function (imageInfos) { + var blobInfos; + blobInfos = map(imageInfos, function (imageInfo) { + return imageInfo.blobInfo; + }); + return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) { + var filteredResult = map(result, function (uploadInfo, index) { + var image = imageInfos[index].image; + if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) { + replaceImageUri(image, uploadInfo.url); + } else if (uploadInfo.error) { + ErrorReporter.uploadError(editor, uploadInfo.error); + } + return { + element: image, + status: uploadInfo.status + }; + }); + if (callback) { + callback(filteredResult); + } + return filteredResult; + })); + })); + }; + var uploadImagesAuto = function (callback) { + if (Settings.isAutomaticUploadsEnabled(editor)) { + return uploadImages(callback); + } + }; + var isValidDataUriImage = function (imgElm) { + if (forall(urlFilters, function (filter) { + return filter(imgElm); + }) === false) { + return false; + } + if (imgElm.getAttribute('src').indexOf('data:') === 0) { + var dataImgFilter = Settings.getImagesDataImgFilter(editor); + return dataImgFilter(imgElm); + } + return true; + }; + var addFilter = function (filter) { + urlFilters.push(filter); + }; + var scanForImages = function () { + if (!imageScanner) { + imageScanner = ImageScanner(uploadStatus, blobCache); + } + return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) { + result = filter(result, function (resultItem) { + if (typeof resultItem === 'string') { + ErrorReporter.displayError(editor, resultItem); + return false; + } + return true; + }); + each(result, function (resultItem) { + replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri()); + resultItem.image.src = resultItem.blobInfo.blobUri(); + resultItem.image.removeAttribute('data-mce-src'); + }); + return result; + })); + }; + var destroy = function () { + blobCache.destroy(); + uploadStatus.destroy(); + imageScanner = uploader = null; + }; + var replaceBlobUris = function (content) { + return content.replace(/src="(blob:[^"]+)"/g, function (match, blobUri) { + var resultUri = uploadStatus.getResultUri(blobUri); + if (resultUri) { + return 'src="' + resultUri + '"'; + } + var blobInfo = blobCache.getByUri(blobUri); + if (!blobInfo) { + blobInfo = foldl(editor.editorManager.get(), function (result, editor) { + return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri); + }, null); + } + if (blobInfo) { + var blob = blobInfo.blob(); + return 'src="data:' + blob.type + ';base64,' + blobInfo.base64() + '"'; + } + return match; + }); + }; + editor.on('SetContent', function () { + if (Settings.isAutomaticUploadsEnabled(editor)) { + uploadImagesAuto(); + } else { + scanForImages(); + } + }); + editor.on('RawSaveContent', function (e) { + e.content = replaceBlobUris(e.content); + }); + editor.on('GetContent', function (e) { + if (e.source_view || e.format === 'raw') { + return; + } + e.content = replaceBlobUris(e.content); + }); + editor.on('PostRender', function () { + editor.parser.addNodeFilter('img', function (images) { + each(images, function (img) { + var src = img.attr('src'); + if (blobCache.getByUri(src)) { + return; + } + var resultUri = uploadStatus.getResultUri(src); + if (resultUri) { + img.attr('src', resultUri); + } + }); + }); + }); + return { + blobCache: blobCache, + addFilter: addFilter, + uploadImages: uploadImages, + uploadImagesAuto: uploadImagesAuto, + scanForImages: scanForImages, + destroy: destroy + }; + }; + + var dropLast = function (xs) { + return xs.slice(0, -1); + }; + var parentsUntil$1 = function (start, root, predicate) { + if (contains$3(root, start)) { + return dropLast(parents(start, function (elm) { + return predicate(elm) || eq(elm, root); + })); + } else { + return []; + } + }; + var parents$1 = function (start, root) { + return parentsUntil$1(start, root, constant(false)); + }; + var parentsAndSelf = function (start, root) { + return [start].concat(parents$1(start, root)); + }; + var Parents = { + parentsUntil: parentsUntil$1, + parents: parents$1, + parentsAndSelf: parentsAndSelf + }; + + var isBlockElement = function (blockElements, node) { + return blockElements.hasOwnProperty(node.nodeName); + }; + var isValidTarget = function (blockElements, node) { + if (NodeType.isText(node)) { + return true; + } else if (NodeType.isElement(node)) { + return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node); + } else { + return false; + } + }; + var hasBlockParent = function (blockElements, root, node) { + return exists(Parents.parents(Element.fromDom(node), Element.fromDom(root)), function (elm) { + return isBlockElement(blockElements, elm.dom()); + }); + }; + var shouldRemoveTextNode = function (blockElements, node) { + if (NodeType.isText(node)) { + if (node.nodeValue.length === 0) { + return true; + } else if (/^\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) { + return true; + } + } + return false; + }; + var addRootBlocks = function (editor) { + var dom = editor.dom, selection = editor.selection; + var schema = editor.schema, blockElements = schema.getBlockElements(); + var node = selection.getStart(); + var rootNode = editor.getBody(); + var rng; + var startContainer, startOffset, endContainer, endOffset, rootBlockNode; + var tempNode, wrapped, restoreSelection; + var rootNodeName; + var forcedRootBlock = Settings.getForcedRootBlock(editor); + if (!node || !NodeType.isElement(node) || !forcedRootBlock) { + return; + } + rootNodeName = rootNode.nodeName.toLowerCase(); + if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) { + return; + } + rng = selection.getRng(); + startContainer = rng.startContainer; + startOffset = rng.startOffset; + endContainer = rng.endContainer; + endOffset = rng.endOffset; + restoreSelection = EditorFocus.hasFocus(editor); + node = rootNode.firstChild; + while (node) { + if (isValidTarget(blockElements, node)) { + if (shouldRemoveTextNode(blockElements, node)) { + tempNode = node; + node = node.nextSibling; + dom.remove(tempNode); + continue; + } + if (!rootBlockNode) { + rootBlockNode = dom.create(forcedRootBlock, Settings.getForcedRootBlockAttrs(editor)); + node.parentNode.insertBefore(rootBlockNode, node); + wrapped = true; + } + tempNode = node; + node = node.nextSibling; + rootBlockNode.appendChild(tempNode); + } else { + rootBlockNode = null; + node = node.nextSibling; + } + } + if (wrapped && restoreSelection) { + rng.setStart(startContainer, startOffset); + rng.setEnd(endContainer, endOffset); + selection.setRng(rng); + editor.nodeChanged(); + } + }; + var setup$2 = function (editor) { + if (Settings.getForcedRootBlock(editor)) { + editor.on('NodeChange', curry(addRootBlocks, editor)); + } + }; + var ForceBlocks = { setup: setup$2 }; + + var isEq$1 = function (rng1, rng2) { + return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset); + }; + var RangeCompare = { isEq: isEq$1 }; + + var getStartNode = function (rng) { + var sc = rng.startContainer, so = rng.startOffset; + if (NodeType.isText(sc)) { + return so === 0 ? Option.some(Element.fromDom(sc)) : Option.none(); + } else { + return Option.from(sc.childNodes[so]).map(Element.fromDom); + } + }; + var getEndNode = function (rng) { + var ec = rng.endContainer, eo = rng.endOffset; + if (NodeType.isText(ec)) { + return eo === ec.data.length ? Option.some(Element.fromDom(ec)) : Option.none(); + } else { + return Option.from(ec.childNodes[eo - 1]).map(Element.fromDom); + } + }; + var getFirstChildren = function (node) { + return firstChild(node).fold(constant([node]), function (child) { + return [node].concat(getFirstChildren(child)); + }); + }; + var getLastChildren = function (node) { + return lastChild(node).fold(constant([node]), function (child) { + if (name(child) === 'br') { + return prevSibling(child).map(function (sibling) { + return [node].concat(getLastChildren(sibling)); + }).getOr([]); + } else { + return [node].concat(getLastChildren(child)); + } + }); + }; + var hasAllContentsSelected = function (elm, rng) { + return liftN([ + getStartNode(rng), + getEndNode(rng) + ], function (startNode, endNode) { + var start = find(getFirstChildren(elm), curry(eq, startNode)); + var end = find(getLastChildren(elm), curry(eq, endNode)); + return start.isSome() && end.isSome(); + }).getOr(false); + }; + var moveEndPoint$1 = function (dom, rng, node, start) { + var root = node, walker = new TreeWalker(node, root); + var nonEmptyElementsMap = dom.schema.getNonEmptyElements(); + do { + if (node.nodeType === 3 && Tools.trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + return; + } + if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) { + if (start) { + rng.setStartBefore(node); + } else { + if (node.nodeName === 'BR') { + rng.setEndBefore(node); + } else { + rng.setEndAfter(node); + } + } + return; + } + if (Env.ie && Env.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, 0); + } + return; + } + } while (node = start ? walker.next() : walker.prev()); + if (root.nodeName === 'BODY') { + if (start) { + rng.setStart(root, 0); + } else { + rng.setEnd(root, root.childNodes.length); + } + } + }; + var hasAnyRanges = function (editor) { + var sel = editor.selection.getSel(); + return sel && sel.rangeCount > 0; + }; + + var NodeChange = function () { + function NodeChange(editor) { + this.lastPath = []; + this.editor = editor; + var lastRng; + var self = this; + if (!('onselectionchange' in editor.getDoc())) { + editor.on('NodeChange click mouseup keyup focus', function (e) { + var nativeRng, fakeRng; + nativeRng = editor.selection.getRng(); + fakeRng = { + startContainer: nativeRng.startContainer, + startOffset: nativeRng.startOffset, + endContainer: nativeRng.endContainer, + endOffset: nativeRng.endOffset + }; + if (e.type === 'nodechange' || !RangeCompare.isEq(fakeRng, lastRng)) { + editor.fire('SelectionChange'); + } + lastRng = fakeRng; + }); + } + editor.on('contextmenu', function () { + editor.fire('SelectionChange'); + }); + editor.on('SelectionChange', function () { + var startElm = editor.selection.getStart(true); + if (!startElm || !Env.range && editor.selection.isCollapsed()) { + return; + } + if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) { + editor.nodeChanged({ selectionChange: true }); + } + }); + editor.on('mouseup', function (e) { + if (!e.isDefaultPrevented() && hasAnyRanges(editor)) { + if (editor.selection.getNode().nodeName === 'IMG') { + Delay.setEditorTimeout(editor, function () { + editor.nodeChanged(); + }); + } else { + editor.nodeChanged(); + } + } + }); + } + NodeChange.prototype.nodeChanged = function (args) { + var selection = this.editor.selection; + var node, parents, root; + if (this.editor.initialized && selection && !this.editor.settings.disable_nodechange && !this.editor.readonly) { + root = this.editor.getBody(); + node = selection.getStart(true) || root; + if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) { + node = root; + } + parents = []; + this.editor.dom.getParent(node, function (node) { + if (node === root) { + return true; + } + parents.push(node); + }); + args = args || {}; + args.element = node; + args.parents = parents; + this.editor.fire('NodeChange', args); + } + }; + NodeChange.prototype.isSameElementPath = function (startElm) { + var i, currentPath; + currentPath = this.editor.$(startElm).parentsUntil(this.editor.getBody()).add(startElm); + if (currentPath.length === this.lastPath.length) { + for (i = currentPath.length; i >= 0; i--) { + if (currentPath[i] !== this.lastPath[i]) { + break; + } + } + if (i === -1) { + this.lastPath = currentPath; + return true; + } + } + this.lastPath = currentPath; + return false; + }; + return NodeChange; + }(); + + var getAbsolutePosition = function (elm) { + var doc, docElem, win, clientRect; + clientRect = elm.getBoundingClientRect(); + doc = elm.ownerDocument; + docElem = doc.documentElement; + win = doc.defaultView; + return { + top: clientRect.top + win.pageYOffset - docElem.clientTop, + left: clientRect.left + win.pageXOffset - docElem.clientLeft + }; + }; + var getBodyPosition = function (editor) { + return editor.inline ? getAbsolutePosition(editor.getBody()) : { + left: 0, + top: 0 + }; + }; + var getScrollPosition = function (editor) { + var body = editor.getBody(); + return editor.inline ? { + left: body.scrollLeft, + top: body.scrollTop + } : { + left: 0, + top: 0 + }; + }; + var getBodyScroll = function (editor) { + var body = editor.getBody(), docElm = editor.getDoc().documentElement; + var inlineScroll = { + left: body.scrollLeft, + top: body.scrollTop + }; + var iframeScroll = { + left: body.scrollLeft || docElm.scrollLeft, + top: body.scrollTop || docElm.scrollTop + }; + return editor.inline ? inlineScroll : iframeScroll; + }; + var getMousePosition = function (editor, event) { + if (event.target.ownerDocument !== editor.getDoc()) { + var iframePosition = getAbsolutePosition(editor.getContentAreaContainer()); + var scrollPosition = getBodyScroll(editor); + return { + left: event.pageX - iframePosition.left + scrollPosition.left, + top: event.pageY - iframePosition.top + scrollPosition.top + }; + } + return { + left: event.pageX, + top: event.pageY + }; + }; + var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) { + return { + pageX: mousePosition.left - bodyPosition.left + scrollPosition.left, + pageY: mousePosition.top - bodyPosition.top + scrollPosition.top + }; + }; + var calc = function (editor, event) { + return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event)); + }; + var MousePosition = { calc: calc }; + + var isContentEditableFalse$6 = NodeType.isContentEditableFalse, isContentEditableTrue$2 = NodeType.isContentEditableTrue; + var isDraggable = function (rootElm, elm) { + return isContentEditableFalse$6(elm) && elm !== rootElm; + }; + var isValidDropTarget = function (editor, targetElement, dragElement) { + if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) { + return false; + } + return !isContentEditableFalse$6(targetElement); + }; + var cloneElement = function (elm) { + var cloneElm = elm.cloneNode(true); + cloneElm.removeAttribute('data-mce-selected'); + return cloneElm; + }; + var createGhost = function (editor, elm, width, height) { + var clonedElm = elm.cloneNode(true); + editor.dom.setStyles(clonedElm, { + width: width, + height: height + }); + editor.dom.setAttrib(clonedElm, 'data-mce-selected', null); + var ghostElm = editor.dom.create('div', { + 'class': 'mce-drag-container', + 'data-mce-bogus': 'all', + 'unselectable': 'on', + 'contenteditable': 'false' + }); + editor.dom.setStyles(ghostElm, { + position: 'absolute', + opacity: 0.5, + overflow: 'hidden', + border: 0, + padding: 0, + margin: 0, + width: width, + height: height + }); + editor.dom.setStyles(clonedElm, { + margin: 0, + boxSizing: 'border-box' + }); + ghostElm.appendChild(clonedElm); + return ghostElm; + }; + var appendGhostToBody = function (ghostElm, bodyElm) { + if (ghostElm.parentNode !== bodyElm) { + bodyElm.appendChild(ghostElm); + } + }; + var moveGhost = function (ghostElm, position, width, height, maxX, maxY) { + var overflowX = 0, overflowY = 0; + ghostElm.style.left = position.pageX + 'px'; + ghostElm.style.top = position.pageY + 'px'; + if (position.pageX + width > maxX) { + overflowX = position.pageX + width - maxX; + } + if (position.pageY + height > maxY) { + overflowY = position.pageY + height - maxY; + } + ghostElm.style.width = width - overflowX + 'px'; + ghostElm.style.height = height - overflowY + 'px'; + }; + var removeElement = function (elm) { + if (elm && elm.parentNode) { + elm.parentNode.removeChild(elm); + } + }; + var isLeftMouseButtonPressed = function (e) { + return e.button === 0; + }; + var hasDraggableElement = function (state) { + return state.element; + }; + var applyRelPos = function (state, position) { + return { + pageX: position.pageX - state.relX, + pageY: position.pageY + 5 + }; + }; + var start = function (state, editor) { + return function (e) { + if (isLeftMouseButtonPressed(e)) { + var ceElm = find(editor.dom.getParents(e.target), Predicate.or(isContentEditableFalse$6, isContentEditableTrue$2)).getOr(null); + if (isDraggable(editor.getBody(), ceElm)) { + var elmPos = editor.dom.getPos(ceElm); + var bodyElm = editor.getBody(); + var docElm = editor.getDoc().documentElement; + state.element = ceElm; + state.screenX = e.screenX; + state.screenY = e.screenY; + state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2; + state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2; + state.relX = e.pageX - elmPos.x; + state.relY = e.pageY - elmPos.y; + state.width = ceElm.offsetWidth; + state.height = ceElm.offsetHeight; + state.ghost = createGhost(editor, ceElm, state.width, state.height); + } + } + }; + }; + var move = function (state, editor) { + var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) { + editor._selectionOverrides.hideFakeCaret(); + editor.selection.placeCaretAt(clientX, clientY); + }, 0); + return function (e) { + var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY)); + if (hasDraggableElement(state) && !state.dragging && movement > 10) { + var args = editor.fire('dragstart', { target: state.element }); + if (args.isDefaultPrevented()) { + return; + } + state.dragging = true; + editor.focus(); + } + if (state.dragging) { + var targetPos = applyRelPos(state, MousePosition.calc(editor, e)); + appendGhostToBody(state.ghost, editor.getBody()); + moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY); + throttledPlaceCaretAt(e.clientX, e.clientY); + } + }; + }; + var getRawTarget = function (selection) { + var rng = selection.getSel().getRangeAt(0); + var startContainer = rng.startContainer; + return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer; + }; + var drop = function (state, editor) { + return function (e) { + if (state.dragging) { + if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) { + var targetClone_1 = cloneElement(state.element); + var args = editor.fire('drop', { + targetClone: targetClone_1, + clientX: e.clientX, + clientY: e.clientY + }); + if (!args.isDefaultPrevented()) { + targetClone_1 = args.targetClone; + editor.undoManager.transact(function () { + removeElement(state.element); + editor.insertContent(editor.dom.getOuterHTML(targetClone_1)); + editor._selectionOverrides.hideFakeCaret(); + }); + } + } + } + removeDragState(state); + }; + }; + var stop = function (state, editor) { + return function () { + if (state.dragging) { + editor.fire('dragend'); + } + removeDragState(state); + }; + }; + var removeDragState = function (state) { + state.dragging = false; + state.element = null; + removeElement(state.ghost); + }; + var bindFakeDragEvents = function (editor) { + var state = {}; + var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument; + pageDom = DOMUtils$1.DOM; + rootDocument = domGlobals.document; + dragStartHandler = start(state, editor); + dragHandler = move(state, editor); + dropHandler = drop(state, editor); + dragEndHandler = stop(state, editor); + editor.on('mousedown', dragStartHandler); + editor.on('mousemove', dragHandler); + editor.on('mouseup', dropHandler); + pageDom.bind(rootDocument, 'mousemove', dragHandler); + pageDom.bind(rootDocument, 'mouseup', dragEndHandler); + editor.on('remove', function () { + pageDom.unbind(rootDocument, 'mousemove', dragHandler); + pageDom.unbind(rootDocument, 'mouseup', dragEndHandler); + }); + }; + var blockIeDrop = function (editor) { + editor.on('drop', function (e) { + var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null; + if (isContentEditableFalse$6(realTarget) || isContentEditableFalse$6(editor.dom.getContentEditableParent(realTarget))) { + e.preventDefault(); + } + }); + }; + var init = function (editor) { + bindFakeDragEvents(editor); + blockIeDrop(editor); + }; + var DragDropOverrides = { init: init }; + + var getNodeClientRects = function (node) { + var toArrayWithNode = function (clientRects) { + return map(clientRects, function (clientRect) { + clientRect = clone$1(clientRect); + clientRect.node = node; + return clientRect; + }); + }; + if (NodeType.isElement(node)) { + return toArrayWithNode(node.getClientRects()); + } + if (NodeType.isText(node)) { + var rng = node.ownerDocument.createRange(); + rng.setStart(node, 0); + rng.setEnd(node, node.data.length); + return toArrayWithNode(rng.getClientRects()); + } + }; + var getClientRects = function (node) { + return foldl(node, function (result, node) { + return result.concat(getNodeClientRects(node)); + }, []); + }; + + var VDirection; + (function (VDirection) { + VDirection[VDirection['Up'] = -1] = 'Up'; + VDirection[VDirection['Down'] = 1] = 'Down'; + }(VDirection || (VDirection = {}))); + var findUntil = function (direction, root, predicateFn, node) { + while (node = findNode(node, direction, isEditableCaretCandidate, root)) { + if (predicateFn(node)) { + return; + } + } + }; + var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) { + var line = 0, node; + var result = []; + var targetClientRect; + var add = function (node) { + var i, clientRect, clientRects; + clientRects = getClientRects([node]); + if (direction === -1) { + clientRects = clientRects.reverse(); + } + for (i = 0; i < clientRects.length; i++) { + clientRect = clientRects[i]; + if (isBeflowFn(clientRect, targetClientRect)) { + continue; + } + if (result.length > 0 && isAboveFn(clientRect, ArrUtils.last(result))) { + line++; + } + clientRect.line = line; + if (predicateFn(clientRect)) { + return true; + } + result.push(clientRect); + } + }; + targetClientRect = ArrUtils.last(caretPosition.getClientRects()); + if (!targetClientRect) { + return result; + } + node = caretPosition.getNode(); + add(node); + findUntil(direction, root, add, node); + return result; + }; + var aboveLineNumber = function (lineNumber, clientRect) { + return clientRect.line > lineNumber; + }; + var isLineNumber = function (lineNumber, clientRect) { + return clientRect.line === lineNumber; + }; + var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow); + var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove); + var positionsUntil = function (direction, root, predicateFn, node) { + var caretWalker = CaretWalker(root); + var walkFn, isBelowFn, isAboveFn, caretPosition; + var result = []; + var line = 0, clientRect, targetClientRect; + var getClientRect = function (caretPosition) { + if (direction === 1) { + return ArrUtils.last(caretPosition.getClientRects()); + } + return ArrUtils.last(caretPosition.getClientRects()); + }; + if (direction === 1) { + walkFn = caretWalker.next; + isBelowFn = isBelow; + isAboveFn = isAbove; + caretPosition = CaretPosition$1.after(node); + } else { + walkFn = caretWalker.prev; + isBelowFn = isAbove; + isAboveFn = isBelow; + caretPosition = CaretPosition$1.before(node); + } + targetClientRect = getClientRect(caretPosition); + do { + if (!caretPosition.isVisible()) { + continue; + } + clientRect = getClientRect(caretPosition); + if (isAboveFn(clientRect, targetClientRect)) { + continue; + } + if (result.length > 0 && isBelowFn(clientRect, ArrUtils.last(result))) { + line++; + } + clientRect = clone$1(clientRect); + clientRect.position = caretPosition; + clientRect.line = line; + if (predicateFn(clientRect)) { + return result; + } + result.push(clientRect); + } while (caretPosition = walkFn(caretPosition)); + return result; + }; + var isAboveLine = function (lineNumber) { + return function (clientRect) { + return aboveLineNumber(lineNumber, clientRect); + }; + }; + var isLine = function (lineNumber) { + return function (clientRect) { + return isLineNumber(lineNumber, clientRect); + }; + }; + + var isContentEditableFalse$7 = NodeType.isContentEditableFalse; + var findNode$1 = findNode; + var distanceToRectLeft = function (clientRect, clientX) { + return Math.abs(clientRect.left - clientX); + }; + var distanceToRectRight = function (clientRect, clientX) { + return Math.abs(clientRect.right - clientX); + }; + var isInside = function (clientX, clientRect) { + return clientX >= clientRect.left && clientX <= clientRect.right; + }; + var findClosestClientRect = function (clientRects, clientX) { + return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) { + var oldDistance, newDistance; + oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX)); + newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX)); + if (isInside(clientX, clientRect)) { + return clientRect; + } + if (isInside(clientX, oldClientRect)) { + return oldClientRect; + } + if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) { + return clientRect; + } + if (newDistance < oldDistance) { + return clientRect; + } + return oldClientRect; + }); + }; + var walkUntil$1 = function (direction, root, predicateFn, node) { + while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) { + if (predicateFn(node)) { + return; + } + } + }; + var findLineNodeRects = function (root, targetNodeRect) { + var clientRects = []; + var collect = function (checkPosFn, node) { + var lineRects; + lineRects = filter(getClientRects([node]), function (clientRect) { + return !checkPosFn(clientRect, targetNodeRect); + }); + clientRects = clientRects.concat(lineRects); + return lineRects.length === 0; + }; + clientRects.push(targetNodeRect); + walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node); + walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node); + return clientRects; + }; + var getFakeCaretTargets = function (root) { + return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget); + }; + var caretInfo = function (clientRect, clientX) { + return { + node: clientRect.node, + before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX) + }; + }; + var closestCaret = function (root, clientX, clientY) { + var closestNodeRect; + var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root)); + var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) { + return clientY >= rect.top && clientY <= rect.bottom; + }); + closestNodeRect = findClosestClientRect(targetNodeRects, clientX); + if (closestNodeRect) { + closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX); + if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) { + return caretInfo(closestNodeRect, clientX); + } + } + return null; + }; + + var isXYWithinRange = function (clientX, clientY, range) { + if (range.collapsed) { + return false; + } + return foldl(range.getClientRects(), function (state, rect) { + return state || containsXY(rect, clientX, clientY); + }, false); + }; + var RangePoint = { isXYWithinRange: isXYWithinRange }; + + var isContentEditableTrue$3 = NodeType.isContentEditableTrue; + var isContentEditableFalse$8 = NodeType.isContentEditableFalse; + var showCaret = function (direction, editor, node, before, scrollIntoView) { + return editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView); + }; + var getNodeRange = function (node) { + var rng = node.ownerDocument.createRange(); + rng.selectNode(node); + return rng; + }; + var selectNode = function (editor, node) { + var e = editor.fire('BeforeObjectSelected', { target: node }); + if (e.isDefaultPrevented()) { + return null; + } + return getNodeRange(node); + }; + var renderCaretAtRange = function (editor, range, scrollIntoView) { + var normalizedRange = normalizeRange(1, editor.getBody(), range); + var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange); + var caretPositionNode = caretPosition.getNode(); + if (isContentEditableFalse$8(caretPositionNode)) { + return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false); + } + var caretPositionBeforeNode = caretPosition.getNode(true); + if (isContentEditableFalse$8(caretPositionBeforeNode)) { + return showCaret(1, editor, caretPositionBeforeNode, false, false); + } + var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) { + return isContentEditableFalse$8(node) || isContentEditableTrue$3(node); + }); + if (isContentEditableFalse$8(ceRoot)) { + return showCaret(1, editor, ceRoot, false, scrollIntoView); + } + return null; + }; + var renderRangeCaret = function (editor, range, scrollIntoView) { + if (!range || !range.collapsed) { + return range; + } + var caretRange = renderCaretAtRange(editor, range, scrollIntoView); + if (caretRange) { + return caretRange; + } + return range; + }; + + var setup$3 = function (editor) { + var renderFocusCaret = first(function () { + if (!editor.removed && editor.getBody().contains(domGlobals.document.activeElement)) { + var rng = editor.selection.getRng(); + if (rng.collapsed) { + var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false); + editor.selection.setRng(caretRange); + } + } + }, 0); + editor.on('focus', function () { + renderFocusCaret.throttle(); + }); + editor.on('blur', function () { + renderFocusCaret.cancel(); + }); + }; + var CefFocus = { setup: setup$3 }; + + var VK = { + BACKSPACE: 8, + DELETE: 46, + DOWN: 40, + ENTER: 13, + LEFT: 37, + RIGHT: 39, + SPACEBAR: 32, + TAB: 9, + UP: 38, + END: 35, + HOME: 36, + modifierPressed: function (e) { + return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e); + }, + metaKeyPressed: function (e) { + return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey; + } + }; + + var is$2 = function (expected) { + return function (actual) { + return expected === actual; + }; + }; + var isNbsp = is$2('\xA0'); + var isWhiteSpace$1 = function (chr) { + return /^[\r\n\t ]$/.test(chr); + }; + var isContent = function (chr) { + return !isWhiteSpace$1(chr) && !isNbsp(chr); + }; + + var isChar = function (forward, predicate, pos) { + return Option.from(pos.container()).filter(NodeType.isText).exists(function (text) { + var delta = forward ? 0 : -1; + return predicate(text.data.charAt(pos.offset() + delta)); + }); + }; + var isBeforeSpace = curry(isChar, true, isWhiteSpace$1); + var isAfterSpace = curry(isChar, false, isWhiteSpace$1); + var isEmptyText = function (pos) { + var container = pos.container(); + return NodeType.isText(container) && container.data.length === 0; + }; + var matchesElementPosition = function (before, predicate) { + return function (pos) { + return Option.from(getChildNodeAtRelativeOffset(before ? 0 : -1, pos)).filter(predicate).isSome(); + }; + }; + var isImageBlock = function (node) { + return node.nodeName === 'IMG' && get$2(Element.fromDom(node), 'display') === 'block'; + }; + var isCefNode = function (node) { + return NodeType.isContentEditableFalse(node) && !NodeType.isBogusAll(node); + }; + var isBeforeImageBlock = matchesElementPosition(true, isImageBlock); + var isAfterImageBlock = matchesElementPosition(false, isImageBlock); + var isBeforeTable = matchesElementPosition(true, NodeType.isTable); + var isAfterTable = matchesElementPosition(false, NodeType.isTable); + var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode); + var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode); + + var isContentEditableTrue$4 = NodeType.isContentEditableTrue; + var isContentEditableFalse$9 = NodeType.isContentEditableFalse; + var getContentEditableRoot = function (editor, node) { + var root = editor.getBody(); + while (node && node !== root) { + if (isContentEditableTrue$4(node) || isContentEditableFalse$9(node)) { + return node; + } + node = node.parentNode; + } + return null; + }; + var SelectionOverrides = function (editor) { + var isBlock = function (node) { + return editor.dom.isBlock(node); + }; + var rootNode = editor.getBody(); + var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () { + return EditorFocus.hasFocus(editor); + }); + var realSelectionId = 'sel-' + editor.dom.uniqueId(); + var selectedContentEditableNode; + var isFakeSelectionElement = function (elm) { + return editor.dom.hasClass(elm, 'mce-offscreen-selection'); + }; + var getRealSelectionElement = function () { + var container = editor.dom.get(realSelectionId); + return container ? container.getElementsByTagName('*')[0] : container; + }; + var setRange = function (range) { + if (range) { + editor.selection.setRng(range); + } + }; + var getRange = function () { + return editor.selection.getRng(); + }; + var showCaret = function (direction, node, before, scrollIntoView) { + if (scrollIntoView === void 0) { + scrollIntoView = true; + } + var e; + e = editor.fire('ShowCaret', { + target: node, + direction: direction, + before: before + }); + if (e.isDefaultPrevented()) { + return null; + } + if (scrollIntoView) { + editor.selection.scrollIntoView(node, direction === -1); + } + return fakeCaret.show(before, node); + }; + var getNormalizedRangeEndPoint = function (direction, range) { + range = normalizeRange(direction, rootNode, range); + if (direction === -1) { + return CaretPosition$1.fromRangeStart(range); + } + return CaretPosition$1.fromRangeEnd(range); + }; + var showBlockCaretContainer = function (blockCaretContainer) { + if (blockCaretContainer.hasAttribute('data-mce-caret')) { + showCaretContainerBlock(blockCaretContainer); + setRange(getRange()); + editor.selection.scrollIntoView(blockCaretContainer[0]); + } + }; + var registerEvents = function () { + editor.on('mouseup', function (e) { + var range = getRange(); + if (range.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) { + setRange(renderCaretAtRange(editor, range, false)); + } + }); + editor.on('click', function (e) { + var contentEditableRoot; + contentEditableRoot = getContentEditableRoot(editor, e.target); + if (contentEditableRoot) { + if (isContentEditableFalse$9(contentEditableRoot)) { + e.preventDefault(); + editor.focus(); + } + if (isContentEditableTrue$4(contentEditableRoot)) { + if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) { + removeContentEditableSelection(); + } + } + } + }); + editor.on('blur NewBlock', function () { + removeContentEditableSelection(); + }); + editor.on('ResizeWindow FullscreenStateChanged', function () { + return fakeCaret.reposition(); + }); + var handleTouchSelect = function (editor) { + var moved = false; + editor.on('touchstart', function () { + moved = false; + }); + editor.on('touchmove', function () { + moved = true; + }); + editor.on('touchend', function (e) { + var contentEditableRoot = getContentEditableRoot(editor, e.target); + if (isContentEditableFalse$9(contentEditableRoot)) { + if (!moved) { + e.preventDefault(); + setContentEditableSelection(selectNode(editor, contentEditableRoot)); + } + } + }); + }; + var hasNormalCaretPosition = function (elm) { + var caretWalker = CaretWalker(elm); + if (!elm.firstChild) { + return false; + } + var startPos = CaretPosition$1.before(elm.firstChild); + var newPos = caretWalker.next(startPos); + return newPos && !isBeforeContentEditableFalse(newPos) && !isAfterContentEditableFalse(newPos); + }; + var isInSameBlock = function (node1, node2) { + var block1 = editor.dom.getParent(node1, editor.dom.isBlock); + var block2 = editor.dom.getParent(node2, editor.dom.isBlock); + return block1 === block2; + }; + var hasBetterMouseTarget = function (targetNode, caretNode) { + var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock); + var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock); + if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot(editor, targetBlock)) === false) { + return true; + } + return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock); + }; + handleTouchSelect(editor); + editor.on('mousedown', function (e) { + var contentEditableRoot; + var targetElm = e.target; + if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) { + return; + } + if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) { + return; + } + contentEditableRoot = getContentEditableRoot(editor, targetElm); + if (contentEditableRoot) { + if (isContentEditableFalse$9(contentEditableRoot)) { + e.preventDefault(); + setContentEditableSelection(selectNode(editor, contentEditableRoot)); + } else { + removeContentEditableSelection(); + if (!(isContentEditableTrue$4(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) { + hideFakeCaret(); + editor.selection.placeCaretAt(e.clientX, e.clientY); + } + } + } else if (isFakeCaretTarget(targetElm) === false) { + removeContentEditableSelection(); + hideFakeCaret(); + var caretInfo = closestCaret(rootNode, e.clientX, e.clientY); + if (caretInfo) { + if (!hasBetterMouseTarget(e.target, caretInfo.node)) { + e.preventDefault(); + var range = showCaret(1, caretInfo.node, caretInfo.before, false); + editor.getBody().focus(); + setRange(range); + } + } + } + }); + editor.on('keypress', function (e) { + if (VK.modifierPressed(e)) { + return; + } + switch (e.keyCode) { + default: + if (isContentEditableFalse$9(editor.selection.getNode())) { + e.preventDefault(); + } + break; + } + }); + editor.on('GetSelectionRange', function (e) { + var rng = e.range; + if (selectedContentEditableNode) { + if (!selectedContentEditableNode.parentNode) { + selectedContentEditableNode = null; + return; + } + rng = rng.cloneRange(); + rng.selectNode(selectedContentEditableNode); + e.range = rng; + } + }); + editor.on('SetSelectionRange', function (e) { + var rng; + rng = setContentEditableSelection(e.range, e.forward); + if (rng) { + e.range = rng; + } + }); + var isPasteBin = function (node) { + return node.id === 'mcepastebin'; + }; + editor.on('AfterSetSelectionRange', function (e) { + var rng = e.range; + if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) { + hideFakeCaret(); + } + if (!isFakeSelectionElement(rng.startContainer.parentNode)) { + removeContentEditableSelection(); + } + }); + editor.on('copy', function (e) { + var clipboardData = e.clipboardData; + if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) { + var realSelectionElement = getRealSelectionElement(); + if (realSelectionElement) { + e.preventDefault(); + clipboardData.clearData(); + clipboardData.setData('text/html', realSelectionElement.outerHTML); + clipboardData.setData('text/plain', realSelectionElement.outerText); + } + } + }); + DragDropOverrides.init(editor); + CefFocus.setup(editor); + }; + var isWithinCaretContainer = function (node) { + return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node); + }; + var isRangeInCaretContainer = function (rng) { + return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer); + }; + var setContentEditableSelection = function (range, forward) { + var node; + var $ = editor.$; + var dom = editor.dom; + var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone; + if (!range) { + return null; + } + if (range.collapsed) { + if (!isRangeInCaretContainer(range)) { + if (forward === false) { + caretPosition = getNormalizedRangeEndPoint(-1, range); + if (isFakeCaretTarget(caretPosition.getNode(true))) { + return showCaret(-1, caretPosition.getNode(true), false, false); + } + if (isFakeCaretTarget(caretPosition.getNode())) { + return showCaret(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false); + } + } else { + caretPosition = getNormalizedRangeEndPoint(1, range); + if (isFakeCaretTarget(caretPosition.getNode())) { + return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false); + } + if (isFakeCaretTarget(caretPosition.getNode(true))) { + return showCaret(1, caretPosition.getNode(true), false, false); + } + } + } + return null; + } + startContainer = range.startContainer; + startOffset = range.startOffset; + endOffset = range.endOffset; + if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) { + startContainer = startContainer.parentNode; + startOffset = dom.nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + if (startContainer.nodeType !== 1) { + return null; + } + if (endOffset === startOffset + 1) { + node = startContainer.childNodes[startOffset]; + } + if (!isContentEditableFalse$9(node)) { + return null; + } + targetClone = origTargetClone = node.cloneNode(true); + e = editor.fire('ObjectSelected', { + target: node, + targetClone: targetClone + }); + if (e.isDefaultPrevented()) { + return null; + } + $realSelectionContainer = descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () { + return $([]); + }, function (elm) { + return $([elm.dom()]); + }); + targetClone = e.targetClone; + if ($realSelectionContainer.length === 0) { + $realSelectionContainer = $('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr('id', realSelectionId); + $realSelectionContainer.appendTo(editor.getBody()); + } + range = editor.dom.createRng(); + if (targetClone === origTargetClone && Env.ie) { + $realSelectionContainer.empty().append('<p style="font-size: 0" data-mce-bogus="all">\xA0</p>').append(targetClone); + range.setStartAfter($realSelectionContainer[0].firstChild.firstChild); + range.setEndAfter(targetClone); + } else { + $realSelectionContainer.empty().append('\xA0').append(targetClone).append('\xA0'); + range.setStart($realSelectionContainer[0].firstChild, 1); + range.setEnd($realSelectionContainer[0].lastChild, 0); + } + $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y }); + $realSelectionContainer[0].focus(); + sel = editor.selection.getSel(); + sel.removeAllRanges(); + sel.addRange(range); + each(descendants$1(Element.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) { + remove(elm, 'data-mce-selected'); + }); + node.setAttribute('data-mce-selected', '1'); + selectedContentEditableNode = node; + hideFakeCaret(); + return range; + }; + var removeContentEditableSelection = function () { + if (selectedContentEditableNode) { + selectedContentEditableNode.removeAttribute('data-mce-selected'); + descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1); + selectedContentEditableNode = null; + } + descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1); + selectedContentEditableNode = null; + }; + var destroy = function () { + fakeCaret.destroy(); + selectedContentEditableNode = null; + }; + var hideFakeCaret = function () { + fakeCaret.hide(); + }; + if (Env.ceFalse) { + registerEvents(); + } + return { + showCaret: showCaret, + showBlockCaretContainer: showBlockCaretContainer, + hideFakeCaret: hideFakeCaret, + destroy: destroy + }; + }; + + var KEEP = 0, INSERT = 1, DELETE = 2; + var diff = function (left, right) { + var size = left.length + right.length + 2; + var vDown = new Array(size); + var vUp = new Array(size); + var snake = function (start, end, diag) { + return { + start: start, + end: end, + diag: diag + }; + }; + var buildScript = function (start1, end1, start2, end2, script) { + var middle = getMiddleSnake(start1, end1, start2, end2); + if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) { + var i = start1; + var j = start2; + while (i < end1 || j < end2) { + if (i < end1 && j < end2 && left[i] === right[j]) { + script.push([ + KEEP, + left[i] + ]); + ++i; + ++j; + } else { + if (end1 - start1 > end2 - start2) { + script.push([ + DELETE, + left[i] + ]); + ++i; + } else { + script.push([ + INSERT, + right[j] + ]); + ++j; + } + } + } + } else { + buildScript(start1, middle.start, start2, middle.start - middle.diag, script); + for (var i2 = middle.start; i2 < middle.end; ++i2) { + script.push([ + KEEP, + left[i2] + ]); + } + buildScript(middle.end, end1, middle.end - middle.diag, end2, script); + } + }; + var buildSnake = function (start, diag, end1, end2) { + var end = start; + while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) { + ++end; + } + return snake(start, end, diag); + }; + var getMiddleSnake = function (start1, end1, start2, end2) { + var m = end1 - start1; + var n = end2 - start2; + if (m === 0 || n === 0) { + return null; + } + var delta = m - n; + var sum = n + m; + var offset = (sum % 2 === 0 ? sum : sum + 1) / 2; + vDown[1 + offset] = start1; + vUp[1 + offset] = end1 + 1; + var d, k, i, x, y; + for (d = 0; d <= offset; ++d) { + for (k = -d; k <= d; k += 2) { + i = k + offset; + if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) { + vDown[i] = vDown[i + 1]; + } else { + vDown[i] = vDown[i - 1] + 1; + } + x = vDown[i]; + y = x - start1 + start2 - k; + while (x < end1 && y < end2 && left[x] === right[y]) { + vDown[i] = ++x; + ++y; + } + if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) { + if (vUp[i - delta] <= vDown[i]) { + return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2); + } + } + } + for (k = delta - d; k <= delta + d; k += 2) { + i = k + offset - delta; + if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) { + vUp[i] = vUp[i + 1] - 1; + } else { + vUp[i] = vUp[i - 1]; + } + x = vUp[i] - 1; + y = x - start1 + start2 - k; + while (x >= start1 && y >= start2 && left[x] === right[y]) { + vUp[i] = x--; + y--; + } + if (delta % 2 === 0 && -d <= k && k <= d) { + if (vUp[i] <= vDown[i + delta]) { + return buildSnake(vUp[i], k + start1 - start2, end1, end2); + } + } + } + } + }; + var script = []; + buildScript(0, left.length, 0, right.length, script); + return script; + }; + var Diff = { + KEEP: KEEP, + DELETE: DELETE, + INSERT: INSERT, + diff: diff + }; + + var getOuterHtml = function (elm) { + if (NodeType.isElement(elm)) { + return elm.outerHTML; + } else if (NodeType.isText(elm)) { + return Entities.encodeRaw(elm.data, false); + } else if (NodeType.isComment(elm)) { + return '<!--' + elm.data + '-->'; + } + return ''; + }; + var createFragment$1 = function (html) { + var frag, node, container; + container = domGlobals.document.createElement('div'); + frag = domGlobals.document.createDocumentFragment(); + if (html) { + container.innerHTML = html; + } + while (node = container.firstChild) { + frag.appendChild(node); + } + return frag; + }; + var insertAt = function (elm, html, index) { + var fragment = createFragment$1(html); + if (elm.hasChildNodes() && index < elm.childNodes.length) { + var target = elm.childNodes[index]; + target.parentNode.insertBefore(fragment, target); + } else { + elm.appendChild(fragment); + } + }; + var removeAt = function (elm, index) { + if (elm.hasChildNodes() && index < elm.childNodes.length) { + var target = elm.childNodes[index]; + target.parentNode.removeChild(target); + } + }; + var applyDiff = function (diff, elm) { + var index = 0; + each(diff, function (action) { + if (action[0] === Diff.KEEP) { + index++; + } else if (action[0] === Diff.INSERT) { + insertAt(elm, action[1], index); + index++; + } else if (action[0] === Diff.DELETE) { + removeAt(elm, index); + } + }); + }; + var read$1 = function (elm) { + return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) { + return item.length > 0; + }); + }; + var write = function (fragments, elm) { + var currentFragments = map(from$1(elm.childNodes), getOuterHtml); + applyDiff(Diff.diff(currentFragments, fragments), elm); + return elm; + }; + var Fragments = { + read: read$1, + write: write + }; + + var undoLevelDocument = Cell(Option.none()); + var lazyTempDocument = function () { + return undoLevelDocument.get().getOrThunk(function () { + var doc = domGlobals.document.implementation.createHTMLDocument('undo'); + undoLevelDocument.set(Option.some(doc)); + return doc; + }); + }; + var hasIframes = function (html) { + return html.indexOf('</iframe>') !== -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('<br data-mce-bogus="1">')); + }; + 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.split(''), 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('<br data-mce-bogus="1">'); + 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$4 = 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('<br><br>').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 (!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), bookmark); + 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$5 = 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$5(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$1 = 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$1 }; + + var setup$6 = 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$6 }; + + var Formatter = function (editor) { + var formats = FormatRegistry(editor); + var formatChangeState = Cell(null); + FormatShortcuts.setup(editor); + setup$4(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 = 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(/(<!--\[CDATA\[|\]\]-->)/g, '\n').replace(/^[\r\n]*|[\r\n]*$/g, '').replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi, '').replace(/\s*(\/\*\s*\]\]>\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 = '// <![CDATA[\n' + trim(value) + '\n// ]]>'; + } + } else { + if (settings.element_format === 'xhtml' && value.length > 0) { + node.firstChild.value = '<!--\n' + trim(value) + '\n-->'; + } + } + } + }); + 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, + 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$1 = function (domParser, settings) { + if (settings.inline_styles) { + addFilters(domParser, settings); + } + }; + var LegacyFilter = { register: register$1 }; + + 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$2 = 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$2(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()) { + evt.preventDefault(); + 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); + }); + editor.on('remove', unbindResizeHandleEvents); + var destroy = function () { + selectedElm = selectedElmGhost = null; + }; + return { + isResizable: isResizable, + showResizeRect: showResizeRect, + hideResizeRect: hideResizeRect, + updateResizeRect: updateResizeRect, + destroy: destroy + }; + }; + + var getPos$1 = function (elm) { + var x = 0, y = 0; + var offsetParent = elm; + while (offsetParent && offsetParent.nodeType) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + return { + x: x, + y: y + }; + }; + var fireScrollIntoViewEvent = function (editor, elm, alignToTop) { + var scrollEvent = { + elm: elm, + alignToTop: alignToTop + }; + editor.fire('ScrollIntoView', scrollEvent); + return scrollEvent.isDefaultPrevented(); + }; + var scrollElementIntoView = function (editor, elm, alignToTop) { + var y, viewPort; + var dom = editor.dom; + var root = dom.getRoot(); + var viewPortY, viewPortH, offsetY = 0; + if (fireScrollIntoViewEvent(editor, elm, alignToTop)) { + return; + } + if (!NodeType.isElement(elm)) { + return; + } + if (alignToTop === false) { + offsetY = elm.offsetHeight; + } + if (root.nodeName !== 'BODY') { + var scrollContainer = editor.selection.getScrollContainer(); + if (scrollContainer) { + y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY; + viewPortH = scrollContainer.clientHeight; + viewPortY = scrollContainer.scrollTop; + if (y < viewPortY || y + 25 > viewPortY + viewPortH) { + scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25; + } + return; + } + } + viewPort = dom.getViewPort(editor.getWin()); + y = dom.getPos(elm).y + offsetY; + viewPortY = viewPort.y; + viewPortH = viewPort.h; + if (y < viewPort.y || y + 25 > viewPortY + viewPortH) { + editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25); + } + }; + var getViewPortRect = function (editor) { + if (editor.inline) { + return editor.getBody().getBoundingClientRect(); + } else { + var win = editor.getWin(); + return { + left: 0, + right: win.innerWidth, + top: 0, + bottom: win.innerHeight, + width: win.innerWidth, + height: win.innerHeight + }; + } + }; + var scrollBy = function (editor, dx, dy) { + if (editor.inline) { + editor.getBody().scrollLeft += dx; + editor.getBody().scrollTop += dy; + } else { + editor.getWin().scrollBy(dx, dy); + } + }; + var scrollRangeIntoView = function (editor, rng) { + head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) { + var bodyRect = getViewPortRect(editor); + var overflow = getOverflow(bodyRect, rngRect); + var margin = 4; + var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin; + var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin; + scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0); + }); + }; + var ScrollIntoView = { + scrollElementIntoView: scrollElementIntoView, + scrollRangeIntoView: scrollRangeIntoView + }; + + 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 = 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(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 = 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$1 = function (real) { + return getStart(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()) { + 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$1, + 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) { + var selector = getString(editor, 'inline_boundaries_selector').getOr('a[href],code'); + return is$1(Element.fromDom(elm), selector); + }; + 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$3 = 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$2 = 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$3, + start$1, + end, + after$2 + ], [ + 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 = '<br data-mce-bogus="1">'; + } + 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, td); + }); + }).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$7 = function (editor, caret) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride(editor, caret, evt); + } + }); + }; + var ArrowKeys = { setup: setup$7 }; + + 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 executeKeydownOverride$1 = function (editor, caret, evt) { + MatchKeys.execute([ + { + 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$8 = 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$8 }; + + 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 = '<br data-mce-bogus="1">'; + }; + 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$9 = function (editor) { + editor.on('keydown', function (event) { + if (event.keyCode === VK.ENTER) { + handleEnterKeyEvent(editor, event); + } + }); + }; + var EnterKey = { setup: setup$9 }; + + 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 navigateIgnoreEmptyTextNodes = function (forward, root, from) { + return CaretFinder.navigateIgnore(forward, root, from, isEmptyText); + }; + var isAtBlockBoundary = function (forward, root, pos) { + var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock); + return head(parentBlocks).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 nbsp = '\xA0'; + var isInMiddleOfText = function (pos) { + return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd(); + }; + var getClosestBlock = 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(root, pos).dom(), pos).exists(isAfterSpace); + } + }; + var hasSpaceAfter = function (root, pos) { + if (isInMiddleOfText(pos)) { + return isBeforeSpace(pos); + } else { + return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock(root, pos).dom(), pos).exists(isBeforeSpace); + } + }; + var isPreValue = function (value) { + return contains([ + 'pre', + 'pre-line', + '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) || 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) || 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$a = function (editor) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride$2(editor, evt); + } + }); + }; + var SpaceKey = { setup: setup$a }; + + 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$b = function (editor) { + editor.on('keyup compositionstart', curry(handleBlockContainer, editor)); + }; + var CaretContainerInput = { setup: setup$b }; + + 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$c = 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$d = function (editor) { + editor.on('keydown', function (evt) { + if (evt.isDefaultPrevented() === false) { + executeKeydownOverride$3(editor, evt); + } + }); + }; + var HomeEndKeys = { setup: setup$d }; + + var setup$e = 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$c(editor); + HomeEndKeys.setup(editor); + }; + var KeyboardOverrides = { setup: setup$e }; + + 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$f = 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$g = function (editor) { + preventSummaryToggle(editor); + filterDetails(editor); + }; + + var DOM$2 = 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$2.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$2.removeClass(bodyEl, 'mce-content-body'); + DOM$2.removeClass(bodyEl, 'mce-edit-focus'); + DOM$2.setAttrib(bodyEl, 'contentEditable', null); + }); + DOM$2.addClass(targetElm, 'mce-content-body'); + editor.contentDocument = doc = settings.content_document || domGlobals.document; + editor.contentWindow = settings.content_window || domGlobals.window; + editor.bodyElement = targetElm; + editor.contentAreaContainer = targetElm; + settings.content_document = settings.content_window = null; + settings.root_name = targetElm.nodeName.toLowerCase(); + } + body = editor.getBody(); + body.disabled = true; + editor.readonly = settings.readonly; + if (!editor.readonly) { + if (editor.inline && DOM$2.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(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$g(editor); + setup$f(editor); + KeyboardOverrides.setup(editor); + ForceBlocks.setup(editor); + editor.fire('PreInit'); + if (!settings.browser_spellcheck && !settings.gecko_spellcheck) { + doc.body.spellcheck = false; + DOM$2.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 '<!--mce:protected ' + escape(str) + '-->'; + }); + }); + }); + } + 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$3 = 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$3.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) + '<html><head>'; + if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) { + iframeHTML += '<base href="' + editor.documentBaseURI.getURI() + '" />'; + } + iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'; + bodyId = Settings.getBodyId(editor); + bodyClass = Settings.getBodyClass(editor); + if (Settings.getContentSecurityPolicy(editor)) { + iframeHTML += '<meta http-equiv="Content-Security-Policy" content="' + Settings.getContentSecurityPolicy(editor) + '" />'; + } + iframeHTML += '</head><body id="' + bodyId + '" class="mce-content-body ' + bodyClass + '" data-id="' + editor.id + '"><br></body></html>'; + 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$3.add(o.iframeContainer, ifr); + return isDomainRelaxed; + }; + var init$1 = function (editor, boxInfo) { + var isDomainRelaxed = createIframe(editor, boxInfo); + if (boxInfo.editorContainer) { + DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay; + editor.hidden = DOM$3.isHidden(boxInfo.editorContainer); + } + editor.getElement().style.display = 'none'; + DOM$3.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$4 = DOMUtils$1.DOM; + var initPlugin = function (editor, initializedPlugins, plugin) { + var Plugin = PluginManager$1.get(plugin); + var pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\/$/, ''); + plugin = Tools.trim(plugin); + if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) { + Tools.each(PluginManager$1.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$4.create('div'); + DOM$4.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$5 = 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') { + if (languageUrl !== '') { + scriptLoader.add(languageUrl); + } else { + scriptLoader.add(editor.editorManager.baseURL + '/langs/' + languageCode + '.js'); + } + } + }; + 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 loadIcons = function (editor) { + var iconPackName = Tools.trim(editor.getParam('icons', '', 'string')); + if (iconPackName.length > 0 && !IconManager.has(iconPackName)) { + var urlString = editor.editorManager.baseURL + '/icons/' + iconPackName + '/icons.js'; + ScriptLoader.ScriptLoader.add(urlString); + } + }; + var loadPlugins = function (settings, suffix) { + if (Tools.isArray(settings.plugins)) { + settings.plugins = settings.plugins.join(' '); + } + Tools.each(settings.external_plugins, function (url, name) { + PluginManager$1.load(name, url); + settings.plugins += ' ' + name; + }); + Tools.each(settings.plugins.split(/[ ,]/), function (plugin) { + plugin = Tools.trim(plugin); + if (plugin && !PluginManager$1.urls[plugin]) { + if (hasSkipLoadPrefix(plugin)) { + plugin = plugin.substr(1, plugin.length); + var dependencies = PluginManager$1.dependencies(plugin); + Tools.each(dependencies, function (dep) { + var defaultSettings = { + prefix: 'plugins/', + resource: dep, + suffix: '/plugin' + suffix + '.js' + }; + dep = PluginManager$1.createUrl(defaultSettings, dep); + PluginManager$1.load(dep.resource, dep); + }); + } else { + PluginManager$1.load(plugin, { + prefix: 'plugins/', + resource: plugin, + suffix: '/plugin' + suffix + '.js' + }); + } + } + }); + }; + var loadScripts = function (editor, suffix) { + var scriptLoader = ScriptLoader.ScriptLoader; + loadTheme(scriptLoader, editor, suffix, function () { + loadLanguage(scriptLoader, editor); + loadIcons(editor); + loadPlugins(editor.settings, suffix); + scriptLoader.loadQueue(function () { + if (!editor.removed) { + Init.init(editor); + } + }, editor, function (urls) { + ErrorReporter.pluginLoadError(editor, urls[0]); + 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$5.unbind(domGlobals.window, 'ready', readyHandler); + editor.render(); + }; + if (!EventUtils.Event.domLoaded) { + DOM$5.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$5.getParent(id, 'form'); + if (form) { + editor.formElement = form; + if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) { + DOM$5.insertAfter(DOM$5.create('input', { + type: 'hidden', + name: id + }), id); + editor.hasHiddenInput = true; + } + editor.formEventDelegate = function (e) { + editor.fire(e.type, e); + }; + DOM$5.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$5.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 toggleClass = function (elm, cls, state) { + if (has$2(elm, cls) && state === false) { + remove$4(elm, cls); + } else if (state) { + add$3(elm, cls); + } + }; + var create$3 = function (editor) { + var activeMode = 'design'; + var defaultModes = [ + 'design', + 'readonly' + ]; + var availableModes = { + design: { + activate: noop, + deactivate: noop, + editorReadOnly: false + }, + readonly: { + activate: noop, + deactivate: noop, + editorReadOnly: true + } + }; + var setEditorCommandState = function (cmd, state) { + try { + editor.getDoc().execCommand(cmd, false, state); + } catch (ex) { + } + }; + var toggleReadOnly = function (state) { + toggleClass(Element.fromDom(editor.getBody()), 'mce-content-readonly', state); + if (state) { + editor.selection.controlSelection.hideResizeRect(); + editor.readonly = true; + editor.getBody().contentEditable = 'false'; + } else { + editor.readonly = false; + editor.getBody().contentEditable = 'true'; + setEditorCommandState('StyleWithCSS', false); + setEditorCommandState('enableInlineTableEditing', false); + setEditorCommandState('enableObjectResizing', false); + editor.focus(); + editor.nodeChanged(); + } + }; + var switchToMode = function (mode) { + var oldMode = availableModes[activeMode]; + 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(newMode.editorReadOnly); + } + activeMode = mode; + Events.fireSwitchMode(editor, mode); + }; + var set = function (mode) { + if (mode === activeMode) { + return; + } else if (!has(availableModes, mode)) { + throw new Error('Editor mode \'' + mode + '\' is invalid'); + } + if (editor.initialized) { + switchToMode(mode); + } else { + editor.on('init', function () { + return switchToMode(mode); + }); + } + }; + var get = function () { + return activeMode; + }; + var isReadOnly = function () { + return editor.readonly === true; + }; + var register = function (mode, api) { + if (contains(defaultModes, mode)) { + throw new Error('Cannot override default mode ' + mode); + } + availableModes[mode] = __assign({}, api, { + deactivate: function () { + try { + api.deactivate(); + } catch (e) { + domGlobals.console.error('problem while deactivating editor mode ' + mode + ':'); + domGlobals.console.error(e); + } + } + }); + }; + return { + isReadOnly: isReadOnly, + set: set, + get: get, + register: register + }; + }; + + 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(/ (<br>|)$/, ' '); + } else if (!hasSiblingText('nextSibling')) { + html = html.replace(/( | )(<br>|)$/, ' '); + } + } + 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 = '<span id="mce_marker" data-mce-type="bookmark">​</span>'; + 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(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/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 (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 fontNameAction = function (editor, value) { + editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) }); + 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 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 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, '<hr />'); + }, + '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(' ', '%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 returnFalse$1 = function () { + return false; + }; + var returnTrue$1 = function () { + return true; + }; + var EventDispatcher = function () { + function EventDispatcher(settings) { + this.bindings = {}; + this.settings = settings || {}; + this.scope = this.settings.scope || this; + this.toggleEvent = this.settings.toggleEvent || returnFalse$1; + } + 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 = returnTrue$1; + }; + args.stopPropagation = function () { + args.isPropagationStopped = returnTrue$1; + }; + args.stopImmediatePropagation = function () { + args.isImmediatePropagationStopped = returnTrue$1; + }; + args.isDefaultPrevented = returnFalse$1; + args.isPropagationStopped = returnFalse$1; + args.isImmediatePropagationStopped = returnFalse$1; + } + 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 = returnFalse$1; + } + 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$6 = 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$6.select(editor.settings.event_root)[0]; + } + return editor.eventRoot; + } + return editor.getBody(); + }; + var isListening = function (editor) { + return !editor.hidden && !editor.readonly; + }; + var fireEvent = function (editor, eventName, e) { + if (isListening(editor)) { + editor.fire(eventName, e); + } else if (editor.readonly) { + e.preventDefault(); + } + }; + 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$6.isChildOf(target, body)) { + fireEvent(editors[i], eventName, e); + } + } + }; + customEventRootDelegates[eventName] = delegate; + DOM$6.bind(eventRootElm, eventName, delegate); + } else { + delegate = function (e) { + fireEvent(editor, eventName, e); + }; + DOM$6.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.toLowerCase())), 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, '+'), 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.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$4 = 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()] = merge({ type: type }, spec); + }; + }; + 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$4(); + 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$7 = 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; + this.baseUri = editorManager.baseURI; + extend$3(this, EditorObservable); + this.settings = getEditorSettings(this, id, this.documentBaseUrl, editorManager.defaultSettings, settings); + 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.suffix = editorManager.suffix; + this.shortcuts = new Shortcuts(this); + this.editorCommands = new EditorCommands(this); + if (this.settings.cache_suffix) { + Env.cacheSuffix = this.settings.cache_suffix.replace(/^[\?\&]+/, ''); + } + if (this.settings.override_viewport === false) { + Env.overrideViewPort = false; + } + this.ui = { registry: registry() }; + var self = this; + var modeInstance = create$3(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$7.show(self.getContainer()); + DOM$7.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$7.hide(self.getContainer()); + DOM$7.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 = elm.value; + html = self.setContent(value !== undefined ? value : elm.innerHTML, 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 (!/TEXTAREA|INPUT/i.test(elm.nodeName)) { + if (args.is_removing || !self.inline) { + elm.innerHTML = html; + } + if (form = DOM$7.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$7.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$7.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 isEditorUIElement = function (elm) { + return elm.className.toString().indexOf('tox-') !== -1 || elm.className.toString().indexOf('mce-') !== -1; + }; + var FocusManager = { isEditorUIElement: isEditorUIElement }; + + var isManualNodeChange = function (e) { + return e.type === 'nodechange' && e.selectionChange; + }; + var registerPageMouseUp = function (editor, throttledStore) { + var mouseUpPage = function () { + throttledStore.throttle(); + }; + DOMUtils$1.DOM.bind(domGlobals.document, 'mouseup', mouseUpPage); + editor.on('remove', function () { + DOMUtils$1.DOM.unbind(domGlobals.document, 'mouseup', mouseUpPage); + }); + }; + var registerFocusOut = function (editor) { + editor.on('focusout', function () { + SelectionBookmark.store(editor); + }); + }; + var registerMouseUp = function (editor, throttledStore) { + editor.on('mouseup touchend', function (e) { + throttledStore.throttle(); + }); + }; + var registerEditorEvents = function (editor, throttledStore) { + var browser = PlatformDetection$1.detect().browser; + if (browser.isIE()) { + registerFocusOut(editor); + } else { + registerMouseUp(editor, throttledStore); + } + editor.on('keyup NodeChange', function (e) { + if (!isManualNodeChange(e)) { + SelectionBookmark.store(editor); + } + }); + }; + var register$3 = function (editor) { + var throttledStore = first(function () { + SelectionBookmark.store(editor); + }, 0); + if (editor.inline) { + registerPageMouseUp(editor, throttledStore); + } + editor.on('init', function () { + registerEditorEvents(editor, throttledStore); + }); + editor.on('remove', function () { + throttledStore.cancel(); + }); + }; + var SelectionRestore = { register: register$3 }; + + var documentFocusInHandler; + var DOM$8 = DOMUtils$1.DOM; + var isEditorUIElement$1 = function (elm) { + return FocusManager.isEditorUIElement(elm); + }; + var isUIElement = function (editor, elm) { + var customSelector = editor ? editor.settings.custom_ui_selector : ''; + var parent = DOM$8.getParent(elm, function (elm) { + return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false); + }); + return parent !== null; + }; + var getActiveElement = function () { + try { + return domGlobals.document.activeElement; + } catch (ex) { + return domGlobals.document.body; + } + }; + var registerEvents = function (editorManager, e) { + var editor = e.editor; + SelectionRestore.register(editor); + editor.on('focusin', function () { + var self = this; + var focusedEditor = editorManager.focusedEditor; + if (focusedEditor !== self) { + if (focusedEditor) { + focusedEditor.fire('blur', { focusedEditor: self }); + } + editorManager.setActive(self); + editorManager.focusedEditor = self; + self.fire('focus', { blurredEditor: focusedEditor }); + self.focus(true); + } + }); + editor.on('focusout', function () { + var self = this; + Delay.setEditorTimeout(self, function () { + var focusedEditor = editorManager.focusedEditor; + if (!isUIElement(self, getActiveElement()) && focusedEditor === self) { + self.fire('blur', { focusedEditor: null }); + editorManager.focusedEditor = null; + } + }); + }); + if (!documentFocusInHandler) { + documentFocusInHandler = function (e) { + var activeEditor = editorManager.activeEditor; + var target; + target = e.target; + if (activeEditor && target.ownerDocument === domGlobals.document) { + if (target !== domGlobals.document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) { + activeEditor.fire('blur', { focusedEditor: null }); + editorManager.focusedEditor = null; + } + } + }; + DOM$8.bind(domGlobals.document, 'focusin', documentFocusInHandler); + } + }; + var unregisterDocumentEvents = function (editorManager, e) { + if (editorManager.focusedEditor === e.editor) { + editorManager.focusedEditor = null; + } + if (!editorManager.activeEditor) { + DOM$8.unbind(domGlobals.document, 'focusin', documentFocusInHandler); + documentFocusInHandler = null; + } + }; + var setup$h = function (editorManager) { + editorManager.on('AddEditor', curry(registerEvents, editorManager)); + editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager)); + }; + var FocusController = { + setup: setup$h, + isEditorUIElement: isEditorUIElement$1, + isUIElement: isUIElement + }; + + var DOM$9 = DOMUtils$1.DOM; + var explode$4 = Tools.explode, each$k = Tools.each, extend$4 = Tools.extend; + var instanceCounter = 0, beforeUnloadDelegate, boundGlobalEvents = false; + 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 EditorManager = __assign({}, Observable, { + _beforeUnloadHandler: null, + baseURI: null, + baseURL: null, + defaultSettings: {}, + documentBaseURL: null, + suffix: null, + $: DomQuery, + majorVersion: '5', + minorVersion: '0.5', + releaseDate: '2019-05-09', + 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.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\/+$/, '')); + this.baseURI = new URI(this.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 []; + } + 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 () { + self.fire('BeforeUnload'); + }; + DOM$9.bind(window, '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) { + DOM$9.unbind(window, '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; + } + }); + 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$5(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$5(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$5(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$5(x1, y1, x2 - x1, y2 - y1); + }; + var create$5 = function (x, y, w, h) { + return { + x: x, + y: y, + w: w, + h: h + }; + }; + var fromClientRect = function (clientRect) { + return create$5(clientRect.left, clientRect.top, clientRect.width, clientRect.height); + }; + var Rect = { + inflate: inflate, + relativePosition: relativePosition, + findBestRelativePosition: findBestRelativePosition, + intersect: intersect, + clamp: clamp$1, + create: create$5, + 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$6 = 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$6(); + } + 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, + 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<t.length&&(e=v().get(t[0].id)))return e.getContent()},l=function(e){var t=null;return e&&e.id&&d.tinymce&&(t=v().get(e.id)),t},u=function(e){return!!(e&&e.length&&d.tinymce&&e.is(":tinymce"))},s={}; +// Loads or saves contents from/to textarea if the value +// argument is defined it will set the TinyMCE internal contents +// Patch some setter/getter functions these will +// now be able to set/get the contents of editor instances for +// example $('#editorid').html('Content'); will update the TinyMCE iframe instance +p.each(["text","html","val"],function(e,t){var a=s[t]=p.fn[t],c="text"===t;p.fn[t]=function(e){var t=this;if(!u(t))return a.apply(t,arguments);if(e!==f)return o.call(t.filter(":tinymce"),e),a.apply(t.not(":tinymce"),arguments),t;// return original set for chaining +var i="",r=arguments;return(c?t:t.eq(0)).each(function(e,t){var n=l(t);i+=n?c?n.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/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 + * <html> 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); + } + } + + // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed + // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element + // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements. + // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx + // Documents served as xml will throw if using ­ so use xml friendly encoded version. See issue #277 + style = ['­','<style id="s', mod, '">', rule, '</style>'].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 = '<svg/>'; + 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 <input> 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 = '<xyz></xyz>'; + //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<style>' + cssText + '</style>'; + 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<l;i++){ + clone.createElement(elems[i]); + } + return clone; + } + + /** + * Shivs the `createElement` and `createDocumentFragment` methods of the document. + * @private + * @param {Document|DocumentFragment} ownerDocument The document. + * @param {Object} data of the document. + */ + function shivMethods(ownerDocument, data) { + if (!data.cache) { + data.cache = {}; + data.createElem = ownerDocument.createElement; + data.createFrag = ownerDocument.createDocumentFragment; + data.frag = data.createFrag(); + } + + + ownerDocument.createElement = function(nodeName) { + //abort shiv + if (!html5.shivMethods) { + return data.createElem(nodeName); + } + return createElement(nodeName, ownerDocument, data); + }; + + ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' + + 'var n=f.cloneNode(),c=n.createElement;' + + 'h.shivMethods&&(' + + // unroll the `createElement` calls + getElements().join().replace(/[\w\-]+/g, function(nodeName) { + data.createElem(nodeName); + data.frag.createElement(nodeName); + return 'c("' + nodeName + '")'; + }) + + ');return n}' + )(html5, data.frag); + } + + /*--------------------------------------------------------------------------*/ + + /** + * Shivs the given document. + * @memberOf html5 + * @param {Document} ownerDocument The document to shiv. + * @returns {Document} The shived document. + */ + function shivDocument(ownerDocument) { + if (!ownerDocument) { + ownerDocument = document; + } + var data = getExpandoData(ownerDocument); + + if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) { + data.hasCSS = !!addStyleSheet(ownerDocument, + // corrects block display not defined in IE6/7/8/9 + 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' + + // adds styling not present in IE6/7/8/9 + 'mark{background:#FF0;color:#000}' + + // hides non-rendered elements + 'template{display:none}' + ); + } + if (!supportsUnknownElements) { + shivMethods(ownerDocument, data); + } + return ownerDocument; + } + + /*--------------------------------------------------------------------------*/ + + /** + * The `html5` object is exposed so that more elements can be shived and + * existing shiving can be detected on iframes. + * @type Object + * @example + * + * // options can be changed before the script is included + * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false }; + */ + var html5 = { + + /** + * An array or space separated string of node names of the elements to shiv. + * @memberOf html5 + * @type Array|String + */ + 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video', + + /** + * current version of html5shiv + */ + 'version': version, + + /** + * A flag to indicate that the HTML5 style sheet should be inserted. + * @memberOf html5 + * @type Boolean + */ + 'shivCSS': (options.shivCSS !== false), + + /** + * Is equal to true if a browser supports creating unknown/HTML5 elements + * @memberOf html5 + * @type boolean + */ + 'supportsUnknownElements': supportsUnknownElements, + + /** + * A flag to indicate that the document's `createElement` and `createDocumentFragment` + * methods should be overwritten. + * @memberOf html5 + * @type Boolean + */ + 'shivMethods': (options.shivMethods !== false), + + /** + * A string to describe the type of `html5` object ("default" or "default print"). + * @memberOf html5 + * @type String + */ + 'type': 'default', + + // shivs the document according to the specified `html5` object options + 'shivDocument': shivDocument, + + //creates a shived element + createElement: createElement, + + //creates a shived documentFragment + createDocumentFragment: createDocumentFragment + }; + + /*--------------------------------------------------------------------------*/ + + // expose html5 + window.html5 = html5; + + // shiv the document + shivDocument(document); + + }(this, document)); + /*>>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 <html> element, if it exists: + docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') + + + // Add the new classes to the <html> 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<n;e++)for(i in o=arguments[e])t[i]=o[i];return t}Object.freeze=function(t){return t};var s=Object.create||function(t){return e.prototype=t,new e};function e(){}function a(t,i){var e=Array.prototype.slice;if(t.bind)return t.bind.apply(t,e.call(arguments,1));var n=e.call(arguments,2);return function(){return t.apply(i,n.length?n.concat(e.call(arguments)):arguments)}}var n=0;function u(t){return t._leaflet_id=t._leaflet_id||++n,t._leaflet_id}function o(t,i,e){var n,o,s,r;return r=function(){n=!1,o&&(s.apply(e,o),o=!1)},s=function(){n?o=arguments:(t.apply(e,arguments),setTimeout(r,i),n=!0)}}function r(t,i,e){var n=i[1],o=i[0],s=n-o;return t===n&&e?t:((t-o)%s+s)%s+o}function l(){return!1}function c(t,i){return i=void 0===i?6:i,+(Math.round(t+"e+"+i)+"e-"+i)}function _(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function d(t){return _(t).split(/\s+/)}function p(t,i){for(var e in t.hasOwnProperty("options")||(t.options=t.options?s(t.options):{}),i)t.options[e]=i[e];return t.options}function m(t,i,e){var n=[];for(var o in t)n.push(encodeURIComponent(e?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(i&&-1!==i.indexOf("?")?"&":"?")+n.join("&")}var f=/\{ *([\w_-]+) *\}/g;function g(t,n){return t.replace(f,function(t,i){var e=n[i];if(void 0===e)throw new Error("No value provided for variable "+t);return"function"==typeof e&&(e=e(n)),e})}var v=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function y(t,i){for(var e=0;e<t.length;e++)if(t[e]===i)return e;return-1}var x="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function w(t){return window["webkit"+t]||window["moz"+t]||window["ms"+t]}var P=0;function b(t){var i=+new Date,e=Math.max(0,16-(i-P));return P=i+e,window.setTimeout(t,e)}var T=window.requestAnimationFrame||w("RequestAnimationFrame")||b,z=window.cancelAnimationFrame||w("CancelAnimationFrame")||w("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)};function M(t,i,e){if(!e||T!==b)return T.call(window,a(t,i));t.call(i)}function C(t){t&&z.call(window,t)}var S=(Object.freeze||Object)({freeze:i,extend:h,create:s,bind:a,lastId:n,stamp:u,throttle:o,wrapNum:r,falseFn:l,formatNum:c,trim:_,splitWords:d,setOptions:p,getParamString:m,template:g,isArray:v,indexOf:y,emptyImageUrl:x,requestFn:T,cancelFn:z,requestAnimFrame:M,cancelAnimFrame:C});function Z(){}Z.extend=function(t){function i(){this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()}var e=i.__super__=this.prototype,n=s(e);for(var o in(n.constructor=i).prototype=n,this)this.hasOwnProperty(o)&&"prototype"!==o&&"__super__"!==o&&(i[o]=this[o]);return t.statics&&(h(i,t.statics),delete t.statics),t.includes&&(function(t){if("undefined"==typeof L||!L||!L.Mixin)return;t=v(t)?t:[t];for(var i=0;i<t.length;i++)t[i]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",(new Error).stack)}(t.includes),h.apply(null,[n].concat(t.includes)),delete t.includes),n.options&&(t.options=h(s(n.options),t.options)),h(n,t),n._initHooks=[],n.callInitHooks=function(){if(!this._initHooksCalled){e.callInitHooks&&e.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=n._initHooks.length;t<i;t++)n._initHooks[t].call(this)}},i},Z.include=function(t){return h(this.prototype,t),this},Z.mergeOptions=function(t){return h(this.prototype.options,t),this},Z.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),e="function"==typeof t?t:function(){this[t].apply(this,i)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(e),this};var E={on:function(t,i,e){if("object"==typeof t)for(var n in t)this._on(n,t[n],i);else for(var o=0,s=(t=d(t)).length;o<s;o++)this._on(t[o],i,e);return this},off:function(t,i,e){if(t)if("object"==typeof t)for(var n in t)this._off(n,t[n],i);else for(var o=0,s=(t=d(t)).length;o<s;o++)this._off(t[o],i,e);else delete this._events;return this},_on:function(t,i,e){this._events=this._events||{};var n=this._events[t];n||(n=[],this._events[t]=n),e===this&&(e=void 0);for(var o={fn:i,ctx:e},s=n,r=0,a=s.length;r<a;r++)if(s[r].fn===i&&s[r].ctx===e)return;s.push(o)},_off:function(t,i,e){var n,o,s;if(this._events&&(n=this._events[t]))if(i){if(e===this&&(e=void 0),n)for(o=0,s=n.length;o<s;o++){var r=n[o];if(r.ctx===e&&r.fn===i)return r.fn=l,this._firingCount&&(this._events[t]=n=n.slice()),void n.splice(o,1)}}else{for(o=0,s=n.length;o<s;o++)n[o].fn=l;delete this._events[t]}},fire:function(t,i,e){if(!this.listens(t,e))return this;var n=h({},i,{type:t,target:this,sourceTarget:i&&i.sourceTarget||this});if(this._events){var o=this._events[t];if(o){this._firingCount=this._firingCount+1||1;for(var s=0,r=o.length;s<r;s++){var a=o[s];a.fn.call(a.ctx||this,n)}this._firingCount--}}return e&&this._propagateEvent(n),this},listens:function(t,i){var e=this._events&&this._events[t];if(e&&e.length)return!0;if(i)for(var n in this._eventParents)if(this._eventParents[n].listens(t,i))return!0;return!1},once:function(t,i,e){if("object"==typeof t){for(var n in t)this.once(n,t[n],i);return this}var o=a(function(){this.off(t,i,e).off(t,o,e)},this);return this.on(t,i,e).on(t,o,e)},addEventParent:function(t){return this._eventParents=this._eventParents||{},this._eventParents[u(t)]=t,this},removeEventParent:function(t){return this._eventParents&&delete this._eventParents[u(t)],this},_propagateEvent:function(t){for(var i in this._eventParents)this._eventParents[i].fire(t.type,h({layer:t.target,propagatedFrom:t.target},t),!0)}};E.addEventListener=E.on,E.removeEventListener=E.clearAllEventListeners=E.off,E.addOneTimeEventListener=E.once,E.fireEvent=E.fire,E.hasEventListeners=E.listens;var k=Z.extend(E);function B(t,i,e){this.x=e?Math.round(t):t,this.y=e?Math.round(i):i}var A=Math.trunc||function(t){return 0<t?Math.floor(t):Math.ceil(t)};function I(t,i,e){return t instanceof B?t:v(t)?new B(t[0],t[1]):null==t?t:"object"==typeof t&&"x"in t&&"y"in t?new B(t.x,t.y):new B(t,i,e)}function O(t,i){if(t)for(var e=i?[t,i]:t,n=0,o=e.length;n<o;n++)this.extend(e[n])}function R(t,i){return!t||t instanceof O?t:new O(t,i)}function N(t,i){if(t)for(var e=i?[t,i]:t,n=0,o=e.length;n<o;n++)this.extend(e[n])}function D(t,i){return t instanceof N?t:new N(t,i)}function j(t,i,e){if(isNaN(t)||isNaN(i))throw new Error("Invalid LatLng object: ("+t+", "+i+")");this.lat=+t,this.lng=+i,void 0!==e&&(this.alt=+e)}function W(t,i,e){return t instanceof j?t:v(t)&&"object"!=typeof t[0]?3===t.length?new j(t[0],t[1],t[2]):2===t.length?new j(t[0],t[1]):null:null==t?t:"object"==typeof t&&"lat"in t?new j(t.lat,"lng"in t?t.lng:t.lon,t.alt):void 0===i?null:new j(t,i,e)}B.prototype={clone:function(){return new B(this.x,this.y)},add:function(t){return this.clone()._add(I(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(I(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new B(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new B(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=A(this.x),this.y=A(this.y),this},distanceTo:function(t){var i=(t=I(t)).x-this.x,e=t.y-this.y;return Math.sqrt(i*i+e*e)},equals:function(t){return(t=I(t)).x===this.x&&t.y===this.y},contains:function(t){return t=I(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+c(this.x)+", "+c(this.y)+")"}},O.prototype={extend:function(t){return t=I(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new B((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new B(this.min.x,this.max.y)},getTopRight:function(){return new B(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,e;return(t="number"==typeof t[0]||t instanceof B?I(t):R(t))instanceof O?(i=t.min,e=t.max):i=e=t,i.x>=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.x<e.x,r=o.y>i.y&&n.y<e.y;return s&&r},isValid:function(){return!(!this.min||!this.max)}},N.prototype={extend:function(t){var i,e,n=this._southWest,o=this._northEast;if(t instanceof j)e=i=t;else{if(!(t instanceof N))return t?this.extend(W(t)||D(t)):this;if(i=t._southWest,e=t._northEast,!i||!e)return this}return n||o?(n.lat=Math.min(i.lat,n.lat),n.lng=Math.min(i.lng,n.lng),o.lat=Math.max(e.lat,o.lat),o.lng=Math.max(e.lng,o.lng)):(this._southWest=new j(i.lat,i.lng),this._northEast=new j(e.lat,e.lng)),this},pad:function(t){var i=this._southWest,e=this._northEast,n=Math.abs(i.lat-e.lat)*t,o=Math.abs(i.lng-e.lng)*t;return new N(new j(i.lat-n,i.lng-o),new j(e.lat+n,e.lng+o))},getCenter:function(){return new j((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new j(this.getNorth(),this.getWest())},getSouthEast:function(){return new j(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof j||"lat"in t?W(t):D(t);var i,e,n=this._southWest,o=this._northEast;return t instanceof N?(i=t.getSouthWest(),e=t.getNorthEast()):i=e=t,i.lat>=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.lat<e.lat,r=o.lng>i.lng&&n.lng<e.lng;return s&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t,i){return!!t&&(t=D(t),this._southWest.equals(t.getSouthWest(),i)&&this._northEast.equals(t.getNorthEast(),i))},isValid:function(){return!(!this._southWest||!this._northEast)}};var H,F={latLngToPoint:function(t,i){var e=this.projection.project(t),n=this.scale(i);return this.transformation._transform(e,n)},pointToLatLng:function(t,i){var e=this.scale(i),n=this.transformation.untransform(t,e);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},unproject:function(t){return this.projection.unproject(t)},scale:function(t){return 256*Math.pow(2,t)},zoom:function(t){return Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){if(this.infinite)return null;var i=this.projection.bounds,e=this.scale(t);return new O(this.transformation.transform(i.min,e),this.transformation.transform(i.max,e))},infinite:!(j.prototype={equals:function(t,i){return!!t&&(t=W(t),Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng))<=(void 0===i?1e-9:i))},toString:function(t){return"LatLng("+c(this.lat,t)+", "+c(this.lng,t)+")"},distanceTo:function(t){return U.distance(this,W(t))},wrap:function(){return U.wrapLatLng(this)},toBounds:function(t){var i=180*t/40075017,e=i/Math.cos(Math.PI/180*this.lat);return D([this.lat-i,this.lng-e],[this.lat+i,this.lng+e])},clone:function(){return new j(this.lat,this.lng,this.alt)}}),wrapLatLng:function(t){var i=this.wrapLng?r(t.lng,this.wrapLng,!0):t.lng;return new j(this.wrapLat?r(t.lat,this.wrapLat,!0):t.lat,i,t.alt)},wrapLatLngBounds:function(t){var i=t.getCenter(),e=this.wrapLatLng(i),n=i.lat-e.lat,o=i.lng-e.lng;if(0==n&&0==o)return t;var s=t.getSouthWest(),r=t.getNorthEast();return new N(new j(s.lat-n,s.lng-o),new j(r.lat-n,r.lng-o))}},U=h({},F,{wrapLng:[-180,180],R:6371e3,distance:function(t,i){var e=Math.PI/180,n=t.lat*e,o=i.lat*e,s=Math.sin((i.lat-t.lat)*e/2),r=Math.sin((i.lng-t.lng)*e/2),a=s*s+Math.cos(n)*Math.cos(o)*r*r,h=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));return this.R*h}}),V=6378137,q={R:V,MAX_LATITUDE:85.0511287798,project:function(t){var i=Math.PI/180,e=this.MAX_LATITUDE,n=Math.max(Math.min(e,t.lat),-e),o=Math.sin(n*i);return new B(this.R*t.lng*i,this.R*Math.log((1+o)/(1-o))/2)},unproject:function(t){var i=180/Math.PI;return new j((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*i,t.x*i/this.R)},bounds:(H=V*Math.PI,new O([-H,-H],[H,H]))};function G(t,i,e,n){if(v(t))return this._a=t[0],this._b=t[1],this._c=t[2],void(this._d=t[3]);this._a=t,this._b=i,this._c=e,this._d=n}function K(t,i,e,n){return new G(t,i,e,n)}G.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new B((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}};var Y,X=h({},U,{code:"EPSG:3857",projection:q,transformation:(Y=.5/(Math.PI*q.R),K(Y,.5,-Y,.5))}),J=h({},X,{code:"EPSG:900913"});function $(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}function Q(t,i){var e,n,o,s,r,a,h="";for(e=0,o=t.length;e<o;e++){for(n=0,s=(r=t[e]).length;n<s;n++)h+=(n?"L":"M")+(a=r[n]).x+" "+a.y;h+=i?Zt?"z":"x":""}return h||"M0 0"}var tt=document.documentElement.style,it="ActiveXObject"in window,et=it&&!document.addEventListener,nt="msLaunchUri"in navigator&&!("documentMode"in document),ot=kt("webkit"),st=kt("android"),rt=kt("android 2")||kt("android 3"),at=parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1],10),ht=st&&kt("Google")&&at<537&&!("AudioNode"in window),ut=!!window.opera,lt=kt("chrome"),ct=kt("gecko")&&!ot&&!ut&&!it,_t=!lt&&kt("safari"),dt=kt("phantom"),pt="OTransition"in tt,mt=0===navigator.platform.indexOf("Win"),ft=it&&"transition"in tt,gt="WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix&&!rt,vt="MozPerspective"in tt,yt=!window.L_DISABLE_3D&&(ft||gt||vt)&&!pt&&!dt,xt="undefined"!=typeof orientation||kt("mobile"),wt=xt&&ot,Pt=xt&>,Lt=!window.PointerEvent&&window.MSPointerEvent,bt=!(!window.PointerEvent&&!Lt),Tt=!window.L_NO_TOUCH&&(bt||"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch),zt=xt&&ut,Mt=xt&&ct,Ct=1<(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI),St=!!document.createElement("canvas").getContext,Zt=!(!document.createElementNS||!$("svg").createSVGRect),Et=!Zt&&function(){try{var t=document.createElement("div");t.innerHTML='<v:shape adj="1"/>';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(!(1<i)){var e=Date.now(),n=e-(s||e);r=t.touches?t.touches[0]:t,a=0<n&&n<=250,s=e}}function n(t){if(a&&!r.cancelBubble){if(bt){if(!nt||"mouse"===t.pointerType)return;var i,e,n={};for(e in r)i=r[e],n[e]=i&&i.bind?i.bind(r):i;r=n}r.type="dblclick",r.button=0,o(r),s=null}}return t[Yt+Gt+i]=e,t[Yt+Kt+i]=n,t[Yt+"dblclick"+i]=o,t.addEventListener(Gt,e,!1),t.addEventListener(Kt,n,!1),t.addEventListener("dblclick",o,!1),this}function Jt(t,i){var e=t[Yt+Gt+i],n=t[Yt+Kt+i],o=t[Yt+"dblclick"+i];return t.removeEventListener(Gt,e,!1),t.removeEventListener(Kt,n,!1),nt||t.removeEventListener("dblclick",o,!1),this}var $t,Qt,ti,ii,ei,ni=yi(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),oi=yi(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),si="webkitTransition"===oi||"OTransition"===oi?oi+"End":"transitionend";function ri(t){return"string"==typeof t?document.getElementById(t):t}function ai(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||"auto"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return"auto"===e?null:e}function hi(t,i,e){var n=document.createElement(t);return n.className=i||"",e&&e.appendChild(n),n}function ui(t){var i=t.parentNode;i&&i.removeChild(t)}function li(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function ci(t){var i=t.parentNode;i&&i.lastChild!==t&&i.appendChild(t)}function _i(t){var i=t.parentNode;i&&i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function di(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=gi(t);return 0<e.length&&new RegExp("(^|\\s)"+i+"(\\s|$)").test(e)}function pi(t,i){if(void 0!==t.classList)for(var e=d(i),n=0,o=e.length;n<o;n++)t.classList.add(e[n]);else if(!di(t,i)){var s=gi(t);fi(t,(s?s+" ":"")+i)}}function mi(t,i){void 0!==t.classList?t.classList.remove(i):fi(t,_((" "+gi(t)+" ").replace(" "+i+" "," ")))}function fi(t,i){void 0===t.className.baseVal?t.className=i:t.className.baseVal=i}function gi(t){return t.correspondingElement&&(t=t.correspondingElement),void 0===t.className.baseVal?t.className:t.className.baseVal}function vi(t,i){"opacity"in t.style?t.style.opacity=i:"filter"in t.style&&function(t,i){var e=!1,n="DXImageTransform.Microsoft.Alpha";try{e=t.filters.item(n)}catch(t){if(1===i)return}i=Math.round(100*i),e?(e.Enabled=100!==i,e.Opacity=i):t.style.filter+=" progid:"+n+"(opacity="+i+")"}(t,i)}function yi(t){for(var i=document.documentElement.style,e=0;e<t.length;e++)if(t[e]in i)return t[e];return!1}function xi(t,i,e){var n=i||new B(0,0);t.style[ni]=(ft?"translate("+n.x+"px,"+n.y+"px)":"translate3d("+n.x+"px,"+n.y+"px,0)")+(e?" scale("+e+")":"")}function wi(t,i){t._leaflet_pos=i,yt?xi(t,i):(t.style.left=i.x+"px",t.style.top=i.y+"px")}function Pi(t){return t._leaflet_pos||new B(0,0)}if("onselectstart"in document)$t=function(){Ei(window,"selectstart",Di)},Qt=function(){Bi(window,"selectstart",Di)};else{var Li=yi(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);$t=function(){if(Li){var t=document.documentElement.style;ti=t[Li],t[Li]="none"}},Qt=function(){Li&&(document.documentElement.style[Li]=ti,ti=void 0)}}function bi(){Ei(window,"dragstart",Di)}function Ti(){Bi(window,"dragstart",Di)}function zi(t){for(;-1===t.tabIndex;)t=t.parentNode;t.style&&(Mi(),ei=(ii=t).style.outline,t.style.outline="none",Ei(window,"keydown",Mi))}function Mi(){ii&&(ii.style.outline=ei,ei=ii=void 0,Bi(window,"keydown",Mi))}function Ci(t){for(;!((t=t.parentNode).offsetWidth&&t.offsetHeight||t===document.body););return t}function Si(t){var i=t.getBoundingClientRect();return{x:i.width/t.offsetWidth||1,y:i.height/t.offsetHeight||1,boundingClientRect:i}}var Zi=(Object.freeze||Object)({TRANSFORM:ni,TRANSITION:oi,TRANSITION_END:si,get:ri,getStyle:ai,create:hi,remove:ui,empty:li,toFront:ci,toBack:_i,hasClass:di,addClass:pi,removeClass:mi,setClass:fi,getClass:gi,setOpacity:vi,testProp:yi,setTransform:xi,setPosition:wi,getPosition:Pi,disableTextSelection:$t,enableTextSelection:Qt,disableImageDrag:bi,enableImageDrag:Ti,preventOutline:zi,restoreOutline:Mi,getSizedParentNode:Ci,getScale:Si});function Ei(t,i,e,n){if("object"==typeof i)for(var o in i)Ai(t,o,i[o],e);else for(var s=0,r=(i=d(i)).length;s<r;s++)Ai(t,i[s],e,n);return this}var ki="_leaflet_events";function Bi(t,i,e,n){if("object"==typeof i)for(var o in i)Ii(t,o,i[o],e);else if(i)for(var s=0,r=(i=d(i)).length;s<r;s++)Ii(t,i[s],e,n);else{for(var a in t[ki])Ii(t,a,t[ki][a]);delete t[ki]}return this}function Ai(i,t,e,n){var o=t+u(e)+(n?"_"+u(n):"");if(i[ki]&&i[ki][o])return this;var s=function(t){return e.call(n||i,t||window.event)},r=s;bt&&0===t.indexOf("touch")?Ht(i,t,s,o):!Tt||"dblclick"!==t||bt&<?"addEventListener"in i?"mousewheel"===t?i.addEventListener("onwheel"in i?"wheel":"mousewheel",s,!1):"mouseenter"===t||"mouseleave"===t?(s=function(t){t=t||window.event,Ki(i,t)&&r(t)},i.addEventListener("mouseenter"===t?"mouseover":"mouseout",s,!1)):("click"===t&&st&&(s=function(t){!function(t,i){var e=t.timeStamp||t.originalEvent&&t.originalEvent.timeStamp,n=Ui&&e-Ui;if(n&&100<n&&n<500||t.target._simulatedClick&&!t._simulated)return ji(t);Ui=e,i(t)}(t,r)}),i.addEventListener(t,s,!1)):"attachEvent"in i&&i.attachEvent("on"+t,s):Xt(i,s,o),i[ki]=i[ki]||{},i[ki][o]=s}function Ii(t,i,e,n){var o=i+u(e)+(n?"_"+u(n):""),s=t[ki]&&t[ki][o];if(!s)return this;bt&&0===i.indexOf("touch")?function(t,i,e){var n=t["_leaflet_"+i+e];"touchstart"===i?t.removeEventListener(At,n,!1):"touchmove"===i?t.removeEventListener(It,n,!1):"touchend"===i&&(t.removeEventListener(Ot,n,!1),t.removeEventListener(Rt,n,!1))}(t,i,o):!Tt||"dblclick"!==i||bt&<?"removeEventListener"in t?"mousewheel"===i?t.removeEventListener("onwheel"in t?"wheel":"mousewheel",s,!1):t.removeEventListener("mouseenter"===i?"mouseover":"mouseleave"===i?"mouseout":i,s,!1):"detachEvent"in t&&t.detachEvent("on"+i,s):Jt(t,o),t[ki][o]=null}function Oi(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,Gi(t),this}function Ri(t){return Ai(t,"mousewheel",Oi),this}function Ni(t){return Ei(t,"mousedown touchstart dblclick",Oi),Ai(t,"click",qi),this}function Di(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this}function ji(t){return Di(t),Oi(t),this}function Wi(t,i){if(!i)return new B(t.clientX,t.clientY);var e=Si(i),n=e.boundingClientRect;return new B((t.clientX-n.left)/e.x-i.clientLeft,(t.clientY-n.top)/e.y-i.clientTop)}var Hi=mt&<?2*window.devicePixelRatio:ct?window.devicePixelRatio:1;function Fi(t){return nt?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/Hi:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}var Ui,Vi={};function qi(t){Vi[t.type]=!0}function Gi(t){var i=Vi[t.type];return Vi[t.type]=!1,i}function Ki(t,i){var e=i.relatedTarget;if(!e)return!0;try{for(;e&&e!==t;)e=e.parentNode}catch(t){return!1}return e!==t}var Yi=(Object.freeze||Object)({on:Ei,off:Bi,stopPropagation:Oi,disableScrollPropagation:Ri,disableClickPropagation:Ni,preventDefault:Di,stop:ji,getMousePosition:Wi,getWheelDelta:Fi,fakeStop:qi,skipped:Gi,isExternalTarget:Ki,addListener:Ei,removeListener:Bi}),Xi=k.extend({run:function(t,i,e,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pi(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=M(this._animate,this),this._step()},_step:function(t){var i=+new Date-this._startTime,e=1e3*this._duration;i<e?this._runFrame(this._easeOut(i/e),t):(this._runFrame(1),this._complete())},_runFrame:function(t,i){var e=this._startPos.add(this._offset.multiplyBy(t));i&&e._round(),wi(this._el,e),this.fire("step")},_complete:function(){C(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),Ji=k.extend({options:{crs:X,center:void 0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:[],maxBounds:void 0,renderer:void 0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(t,i){i=p(this,i),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this._initContainer(t),this._initLayout(),this._onResize=a(this._onResize,this),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),void 0!==i.zoom&&(this._zoom=this._limitZoom(i.zoom)),i.center&&void 0!==i.zoom&&this.setView(W(i.center),i.zoom,{reset:!0}),this.callInitHooks(),this._zoomAnimated=oi&&yt&&!zt&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),Ei(this._proxy,si,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(t,i,e){if((i=void 0===i?this._zoom:this._limitZoom(i),t=this._limitCenter(W(t),i,this.options.maxBounds),e=e||{},this._stop(),this._loaded&&!e.reset&&!0!==e)&&(void 0!==e.animate&&(e.zoom=h({animate:e.animate},e.zoom),e.pan=h({animate:e.animate,duration:e.duration},e.pan)),this._zoom!==i?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,i,e.zoom):this._tryAnimatedPan(t,e.pan)))return clearTimeout(this._sizeTimer),this;return this._resetView(t,i),this},setZoom:function(t,i){return this._loaded?this.setView(this.getCenter(),t,{zoom:i}):(this._zoom=t,this)},zoomIn:function(t,i){return t=t||(yt?this.options.zoomDelta:1),this.setZoom(this._zoom+t,i)},zoomOut:function(t,i){return t=t||(yt?this.options.zoomDelta:1),this.setZoom(this._zoom-t,i)},setZoomAround:function(t,i,e){var n=this.getZoomScale(i),o=this.getSize().divideBy(2),s=(t instanceof B?t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1-1/n),r=this.containerPointToLatLng(o.add(s));return this.setView(r,i,{zoom:e})},_getBoundsCenterZoom:function(t,i){i=i||{},t=t.getBounds?t.getBounds():D(t);var e=I(i.paddingTopLeft||i.padding||[0,0]),n=I(i.paddingBottomRight||i.padding||[0,0]),o=this.getBoundsZoom(t,!1,e.add(n));if((o="number"==typeof i.maxZoom?Math.min(i.maxZoom,o):o)===1/0)return{center:t.getCenter(),zoom:o};var s=n.subtract(e).divideBy(2),r=this.project(t.getSouthWest(),o),a=this.project(t.getNorthEast(),o);return{center:this.unproject(r.add(a).divideBy(2).add(s),o),zoom:o}},fitBounds:function(t,i){if(!(t=D(t)).isValid())throw new Error("Bounds are not valid.");var e=this._getBoundsCenterZoom(t,i);return this.setView(e.center,e.zoom,i)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,i){return this.setView(t,this._zoom,{pan:i})},panBy:function(t,i){if(i=i||{},!(t=I(t).round()).x&&!t.y)return this.fire("moveend");if(!0!==i.animate&&!this.getSize().contains(t))return this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this;if(this._panAnim||(this._panAnim=new Xi,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),i.noMoveStart||this.fire("movestart"),!1!==i.animate){pi(this._mapPane,"leaflet-pan-anim");var e=this._getMapPanePos().subtract(t).round();this._panAnim.run(this._mapPane,e,i.duration||.25,i.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},flyTo:function(n,o,t){if(!1===(t=t||{}).animate||!yt)return this.setView(n,o,t);this._stop();var s=this.project(this.getCenter()),r=this.project(n),i=this.getSize(),a=this._zoom;n=W(n),o=void 0===o?a:o;var h=Math.max(i.x,i.y),u=h*this.getZoomScale(a,o),l=r.distanceTo(s)||1,c=1.42,_=c*c;function e(t){var i=(u*u-h*h+(t?-1:1)*_*_*l*l)/(2*(t?u:h)*_*l),e=Math.sqrt(i*i+1)-i;return e<1e-9?-18:Math.log(e)}function d(t){return(Math.exp(t)-Math.exp(-t))/2}function p(t){return(Math.exp(t)+Math.exp(-t))/2}var m=e(0);function f(t){return h*(p(m)*function(t){return d(t)/p(t)}(m+c*t)-d(m))/_}var g=Date.now(),v=(e(1)-m)/c,y=t.duration?1e3*t.duration:1e3*v*.8;return this._moveStart(!0,t.noMoveStart),function t(){var i=(Date.now()-g)/y,e=function(t){return 1-Math.pow(1-t,1.5)}(i)*v;i<=1?(this._flyToFrame=M(t,this),this._move(this.unproject(s.add(r.subtract(s).multiplyBy(f(e)/l)),a),this.getScaleZoom(h/function(t){return h*(p(m)/p(m+c*t))}(e),a),{flyTo:!0})):this._move(n,o)._moveEnd(!0)}.call(this),this},flyToBounds:function(t,i){var e=this._getBoundsCenterZoom(t,i);return this.flyTo(e.center,e.zoom,i)},setMaxBounds:function(t){return(t=D(t)).isValid()?(this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this.options.maxBounds=t,this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds)):(this.options.maxBounds=null,this.off("moveend",this._panInsideMaxBounds))},setMinZoom:function(t){var i=this.options.minZoom;return this.options.minZoom=t,this._loaded&&i!==t&&(this.fire("zoomlevelschange"),this.getZoom()<this.options.minZoom)?this.setZoom(t):this},setMaxZoom:function(t){var i=this.options.maxZoom;return this.options.maxZoom=t,this._loaded&&i!==t&&(this.fire("zoomlevelschange"),this.getZoom()>this.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.x<u.min.x||r.x>u.max.x)&&(c.x=s.x-l.x,0<l.x?c.x+=h.x-e.x:c.x-=h.x-n.x),(r.y<u.min.y||r.y>u.max.y)&&(c.y=s.y-l.y,0<l.y?c.y+=h.y-e.y:c.y-=h.y-n.y),this.panTo(this.unproject(c),i),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=h({animate:!1,pan:!0},!0===t?{animate:!0}:t);var i=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var e=this.getSize(),n=i.divideBy(2).round(),o=e.divideBy(2).round(),s=n.subtract(o);return s.x||s.y?(t.animate&&t.pan?this.panBy(s):(t.pan&&this._rawPanBy(s),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:i,newSize:e})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=h({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var i=a(this._handleGeolocationResponse,this),e=a(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,e,t):navigator.geolocation.getCurrentPosition(i,e,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var i=t.code,e=t.message||(1===i?"permission denied":2===i?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:i,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var i=new j(t.coords.latitude,t.coords.longitude),e=i.toBounds(2*t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var r in t.coords)"number"==typeof t.coords[r]&&(s[r]=t.coords[r]);this.fire("locationfound",s)},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}var t;for(t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ui(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(C(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)ui(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=hi("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new N(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=D(t),e=I(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(e),u=R(this.project(a,n),this.project(r,n)).getSize(),l=yt?this.options.zoomSnap:1,c=h.x/u.x,_=h.y/u.y,d=i?Math.max(c,_):Math.min(c,_);return n=this.getScaleZoom(d,n),l&&(n=Math.round(n/(l/100))*(l/100),n=i?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new B(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new O(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(W(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(I(t),i)},layerPointToLatLng:function(t){var i=I(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(W(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(W(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(D(t))},distance:function(t,i){return this.options.crs.distance(W(t),W(i))},containerPointToLayerPoint:function(t){return I(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return I(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(I(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(W(t)))},mouseEventToContainerPoint:function(t){return Wi(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=ri(t);if(!i)throw new Error("Map container not found.");if(i._leaflet_id)throw new Error("Map container is already initialized.");Ei(i,"scroll",this._onScroll,this),this._containerId=u(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&yt,pi(t,"leaflet-container"+(Tt?" leaflet-touch":"")+(Ct?" leaflet-retina":"")+(et?" leaflet-oldie":"")+(_t?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var i=ai(t,"position");"absolute"!==i&&"relative"!==i&&"fixed"!==i&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),wi(this._mapPane,new B(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(pi(t.markerPane,"leaflet-zoom-hide"),pi(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,i){wi(this._mapPane,new B(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire("viewprereset");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,i){return t&&this.fire("zoomstart"),i||this.fire("movestart"),this},_move:function(t,i,e){void 0===i&&(i=this._zoom);var n=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return C(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){wi(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={};var i=t?Bi:Ei;i((this._targets[u(this._container)]=this)._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&i(window,"resize",this._onResize,this),yt&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){C(this._resizeRequest),this._resizeRequest=M(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=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;a<e.length;a++)if(e[a].fire(i,s,!0),s.originalEvent._stopped||!1===e[a].options.bubblingMouseEvents&&-1!==y(this._mouseEvents,i))return}},_draggableMoved:function(t){return(t=t.dragging&&t.dragging.enabled()?t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var t=0,i=this._handlers.length;t<i;t++)this._handlers[t].disable()},whenReady:function(t,i){return this._loaded?t.call(i||this,{target:this}):this.on("load",t,i),this},_getMapPanePos:function(){return Pi(this._mapPane)||new B(0,0)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(t,i){return(t&&void 0!==i?this._getNewPixelOrigin(t,i):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,i){var e=this.getSize()._divideBy(2);return this.project(t,i)._subtract(e)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,i,e){var n=this._getNewPixelOrigin(e,i);return this.project(t,i)._subtract(n)},_latLngBoundsToNewLayerBounds:function(t,i,e){var n=this._getNewPixelOrigin(e,i);return R([this.project(t.getSouthWest(),i)._subtract(n),this.project(t.getNorthWest(),i)._subtract(n),this.project(t.getSouthEast(),i)._subtract(n),this.project(t.getNorthEast(),i)._subtract(n)])},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,i,e){if(!e)return t;var n=this.project(t,i),o=this.getSize().divideBy(2),s=new O(n.subtract(o),n.add(o)),r=this._getBoundsOffset(s,e,i);return r.round().equals([0,0])?t:this.unproject(n.add(r),i)},_limitOffset:function(t,i){if(!i)return t;var e=this.getPixelBounds(),n=new O(e.min.add(t),e.max.add(t));return t.add(this._getBoundsOffset(n,i))},_getBoundsOffset:function(t,i,e){var n=R(this.project(i.getNorthEast(),e),this.project(i.getSouthWest(),e)),o=n.min.subtract(t.min),s=n.max.subtract(t.max);return new B(this._rebound(o.x,-s.x),this._rebound(o.y,-s.y))},_rebound:function(t,i){return 0<t+i?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=yt?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){mi(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e))&&(this.panBy(e,i),!0)},_createAnimProxy:function(){var t=this._proxy=hi("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var i=ni,e=this._proxy.style[i];xi(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",function(){var t=this.getCenter(),i=this.getZoom();xi(this._proxy,this.project(t,i),this.getZoomScale(i,1))},this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ui(this._proxy),delete this._proxy},_catchTransitionEnd:function(t){this._animatingZoom&&0<=t.propertyName.indexOf("transform")&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.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<t.screenX&&0<t.screenY&&this._map.getContainer().focus()}});Ji.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var n=this._controlCorners={},o="leaflet-",s=this._controlContainer=hi("div",o+"control-container",this._container);function t(t,i){var e=o+t+" "+o+i;n[t+i]=hi("div",e,s)}t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ui(this._controlCorners[t]);ui(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var te=Qi.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e<n?-1:n<e?1:0}},initialize:function(t,i,e){for(var n in p(this,e),this._layerControlInputs=[],this._layers=[],this._lastZIndex=0,this._handlingClick=!1,t)this._addLayer(t[n],n);for(n in i)this._addLayer(i[n],n,!0)},onAdd:function(t){this._initLayout(),this._update(),(this._map=t).on("zoomend",this._checkDisabledLayers,this);for(var i=0;i<this._layers.length;i++)this._layers[i].layer.on("add remove",this._onLayerChange,this);return this._container},addTo:function(t){return Qi.prototype.addTo.call(this,t),this._expandIfNotCollapsed()},onRemove:function(){this._map.off("zoomend",this._checkDisabledLayers,this);for(var t=0;t<this._layers.length;t++)this._layers[t].layer.off("add remove",this._onLayerChange,this)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._map?this._update():this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._map?this._update():this},removeLayer:function(t){t.off("add remove",this._onLayerChange,this);var i=this._getLayer(u(t));return i&&this._layers.splice(this._layers.indexOf(i),1),this._map?this._update():this},expand:function(){pi(this._container,"leaflet-control-layers-expanded"),this._section.style.height=null;var t=this._map.getSize().y-(this._container.offsetTop+50);return t<this._section.clientHeight?(pi(this._section,"leaflet-control-layers-scrollbar"),this._section.style.height=t+"px"):mi(this._section,"leaflet-control-layers-scrollbar"),this._checkDisabledLayers(),this},collapse:function(){return mi(this._container,"leaflet-control-layers-expanded"),this},_initLayout:function(){var t="leaflet-control-layers",i=this._container=hi("div",t),e=this.options.collapsed;i.setAttribute("aria-haspopup",!0),Ni(i),Ri(i);var n=this._section=hi("section",t+"-list");e&&(this._map.on("click",this.collapse,this),st||Ei(i,{mouseenter:this.expand,mouseleave:this.collapse},this));var o=this._layersLink=hi("a",t+"-toggle",i);o.href="#",o.title="Layers",Tt?(Ei(o,"click",ji),Ei(o,"click",this.expand,this)):Ei(o,"focus",this.expand,this),e||this.expand(),this._baseLayersList=hi("div",t+"-base",n),this._separator=hi("div",t+"-separator",n),this._overlaysList=hi("div",t+"-overlays",n),i.appendChild(n)},_getLayer:function(t){for(var i=0;i<this._layers.length;i++)if(this._layers[i]&&u(this._layers[i].layer)===t)return this._layers[i]},_addLayer:function(t,i,e){this._map&&t.on("add remove",this._onLayerChange,this),this._layers.push({layer:t,name:i,overlay:e}),this.options.sortLayers&&this._layers.sort(a(function(t,i){return this.options.sortFunction(t.layer,i.layer,t.name,i.name)},this)),this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(!this._container)return this;li(this._baseLayersList),li(this._overlaysList),this._layerControlInputs=[];var t,i,e,n,o=0;for(e=0;e<this._layers.length;e++)n=this._layers[e],this._addItem(n),i=i||n.overlay,t=t||!n.overlay,o+=n.overlay?0:1;return this.options.hideSingleBase&&(t=t&&1<o,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=i&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(u(t.target)),e=i.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='<input type="radio" class="leaflet-control-layers-selector" name="'+t+'"'+(i?' checked="checked"':"")+"/>",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;s<o.length;s++)this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);for(s=0;s<n.length;s++)this._map.hasLayer(n[s])||this._map.addLayer(n[s]);this._handlingClick=!1,this._refocusOnMap()},_checkDisabledLayers:function(){for(var t,i,e=this._layerControlInputs,n=this._map.getZoom(),o=e.length-1;0<=o;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&n<i.options.minZoom||void 0!==i.options.maxZoom&&n>i.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._zoom<this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(t.shiftKey?3:1))},_zoomOut:function(t){!this._disabled&&this._map._zoom>this._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;5280<o?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+" mi",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+" ft",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+"").length-1),e=t/i;return i*(e=10<=e?10:5<=e?5:3<=e?3:2<=e?2:1)}}),ne=Qi.extend({options:{position:"bottomright",prefix:'<a href="https://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'},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&&1<t.touches.length)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new B(i.clientX,i.clientY)._subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)<this.options.clickTolerance||(e.x/=this._parentScale.x,e.y/=this._parentScale.y,Di(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=Pi(this._element).subtract(e),pi(document.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,window.SVGElementInstance&&this._lastTarget instanceof SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement),pi(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(e),this._moving=!0,C(this._animRequest),this._lastEvent=t,this._animRequest=M(this._updatePosition,this,!0)))}},_updatePosition:function(){var t={originalEvent:this._lastEvent};this.fire("predrag",t),wi(this._element,this._newPos),this.fire("drag",t)},_onUp:function(t){!t._simulated&&this._enabled&&this.finishDrag()},finishDrag:function(){for(var t in mi(document.body,"leaflet-dragging"),this._lastTarget&&(mi(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null),ue)Bi(document,ue[t],this._onMove,this),Bi(document,he[t],this._onUp,this);Ti(),Qt(),this._moved&&this._moving&&(C(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1,le._dragging=!1}});function ce(t,i){if(!i||!t.length)return t.slice();var e=i*i;return t=function(t,i){var e=t.length,n=new(typeof Uint8Array!=void 0+""?Uint8Array:Array)(e);n[0]=n[e-1]=1,function t(i,e,n,o,s){var r,a,h,u=0;for(a=o+1;a<=s-1;a++)h=fe(i[a],i[o],i[s],!0),u<h&&(r=a,u=h);n<u&&(e[r]=1,t(i,e,n,o,r),t(i,e,n,r,s))}(t,n,i,0,e-1);var o,s=[];for(o=0;o<e;o++)n[o]&&s.push(t[o]);return s}(t=function(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;n<s;n++)r=t[n],a=t[o],void 0,h=a.x-r.x,u=a.y-r.y,i<h*h+u*u&&(e.push(t[n]),o=n);var r,a,h,u;o<s-1&&e.push(t[s-1]);return e}(t,e),e)}function _e(t,i,e){return Math.sqrt(fe(t,i,e,!0))}function de(t,i,e,n,o){var s,r,a,h=n?se:me(t,e),u=me(i,e);for(se=u;;){if(!(h|u))return[t,i];if(h&u)return!1;a=me(r=pe(t,i,s=h||u,e,o),e),s===h?(t=r,h=a):(i=r,u=a)}}function pe(t,i,e,n,o){var s,r,a=i.x-t.x,h=i.y-t.y,u=n.min,l=n.max;return 8&e?(s=t.x+a*(l.y-t.y)/h,r=l.y):4&e?(s=t.x+a*(u.y-t.y)/h,r=u.y):2&e?(s=l.x,r=t.y+h*(l.x-t.x)/a):1&e&&(s=u.x,r=t.y+h*(u.x-t.x)/a),new B(s,r,o)}function me(t,i){var e=0;return t.x<i.min.x?e|=1:t.x>i.max.x&&(e|=2),t.y<i.min.y?e|=4:t.y>i.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 0<u&&(1<(o=((t.x-s)*a+(t.y-r)*h)/u)?(s=e.x,r=e.y):0<o&&(s+=a*o,r+=h*o)),a=t.x-s,h=t.y-r,n?a*a+h*h:new B(s,r)}function ge(t){return!v(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function ve(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),ge(t)}var ye=(Object.freeze||Object)({simplify:ce,pointToSegmentDistance:_e,closestPointOnSegment:function(t,i,e){return fe(t,i,e)},clipSegment:de,_getEdgeIntersection:pe,_getBitCode:me,_sqClosestPointOnSegment:fe,isFlat:ge,_flat:ve});function xe(t,i,e){var n,o,s,r,a,h,u,l,c,_=[1,4,2,8];for(o=0,u=t.length;o<u;o++)t[o]._code=me(t[o],i);for(r=0;r<4;r++){for(l=_[r],n=[],o=0,s=(u=t.length)-1;o<u;s=o++)a=t[o],h=t[s],a._code&l?h._code&l||((c=pe(h,a,l,i,e))._code=me(c,i),n.push(c)):(h._code&l&&((c=pe(h,a,l,i,e))._code=me(c,i),n.push(c)),n.push(a));t=n}return t}var we,Pe=(Object.freeze||Object)({clipPolygon:xe}),Le={project:function(t){return new B(t.lng,t.lat)},unproject:function(t){return new j(t.y,t.x)},bounds:new O([-180,-90],[180,90])},be={R:6378137,R_MINOR:6356752.314245179,bounds:new O([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(t){var i=Math.PI/180,e=this.R,n=t.lat*i,o=this.R_MINOR/e,s=Math.sqrt(1-o*o),r=s*Math.sin(n),a=Math.tan(Math.PI/4-n/2)/Math.pow((1-r)/(1+r),s/2);return n=-e*Math.log(Math.max(a,1e-10)),new B(t.lng*i*e,n)},unproject:function(t){for(var i,e=180/Math.PI,n=this.R,o=this.R_MINOR/n,s=Math.sqrt(1-o*o),r=Math.exp(-t.y/n),a=Math.PI/2-2*Math.atan(r),h=0,u=.1;h<15&&1e-7<Math.abs(u);h++)i=s*Math.sin(a),i=Math.pow((1-i)/(1+i),s/2),a+=u=Math.PI/2-2*Math.atan(r*i)-a;return new j(a*e,t.x*e/n)}},Te=(Object.freeze||Object)({LonLat:Le,Mercator:be,SphericalMercator:q}),ze=h({},U,{code:"EPSG:3395",projection:be,transformation:(we=.5/(Math.PI*be.R),K(we,.5,-we,.5))}),Me=h({},U,{code:"EPSG:4326",projection:Le,transformation:K(1/180,1,-1/180,.5)}),Ce=h({},F,{projection:Le,transformation:K(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});F.Earth=U,F.EPSG3395=ze,F.EPSG3857=X,F.EPSG900913=J,F.EPSG4326=Me,F.Simple=Ce;var Se=k.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[u(t)]=this},removeInteractiveTarget:function(t){return delete this._map._targets[u(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once("remove",function(){i.off(e,this)},this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),i.fire("layeradd",{layer:this})}}});Ji.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var i=u(t);return this._layers[i]||((this._layers[i]=t)._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this},removeLayer:function(t){var i=u(t);return this._layers[i]&&(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[i],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null),this},hasLayer:function(t){return!!t&&u(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?v(t)?t:[t]:[]).length;i<e;i++)this.addLayer(t[i])},_addZoomLimit:function(t){!isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[u(t)]=t,this._updateZoomLevels())},_removeZoomLimit:function(t){var i=u(t);this._zoomBoundLayers[i]&&(delete this._zoomBoundLayers[i],this._updateZoomLevels())},_updateZoomLevels:function(){var t=1/0,i=-1/0,e=this._getZoomSpan();for(var n in this._zoomBoundLayers){var o=this._zoomBoundLayers[n].options;t=void 0===o.minZoom?t:Math.min(t,o.minZoom),i=void 0===o.maxZoom?i:Math.max(i,o.maxZoom)}this._layersMaxZoom=i===-1/0?void 0:i,this._layersMinZoom=t===1/0?void 0:t,e!==this._getZoomSpan()&&this.fire("zoomlevelschange"),void 0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()<this._layersMinZoom&&this.setZoom(this._layersMinZoom)}});var Ze=Se.extend({initialize:function(t,i){var e,n;if(p(this,i),this._layers={},t)for(e=0,n=t.length;e<n;e++)this.addLayer(t[e])},addLayer:function(t){var i=this.getLayerId(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[i]&&this._map.removeLayer(this._layers[i]),delete this._layers[i],this},hasLayer:function(t){return!!t&&(t in this._layers||this.getLayerId(t)in this._layers)},clearLayers:function(){return this.eachLayer(this.removeLayer,this)},invoke:function(t){var i,e,n=Array.prototype.slice.call(arguments,1);for(i in this._layers)(e=this._layers[i])[t]&&e[t].apply(e,n);return this},onAdd:function(t){this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t)},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];return this.eachLayer(t.push,t),t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return u(t)}}),Ee=Ze.extend({addLayer:function(t){return this.hasLayer(t)?this:(t.addEventParent(this),Ze.prototype.addLayer.call(this,t),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),t.removeEventParent(this),Ze.prototype.removeLayer.call(this,t),this.fire("layerremove",{layer:t})):this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new N;for(var i in this._layers){var e=this._layers[i];t.extend(e.getBounds?e.getBounds():e.getLatLng())}return t}}),ke=Z.extend({options:{popupAnchor:[0,0],tooltipAnchor:[0,0]},initialize:function(t){p(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,i){var e=this._getIconUrl(t);if(!e){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n=this._createImg(e,i&&"IMG"===i.tagName?i:null);return this._setIconStyles(n,t),n},_setIconStyles:function(t,i){var e=this.options,n=e[i+"Size"];"number"==typeof n&&(n=[n,n]);var o=I(n),s=I("shadow"===i&&e.shadowAnchor||e.iconAnchor||o&&o.divideBy(2,!0));t.className="leaflet-marker-"+i+" "+(e.className||""),s&&(t.style.marginLeft=-s.x+"px",t.style.marginTop=-s.y+"px"),o&&(t.style.width=o.x+"px",t.style.height=o.y+"px")},_createImg:function(t,i){return(i=i||document.createElement("img")).src=t,i},_getIconUrl:function(t){return Ct&&this.options[t+"RetinaUrl"]||this.options[t+"Url"]}});var Be=ke.extend({options:{iconUrl:"marker-icon.png",iconRetinaUrl:"marker-icon-2x.png",shadowUrl:"marker-shadow.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],tooltipAnchor:[16,-28],shadowSize:[41,41]},_getIconUrl:function(t){return Be.imagePath||(Be.imagePath=this._detectIconPath()),(this.options.imagePath||Be.imagePath)+ke.prototype._getIconUrl.call(this,t)},_detectIconPath:function(){var t=hi("div","leaflet-default-icon-path",document.body),i=ai(t,"background-image")||ai(t,"backgroundImage");return document.body.removeChild(t),i=null===i||0!==i.indexOf("url")?"":i.replace(/^url\(["']?/,"").replace(/marker-icon\.png["']?\)$/,"")}}),Ae=oe.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new le(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),pi(t,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&mi(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_adjustPan:function(t){var i=this._marker,e=i._map,n=this._marker.options.autoPanSpeed,o=this._marker.options.autoPanPadding,s=Pi(i._icon),r=e.getPixelBounds(),a=e.getPixelOrigin(),h=R(r.min._subtract(a).add(o),r.max._subtract(a).subtract(o));if(!h.contains(s)){var u=I((Math.max(h.max.x,s.x)-h.max.x)/(r.max.x-h.max.x)-(Math.min(h.min.x,s.x)-h.min.x)/(r.min.x-h.min.x),(Math.max(h.max.y,s.y)-h.max.y)/(r.max.y-h.max.y)-(Math.min(h.min.y,s.y)-h.min.y)/(r.min.y-h.min.y)).multiplyBy(n);e.panBy(u,{animate:!1}),this._draggable._newPos._add(u),this._draggable._startPos._add(u),wi(i._icon,this._draggable._newPos),this._onDrag(t),this._panRequest=M(this._adjustPan.bind(this,t))}},_onDragStart:function(){this._oldLatLng=this._marker.getLatLng(),this._marker.closePopup().fire("movestart").fire("dragstart")},_onPreDrag:function(t){this._marker.options.autoPan&&(C(this._panRequest),this._panRequest=M(this._adjustPan.bind(this,t)))},_onDrag:function(t){var i=this._marker,e=i._shadow,n=Pi(i._icon),o=i._map.layerPointToLatLng(n);e&&wi(e,n),i._latlng=o,t.latlng=o,t.oldLatLng=this._oldLatLng,i.fire("move",t).fire("drag",t)},_onDragEnd:function(t){C(this._panRequest),delete this._oldLatLng,this._marker.fire("moveend").fire("dragend",t)}}),Ie=Se.extend({options:{icon:new Be,interactive:!0,keyboard:!0,title:"",alt:"",zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:"markerPane",shadowPane:"shadowPane",bubblingMouseEvents:!1,draggable:!1,autoPan:!1,autoPanPadding:[50,50],autoPanSpeed:10},initialize:function(t,i){p(this,i),this._latlng=W(t)},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation,this._zoomAnimated&&t.on("zoomanim",this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(t){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),delete this.dragging,this._zoomAnimated&&t.off("zoomanim",this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return this._latlng},setLatLng:function(t){var i=this._latlng;return this._latlng=W(t),this.update(),this.fire("move",{oldLatLng:i,latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update()},getIcon:function(){return this.options.icon},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){if(this._icon&&this._map){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i="leaflet-zoom-"+(this._zoomAnimated?"animated":"hide"),e=t.icon.createIcon(this._icon),n=!1;e!==this._icon&&(this._icon&&this._removeIcon(),n=!0,t.title&&(e.title=t.title),"IMG"===e.tagName&&(e.alt=t.alt||"")),pi(e,i),t.keyboard&&(e.tabIndex="0"),this._icon=e,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex});var o=t.icon.createShadow(this._shadow),s=!1;o!==this._shadow&&(this._removeShadow(),s=!0),o&&(pi(o,i),o.alt=""),this._shadow=o,t.opacity<1&&this._updateOpacity(),n&&this.getPane().appendChild(this._icon),this._initInteraction(),o&&s&&this.getPane(t.shadowPane).appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),ui(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&ui(this._shadow),this._shadow=null},_setPos:function(t){wi(this._icon,t),this._shadow&&wi(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(i)},_initInteraction:function(){if(this.options.interactive&&(pi(this._icon,"leaflet-interactive"),this.addInteractiveTarget(this._icon),Ae)){var t=this.options.draggable;this.dragging&&(t=this.dragging.enabled(),this.dragging.disable()),this.dragging=new Ae(this),t&&this.dragging.enable()}},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var t=this.options.opacity;this._icon&&vi(this._icon,t),this._shadow&&vi(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_getPopupAnchor:function(){return this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return this.options.icon.options.tooltipAnchor}});var Oe=Se.extend({options:{stroke:!0,color:"#3388ff",weight:3,opacity:1,lineCap:"round",lineJoin:"round",dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,fillRule:"evenodd",interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(t){this._renderer=t.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return p(this,t),this._renderer&&(this._renderer._updateStyle(this),this.options.stroke&&t.hasOwnProperty("weight")&&this._updateBounds()),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+this._renderer.options.tolerance}}),Re=Oe.extend({options:{fill:!0,radius:10},initialize:function(t,i){p(this,i),this._latlng=W(t),this._radius=this.options.radius},setLatLng:function(t){return this._latlng=W(t),this.redraw(),this.fire("move",{latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius},setStyle:function(t){var i=t&&t.radius||this._radius;return Oe.prototype.setStyle.call(this,t),this.setRadius(i),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var t=this._radius,i=this._radiusY||t,e=this._clickTolerance(),n=[t+e,i+e];this._pxBounds=new O(this._point.subtract(n),this._point.add(n))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(t){return t.distanceTo(this._point)<=this._radius+this._clickTolerance()}});var Ne=Re.extend({initialize:function(t,i,e){if("number"==typeof i&&(i=h({},e,{radius:i})),p(this,i),this._latlng=W(t),isNaN(this.options.radius))throw new Error("Circle radius cannot be NaN");this._mRadius=this.options.radius},setRadius:function(t){return this._mRadius=t,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var t=[this._radius,this._radiusY||this._radius];return new N(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:Oe.prototype.setStyle,_project:function(){var t=this._latlng.lng,i=this._latlng.lat,e=this._map,n=e.options.crs;if(n.distance===U.distance){var o=Math.PI/180,s=this._mRadius/U.R/o,r=e.project([i+s,t]),a=e.project([i-s,t]),h=r.add(a).divideBy(2),u=e.unproject(h).lat,l=Math.acos((Math.cos(s*o)-Math.sin(i*o)*Math.sin(u*o))/(Math.cos(i*o)*Math.cos(u*o)))/o;!isNaN(l)&&0!==l||(l=s/Math.cos(Math.PI/180*i)),this._point=h.subtract(e.getPixelOrigin()),this._radius=isNaN(l)?0:h.x-e.project([u,t-l]).x,this._radiusY=h.y-r.y}else{var c=n.unproject(n.project(this._latlng).subtract([this._mRadius,0]));this._point=e.latLngToLayerPoint(this._latlng),this._radius=this._point.x-e.latLngToLayerPoint(c).x}this._updateBounds()}});var De=Oe.extend({options:{smoothFactor:1,noClip:!1},initialize:function(t,i){p(this,i),this._setLatLngs(t)},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var i,e,n=1/0,o=null,s=fe,r=0,a=this._parts.length;r<a;r++)for(var h=this._parts[r],u=1,l=h.length;u<l;u++){var c=s(t,i=h[u-1],e=h[u],!0);c<n&&(n=c,o=s(t,i,e))}return o&&(o.distance=Math.sqrt(n)),o},getCenter:function(){if(!this._map)throw new Error("Must add layer to map before using getCenter()");var t,i,e,n,o,s,r,a=this._rings[0],h=a.length;if(!h)return null;for(i=t=0;t<h-1;t++)i+=a[t].distanceTo(a[t+1])/2;if(0===i)return this._map.layerPointToLatLng(a[0]);for(n=t=0;t<h-1;t++)if(o=a[t],s=a[t+1],i<(n+=e=o.distanceTo(s)))return r=(n-i)/e,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=W(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new N,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return ge(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=ge(t),n=0,o=t.length;n<o;n++)e?(i[n]=W(t[n]),this._bounds.extend(i[n])):i[n]=this._convertLatLngs(t[n]);return i},_project:function(){var t=new O;this._rings=[],this._projectLatlngs(this._latlngs,this._rings,t),this._bounds.isValid()&&t.isValid()&&(this._rawPxBounds=t,this._updateBounds())},_updateBounds:function(){var t=this._clickTolerance(),i=new B(t,t);this._pxBounds=new O([this._rawPxBounds.min.subtract(i),this._rawPxBounds.max.add(i)])},_projectLatlngs:function(t,i,e){var n,o,s=t[0]instanceof j,r=t.length;if(s){for(o=[],n=0;n<r;n++)o[n]=this._map.latLngToLayerPoint(t[n]),e.extend(o[n]);i.push(o)}else for(n=0;n<r;n++)this._projectLatlngs(t[n],i,e)},_clipPoints:function(){var t=this._renderer._bounds;if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else{var i,e,n,o,s,r,a,h=this._parts;for(n=i=0,o=this._rings.length;i<o;i++)for(e=0,s=(a=this._rings[i]).length;e<s-1;e++)(r=de(a[e],a[e+1],t,e,!0))&&(h[n]=h[n]||[],h[n].push(r[0]),r[1]===a[e+1]&&e!==s-2||(h[n].push(r[1]),n++))}},_simplifyPoints:function(){for(var t=this._parts,i=this.options.smoothFactor,e=0,n=t.length;e<n;e++)t[e]=ce(t[e],i)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(t,i){var e,n,o,s,r,a,h=this._clickTolerance();if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(e=0,s=this._parts.length;e<s;e++)for(n=0,o=(r=(a=this._parts[e]).length)-1;n<r;o=n++)if((i||0!==n)&&_e(t,a[o],a[n])<=h)return!0;return!1}});De._flat=ve;var je=De.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length},getCenter:function(){if(!this._map)throw new Error("Must add layer to map before using getCenter()");var t,i,e,n,o,s,r,a,h,u=this._rings[0],l=u.length;if(!l)return null;for(s=r=a=0,t=0,i=l-1;t<l;i=t++)e=u[t],n=u[i],o=e.y*n.x-n.y*e.x,r+=(e.x+n.x)*o,a+=(e.y+n.y)*o,s+=3*o;return h=0===s?u[0]:[r/s,a/s],this._map.layerPointToLatLng(h)},_convertLatLngs:function(t){var i=De.prototype._convertLatLngs.call(this,t),e=i.length;return 2<=e&&i[0]instanceof j&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){De.prototype._setLatLngs.call(this,t),ge(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return ge(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new B(i,i);if(t=new O(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;o<s;o++)(n=xe(this._rings[o],t,!0)).length&&this._parts.push(n)},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(t){var i,e,n,o,s,r,a,h,u=!1;if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(o=0,a=this._parts.length;o<a;o++)for(s=0,r=(h=(i=this._parts[o]).length)-1;s<h;r=s++)e=i[s],n=i[r],e.y>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;i<e;i++)((n=o[i]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return this}var s=this.options;if(s.filter&&!s.filter(t))return this;var r=He(t,s);return r?(r.feature=Ke(t),r.defaultOptions=r.options,this.resetStyle(r),s.onEachFeature&&s.onEachFeature(t,r),this.addLayer(r)):this},resetStyle:function(t){return t.options=h({},t.defaultOptions),this._setLayerStyle(t,this.options.style),this},setStyle:function(i){return this.eachLayer(function(t){this._setLayerStyle(t,i)},this)},_setLayerStyle:function(t,i){t.setStyle&&("function"==typeof i&&(i=i(t.feature)),t.setStyle(i))}});function He(t,i){var e,n,o,s,r="Feature"===t.type?t.geometry:t,a=r?r.coordinates:null,h=[],u=i&&i.pointToLayer,l=i&&i.coordsToLatLng||Fe;if(!a&&!r)return null;switch(r.type){case"Point":return e=l(a),u?u(t,e):new Ie(e);case"MultiPoint":for(o=0,s=a.length;o<s;o++)e=l(a[o]),h.push(u?u(t,e):new Ie(e));return new Ee(h);case"LineString":case"MultiLineString":return n=Ue(a,"LineString"===r.type?0:1,l),new De(n,i);case"Polygon":case"MultiPolygon":return n=Ue(a,"Polygon"===r.type?1:2,l),new je(n,i);case"GeometryCollection":for(o=0,s=r.geometries.length;o<s;o++){var c=He({geometry:r.geometries[o],type:"Feature",properties:t.properties},i);c&&h.push(c)}return new Ee(h);default:throw new Error("Invalid GeoJSON object.")}}function Fe(t){return new j(t[1],t[0],t[2])}function Ue(t,i,e){for(var n,o=[],s=0,r=t.length;s<r;s++)n=i?Ue(t[s],i-1,e):(e||Fe)(t[s]),o.push(n);return o}function Ve(t,i){return i="number"==typeof i?i:6,void 0!==t.alt?[c(t.lng,i),c(t.lat,i),c(t.alt,i)]:[c(t.lng,i),c(t.lat,i)]}function qe(t,i,e,n){for(var o=[],s=0,r=t.length;s<r;s++)o.push(i?qe(t[s],i-1,e,n):Ve(t[s],n));return!i&&e&&o.push(o[0]),o}function Ge(t,i){return t.feature?h({},t.feature,{geometry:i}):Ke(i)}function Ke(t){return"Feature"===t.type||"FeatureCollection"===t.type?t:{type:"Feature",properties:{},geometry:t}}var Ye={toGeoJSON:function(t){return Ge(this,{type:"Point",coordinates:Ve(this.getLatLng(),t)})}};function Xe(t,i){return new We(t,i)}Ie.include(Ye),Ne.include(Ye),Re.include(Ye),De.include({toGeoJSON:function(t){var i=!ge(this._latlngs);return Ge(this,{type:(i?"Multi":"")+"LineString",coordinates:qe(this._latlngs,i?1:0,!1,t)})}}),je.include({toGeoJSON:function(t){var i=!ge(this._latlngs),e=i&&!ge(this._latlngs[0]),n=qe(this._latlngs,e?2:i?1:0,!0,t);return i||(n=[n]),Ge(this,{type:(e?"Multi":"")+"Polygon",coordinates:n})}}),Ze.include({toMultiPoint:function(i){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON(i).geometry.coordinates)}),Ge(this,{type:"MultiPoint",coordinates:e})},toGeoJSON:function(n){var t=this.feature&&this.feature.geometry&&this.feature.geometry.type;if("MultiPoint"===t)return this.toMultiPoint(n);var o="GeometryCollection"===t,s=[];return this.eachLayer(function(t){if(t.toGeoJSON){var i=t.toGeoJSON(n);if(o)s.push(i.geometry);else{var e=Ke(i);"FeatureCollection"===e.type?s.push.apply(s,e.features):s.push(e)}}}),o?Ge(this,{geometries:s,type:"GeometryCollection"}):{type:"FeatureCollection",features:s}}});var Je=Xe,$e=Se.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,i,e){this._url=t,this._bounds=D(i),p(this,e)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(pi(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){ui(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&ci(this._image),this},bringToBack:function(){return this._map&&_i(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=D(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t="IMG"===this._url.tagName,i=this._image=t?this._url:hi("img");pi(i,"leaflet-image-layer"),this._zoomAnimated&&pi(i,"leaflet-zoom-animated"),this.options.className&&pi(i,this.options.className),i.onselectstart=l,i.onmousemove=l,i.onload=a(this.fire,this,"load"),i.onerror=a(this._overlayOnError,this,"error"),!this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t?this._url=i.src:(i.src=this._url,i.alt=this.options.alt)},_animateZoom:function(t){var i=this._map.getZoomScale(t.zoom),e=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;xi(this._image,e,i)},_reset:function(){var t=this._image,i=new O(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),e=i.getSize();wi(t,i.min),t.style.width=e.x+"px",t.style.height=e.y+"px"},_updateOpacity:function(){vi(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)}}),Qe=$e.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0},_initImage:function(){var t="VIDEO"===this._url.tagName,i=this._image=t?this._url:hi("video");if(pi(i,"leaflet-image-layer"),this._zoomAnimated&&pi(i,"leaflet-zoom-animated"),i.onselectstart=l,i.onmousemove=l,i.onloadeddata=a(this.fire,this,"load"),t){for(var e=i.getElementsByTagName("source"),n=[],o=0;o<e.length;o++)n.push(e[o].src);this._url=0<e.length?n:[i.src]}else{v(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&i.style.hasOwnProperty("objectFit")&&(i.style.objectFit="fill"),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop;for(var s=0;s<this._url.length;s++){var r=hi("source");r.src=this._url[s],i.appendChild(r)}}}});var tn=$e.extend({_initImage:function(){var t=this._image=this._url;pi(t,"leaflet-image-layer"),this._zoomAnimated&&pi(t,"leaflet-zoom-animated"),t.onselectstart=l,t.onmousemove=l}});var en=Se.extend({options:{offset:[0,7],className:"",pane:"popupPane"},initialize:function(t,i){p(this,t),this._source=i},onAdd:function(t){this._zoomAnimated=t._zoomAnimated,this._container||this._initLayout(),t._fadeAnimated&&vi(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&vi(this._container,1),this.bringToFront()},onRemove:function(t){t._fadeAnimated?(vi(this._container,0),this._removeTimeout=setTimeout(a(ui,void 0,this._container),200)):ui(this._container)},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=W(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},getEvents:function(){var t={zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&ci(this._container),this},bringToBack:function(){return this._map&&_i(this._container),this},_prepareOpen:function(t,i,e){if(i instanceof Se||(e=i,i=t),i instanceof Ee)for(var n in t._layers){i=t._layers[n];break}if(!e)if(i.getCenter)e=i.getCenter();else{if(!i.getLatLng)throw new Error("Unable to get source layer LatLng.");e=i.getLatLng()}return this._source=i,this.update(),e},_updateContent:function(){if(this._content){var t=this._contentNode,i="function"==typeof this._content?this._content(this._source||this):this._content;if("string"==typeof i)t.innerHTML=i;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(i)}this.fire("contentupdate")}},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=I(this.options.offset),e=this._getAnchor();this._zoomAnimated?wi(this._container,t.add(e)):i=i.add(t).add(e);var n=this._containerBottom=-i.y,o=this._containerLeft=-Math.round(this._containerWidth/2)+i.x;this._container.style.bottom=n+"px",this._container.style.left=o+"px"}},_getAnchor:function(){return[0,0]}}),nn=en.extend({options:{maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:[5,5],keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:""},openOn:function(t){return t.openPopup(this),this},onAdd:function(t){en.prototype.onAdd.call(this,t),t.fire("popupopen",{popup:this}),this._source&&(this._source.fire("popupopen",{popup:this},!0),this._source instanceof Oe||this._source.on("preclick",Oi))},onRemove:function(t){en.prototype.onRemove.call(this,t),t.fire("popupclose",{popup:this}),this._source&&(this._source.fire("popupclose",{popup:this},!0),this._source instanceof Oe||this._source.off("preclick",Oi))},getEvents:function(){var t=en.prototype.getEvents.call(this);return(void 0!==this.options.closeOnClick?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this._close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_close:function(){this._map&&this._map.closePopup(this)},_initLayout:function(){var t="leaflet-popup",i=this._container=hi("div",t+" "+(this.options.className||"")+" leaflet-zoom-animated"),e=this._wrapper=hi("div",t+"-content-wrapper",i);if(this._contentNode=hi("div",t+"-content",e),Ni(e),Ri(this._contentNode),Ei(e,"contextmenu",Oi),this._tipContainer=hi("div",t+"-tip-container",i),this._tip=hi("div",t+"-tip",this._tipContainer),this.options.closeButton){var n=this._closeButton=hi("a",t+"-close-button",i);n.href="#close",n.innerHTML="×",Ei(n,"click",this._onCloseButtonClick,this)}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width="",i.whiteSpace="nowrap";var e=t.offsetWidth;e=Math.min(e,this.options.maxWidth),e=Math.max(e,this.options.minWidth),i.width=e+1+"px",i.whiteSpace="",i.height="";var n=t.offsetHeight,o=this.options.maxHeight,s="leaflet-popup-scrolled";o&&o<n?(i.height=o+"px",pi(t,s)):mi(t,s),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();wi(this._container,i.add(e))},_adjustPan:function(){if(this.options.autoPan){this._map._panAnim&&this._map._panAnim.stop();var t=this._map,i=parseInt(ai(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+i,n=this._containerWidth,o=new B(this._containerLeft,-e-this._containerBottom);o._add(Pi(this._container));var s=t.layerPointToContainerPoint(o),r=I(this.options.autoPanPadding),a=I(this.options.autoPanPaddingTopLeft||r),h=I(this.options.autoPanPaddingBottomRight||r),u=t.getSize(),l=0,c=0;s.x+n+h.x>u.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.x<n.x?(s="right",t.add(I(h.x+u.x,u.y-a/2+h.y,!0))):(s="left",t.subtract(I(r+u.x-h.x,a/2-u.y-h.y,!0))),mi(e,"leaflet-tooltip-right"),mi(e,"leaflet-tooltip-left"),mi(e,"leaflet-tooltip-top"),mi(e,"leaflet-tooltip-bottom"),pi(e,"leaflet-tooltip-"+s),wi(e,t)},_updatePosition:function(){var t=this._map.latLngToLayerPoint(this._latlng);this._setPosition(t)},setOpacity:function(t){this.options.opacity=t,this._container&&vi(this._container,t)},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPosition(i)},_getAnchor:function(){return I(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():[0,0])}});Ji.include({openTooltip:function(t,i,e){return t instanceof on||(t=new on(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:this.addLayer(t)},closeTooltip:function(t){return t&&this.removeLayer(t),this}}),Se.include({bindTooltip:function(t,i){return t instanceof on?(p(t,i),(this._tooltip=t)._source=this):(this._tooltip&&!i||(this._tooltip=new on(i,this)),this._tooltip.setContent(t)),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return this._tooltip&&(this._initTooltipInteractions(!0),this.closeTooltip(),this._tooltip=null),this},_initTooltipInteractions:function(t){if(t||!this._tooltipHandlersAdded){var i=t?"off":"on",e={remove:this.closeTooltip,move:this._moveTooltip};this._tooltip.options.permanent?e.add=this._openTooltip:(e.mouseover=this._openTooltip,e.mouseout=this.closeTooltip,this._tooltip.options.sticky&&(e.mousemove=this._moveTooltip),Tt&&(e.click=this._openTooltip)),this[i](e),this._tooltipHandlersAdded=!t}},openTooltip:function(t,i){return this._tooltip&&this._map&&(i=this._tooltip._prepareOpen(this,t,i),this._map.openTooltip(this._tooltip,i),this._tooltip.options.interactive&&this._tooltip._container&&(pi(this._tooltip._container,"leaflet-clickable"),this.addInteractiveTarget(this._tooltip._container))),this},closeTooltip:function(){return this._tooltip&&(this._tooltip._close(),this._tooltip.options.interactive&&this._tooltip._container&&(mi(this._tooltip._container,"leaflet-clickable"),this.removeInteractiveTarget(this._tooltip._container))),this},toggleTooltip:function(t){return this._tooltip&&(this._tooltip._map?this.closeTooltip():this.openTooltip(t)),this},isTooltipOpen:function(){return this._tooltip.isOpen()},setTooltipContent:function(t){return this._tooltip&&this._tooltip.setContent(t),this},getTooltip:function(){return this._tooltip},_openTooltip:function(t){var i=t.layer||t.target;this._tooltip&&this._map&&this.openTooltip(i,this._tooltip.options.sticky?t.latlng:void 0)},_moveTooltip:function(t){var i,e,n=t.latlng;this._tooltip.options.sticky&&t.originalEvent&&(i=this._map.mouseEventToContainerPoint(t.originalEvent),e=this._map.containerPointToLayerPoint(i),n=this._map.layerPointToLatLng(e)),this._tooltip.setLatLng(n)}});var sn=ke.extend({options:{iconSize:[12,12],html:!1,bgPos:null,className:"leaflet-div-icon"},createIcon:function(t){var i=t&&"DIV"===t.tagName?t:document.createElement("div"),e=this.options;if(e.html instanceof Element?(li(i),i.appendChild(e.html)):i.innerHTML=!1!==e.html?e.html:"",e.bgPos){var n=I(e.bgPos);i.style.backgroundPosition=-n.x+"px "+-n.y+"px"}return this._setIconStyles(i,"icon"),i},createShadow:function(){return null}});ke.Default=Be;var rn=Se.extend({options:{tileSize:256,opacity:1,updateWhenIdle:xt,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void 0,maxNativeZoom:void 0,minNativeZoom:void 0,noWrap:!1,pane:"tilePane",className:"",keepBuffer:2},initialize:function(t){p(this,t)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView(),this._update()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){this._removeAllTiles(),ui(this._container),t._removeZoomLimit(this),this._container=null,this._tileZoom=void 0},bringToFront:function(){return this._map&&(ci(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(_i(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){return this._map&&(this._removeAllTiles(),this._update()),this},getEvents:function(){var t={viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||(this._onMove=o(this._onMoveEnd,this.options.updateInterval,this)),t.move=this._onMove),this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},createTile:function(){return document.createElement("div")},getTileSize:function(){var t=this.options.tileSize;return t instanceof B?t:new B(t,t)},_updateZIndex:function(){this._container&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t){for(var i,e=this.getPane().children,n=-t(-1/0,1/0),o=0,s=e.length;o<s;o++)i=e[o].style.zIndex,e[o]!==this._container&&i&&(n=t(n,+i));isFinite(n)&&(this.options.zIndex=n+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!et){vi(this._container,this.options.opacity);var t=+new Date,i=!1,e=!1;for(var n in this._tiles){var o=this._tiles[n];if(o.current&&o.loaded){var s=Math.min(1,(t-o.loaded)/200);vi(o.el,s),s<1?i=!0:(o.active?e=!0:this._onOpaqueTile(o),o.active=!0)}}e&&!this._noPrune&&this._pruneTiles(),i&&(C(this._fadeFrame),this._fadeFrame=M(this._updateOpacity,this))}},_onOpaqueTile:l,_initContainer:function(){this._container||(this._container=hi("div","leaflet-layer "+(this.options.className||"")),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var t=this._tileZoom,i=this.options.maxZoom;if(void 0!==t){for(var e in this._levels)this._levels[e].el.children.length||e===t?(this._levels[e].el.style.zIndex=i-Math.abs(t-e),this._onUpdateLevel(e)):(ui(this._levels[e].el),this._removeTilesAtZoom(e),this._onRemoveLevel(e),delete this._levels[e]);var n=this._levels[t],o=this._map;return n||((n=this._levels[t]={}).el=hi("div","leaflet-tile-container leaflet-zoom-animated",this._container),n.el.style.zIndex=i,n.origin=o.project(o.unproject(o.getPixelOrigin()),t).round(),n.zoom=t,this._setZoomTransform(n,o.getCenter(),o.getZoom()),n.el.offsetWidth,this._onCreateLevel(n)),this._level=n}},_onUpdateLevel:l,_onRemoveLevel:l,_onCreateLevel:l,_pruneTiles:function(){if(this._map){var t,i,e=this._map.getZoom();if(e>this.options.maxZoom||e<this.options.minZoom)this._removeAllTiles();else{for(t in this._tiles)(i=this._tiles[t]).retain=i.current;for(t in this._tiles)if((i=this._tiles[t]).current&&!i.active){var n=i.coords;this._retainParent(n.x,n.y,n.z,n.z-5)||this._retainChildren(n.x,n.y,n.z,n.z+2)}for(t in this._tiles)this._tiles[t].retain||this._removeTile(t)}}},_removeTilesAtZoom:function(t){for(var i in this._tiles)this._tiles[i].coords.z===t&&this._removeTile(i)},_removeAllTiles:function(){for(var t in this._tiles)this._removeTile(t)},_invalidateAll:function(){for(var t in this._levels)ui(this._levels[t].el),this._onRemoveLevel(t),delete this._levels[t];this._removeAllTiles(),this._tileZoom=void 0},_retainParent:function(t,i,e,n){var o=Math.floor(t/2),s=Math.floor(i/2),r=e-1,a=new B(+o,+s);a.z=+r;var h=this._tileCoordsToKey(a),u=this._tiles[h];return u&&u.active?u.retain=!0:(u&&u.loaded&&(u.retain=!0),n<r&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var r=new B(o,s);r.z=e+1;var a=this._tileCoordsToKey(r),h=this._tiles[a];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1<n&&this._retainChildren(o,s,e+1,n))}},_resetView:function(t){var i=t&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),i,i)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_clampZoom:function(t){var i=this.options;return void 0!==i.minNativeZoom&&t<i.minNativeZoom?i.minNativeZoom:void 0!==i.maxNativeZoom&&i.maxNativeZoom<t?i.maxNativeZoom:t},_setView:function(t,i,e,n){var o=this._clampZoom(Math.round(i));(void 0!==this.options.maxZoom&&o>this.options.maxZoom||void 0!==this.options.minZoom&&o<this.options.minZoom)&&(o=void 0);var s=this.options.updateWhenZooming&&o!==this._tileZoom;n&&!s||(this._tileZoom=o,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),void 0!==o&&this._update(t),e||this._pruneTiles(),this._noPrune=!!e),this._setZoomTransforms(t,i)},_setZoomTransforms:function(t,i){for(var e in this._levels)this._setZoomTransform(this._levels[e],t,i)},_setZoomTransform:function(t,i,e){var n=this._map.getZoomScale(e,t.zoom),o=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(i,e)).round();yt?xi(t.el,o,n):wi(t.el,o)},_resetGrid:function(){var t=this._map,i=t.options.crs,e=this._tileSize=this.getTileSize(),n=this._tileZoom,o=this._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRange=this._pxBoundsToTileRange(o)),this._wrapX=i.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0,i.wrapLng[0]],n).x/e.x),Math.ceil(t.project([0,i.wrapLng[1]],n).x/e.y)],this._wrapY=i.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([i.wrapLat[0],0],n).y/e.x),Math.ceil(t.project([i.wrapLat[1],0],n).y/e.y)]},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._update()},_getTiledPixelBounds:function(t){var i=this._map,e=i._animatingZoom?Math.max(i._animateToZoom,i.getZoom()):i.getZoom(),n=i.getZoomScale(e,this._tileZoom),o=i.project(t,this._tileZoom).floor(),s=i.getSize().divideBy(2*n);return new O(o.subtract(s),o.add(s))},_update:function(t){var i=this._map;if(i){var e=this._clampZoom(i.getZoom());if(void 0===t&&(t=i.getCenter()),void 0!==this._tileZoom){var n=this._getTiledPixelBounds(t),o=this._pxBoundsToTileRange(n),s=o.getCenter(),r=[],a=this.options.keepBuffer,h=new O(o.getBottomLeft().subtract([a,-a]),o.getTopRight().add([a,-a]));if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y)))throw new Error("Attempted to load an infinite number of tiles");for(var u in this._tiles){var l=this._tiles[u].coords;l.z===this._tileZoom&&h.contains(new B(l.x,l.y))||(this._tiles[u].current=!1)}if(1<Math.abs(e-this._tileZoom))this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var _=o.min.x;_<=o.max.x;_++){var d=new B(_,c);if(d.z=this._tileZoom,this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:r.push(d)}}if(r.sort(function(t,i){return t.distanceTo(s)-i.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(_=0;_<r.length;_++)this._addTile(r[_],m);this._level.el.appendChild(m)}}}}},_isValidTile:function(t){var i=this._map.options.crs;if(!i.infinite){var e=this._globalTileRange;if(!i.wrapLng&&(t.x<e.min.x||t.x>e.max.x)||!i.wrapLat&&(t.y<e.min.y||t.y>e.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<i.maxZoom&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),"string"==typeof i.subdomains&&(i.subdomains=i.subdomains.split("")),st||this.on("tileunload",this._onTileRemove)},setUrl:function(t,i){return this._url===t&&void 0===i&&(i=!0),this._url=t,i||this.redraw(),this},createTile:function(t,i){var e=document.createElement("img");return Ei(e,"load",a(this._tileOnLoad,this,i,e)),Ei(e,"error",a(this._tileOnError,this,i,e)),!this.options.crossOrigin&&""!==this.options.crossOrigin||(e.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),e.alt="",e.setAttribute("role","presentation"),e.src=this.getTileUrl(t),e},getTileUrl:function(t){var i={r:Ct?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var e=this._globalTileRange.max.y-t.y;this.options.tms&&(i.y=e),i["-y"]=e}return g(this._url,h(i,this.options))},_tileOnLoad:function(t,i){et?setTimeout(a(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute("src")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom;return this.options.zoomReverse&&(t=i-t),t+this.options.zoomOffset},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=l,i.onerror=l,i.complete||(i.src=x,ui(i),delete this._tiles[t]))},_removeTile:function(t){var i=this._tiles[t];if(i)return ht||i.el.setAttribute("src",x),rn.prototype._removeTile.call(this,t)},_tileReady:function(t,i,e){if(this._map&&(!e||e.getAttribute("src")!==x))return rn.prototype._tileReady.call(this,t,i,e)}});function hn(t,i){return new an(t,i)}var un=an.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,i){this._url=t;var e=h({},this.defaultWmsParams);for(var n in i)n in this.options||(e[n]=i[n]);var o=(i=p(this,i)).detectRetina&&Ct?2:1,s=this.getTileSize();e.width=s.x*o,e.height=s.y*o,this.wmsParams=e},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=1.3<=this._wmsVersion?"crs":"srs";this.wmsParams[i]=this._crs.code,an.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=R(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,r=(1.3<=this._wmsVersion&&this._crs===Me?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(","),a=an.prototype.getTileUrl.call(this,t);return a+m(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+r},setParams:function(t,i){return h(this.wmsParams,t),i||this.redraw(),this}});an.WMS=un,hn.wms=function(t,i){return new un(t,i)};var ln=Se.extend({options:{padding:.1,tolerance:0},initialize:function(t){p(this,t),u(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&pi(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=Pi(this._container),o=this._map.getSize().multiplyBy(.5+this.options.padding),s=this._map.project(this._center,i),r=this._map.project(t,i).subtract(s),a=o.multiplyBy(-e).add(n).add(o).subtract(r);yt?xi(this._container,a,e):wi(this._container,a)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new O(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),cn=ln.extend({getEvents:function(){var t=ln.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){ln.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");Ei(t,"mousemove",o(this._onMouseMove,32,this),this),Ei(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),Ei(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){C(this._redrawRequest),delete this._ctx,ui(this._container),Bi(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){ln.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=Ct?2:1;wi(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+"px",i.style.height=e.y+"px",Ct&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){ln.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t);var i=(this._layers[u(t)]=t)._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[u(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if("string"==typeof t.options.dashArray){var i,e,n=t.options.dashArray.split(/[, ]+/),o=[];for(e=0;e<n.length;e++){if(i=Number(n[e]),isNaN(i))return;o.push(i)}t.options._dashArray=o}else t.options._dashArray=t.options.dashArray},_requestRedraw:function(t){this._map&&(this._extendRedrawBounds(t),this._redrawRequest=this._redrawRequest||M(this._redraw,this))},_extendRedrawBounds:function(t){if(t._pxBounds){var i=(t.options.weight||0)+1;this._redrawBounds=this._redrawBounds||new O,this._redrawBounds.extend(t._pxBounds.min.subtract([i,i])),this._redrawBounds.extend(t._pxBounds.max.add([i,i]))}},_redraw:function(){this._redrawRequest=null,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBounds=null},_clear:function(){var t=this._redrawBounds;if(t){var i=t.getSize();this._ctx.clearRect(t.min.x,t.min.y,i.x,i.y)}else this._ctx.clearRect(0,0,this._container.width,this._container.height)},_draw:function(){var t,i=this._redrawBounds;if(this._ctx.save(),i){var e=i.getSize();this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,e.x,e.y),this._ctx.clip()}this._drawing=!0;for(var n=this._drawFirst;n;n=n.next)t=n.layer,(!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();this._drawing=!1,this._ctx.restore()},_updatePoly:function(t,i){if(this._drawing){var e,n,o,s,r=t._parts,a=r.length,h=this._ctx;if(a){for(h.beginPath(),e=0;e<a;e++){for(n=0,o=r[e].length;n<o;n++)s=r[e][n],h[n?"lineTo":"moveTo"](s.x,s.y);i&&h.closePath()}this._fillStroke(h,t)}}},_updateCircle:function(t){if(this._drawing&&!t._empty()){var i=t._point,e=this._ctx,n=Math.max(Math.round(t._radius),1),o=(Math.max(Math.round(t._radiusY),1)||n)/n;1!=o&&(e.save(),e.scale(1,o)),e.beginPath(),e.arc(i.x,i.y/o,n,0,2*Math.PI,!1),1!=o&&e.restore(),this._fillStroke(e,t)}},_fillStroke:function(t,i){var e=i.options;e.fill&&(t.globalAlpha=e.fillOpacity,t.fillStyle=e.fillColor||e.color,t.fill(e.fillRule||"evenodd")),e.stroke&&0!==e.weight&&(t.setLineDash&&t.setLineDash(i.options&&i.options._dashArray||[]),t.globalAlpha=e.opacity,t.lineWidth=e.weight,t.strokeStyle=e.color,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.stroke())},_onClick:function(t){for(var i,e,n=this._map.mouseEventToLayerPoint(t),o=this._drawFirst;o;o=o.next)(i=o.layer).options.interactive&&i._containsPoint(n)&&!this._map._draggableMoved(i)&&(e=i);e&&(qi(t),this._fireEvent([e],t))},_onMouseMove:function(t){if(this._map&&!this._map.dragging.moving()&&!this._map._animatingZoom){var i=this._map.mouseEventToLayerPoint(t);this._handleMouseHover(t,i)}},_handleMouseOut:function(t){var i=this._hoveredLayer;i&&(mi(this._container,"leaflet-interactive"),this._fireEvent([i],t,"mouseout"),this._hoveredLayer=null)},_handleMouseHover:function(t,i){for(var e,n,o=this._drawFirst;o;o=o.next)(e=o.layer).options.interactive&&e._containsPoint(i)&&(n=e);n!==this._hoveredLayer&&(this._handleMouseOut(t),n&&(pi(this._container,"leaflet-interactive"),this._fireEvent([n],t,"mouseover"),this._hoveredLayer=n)),this._hoveredLayer&&this._fireEvent([this._hoveredLayer],t)},_fireEvent:function(t,i,e){this._map._fireDOMEvent(i,e||i.type,t)},_bringToFront:function(t){var i=t._order;if(i){var e=i.next,n=i.prev;e&&((e.prev=n)?n.next=e:e&&(this._drawFirst=e),i.prev=this._drawLast,(this._drawLast.next=i).next=null,this._drawLast=i,this._requestRedraw(t))}},_bringToBack:function(t){var i=t._order;if(i){var e=i.next,n=i.prev;n&&((n.next=e)?e.prev=n:n&&(this._drawLast=n),i.prev=null,i.next=this._drawFirst,this._drawFirst.prev=i,this._drawFirst=i,this._requestRedraw(t))}}});function _n(t){return St?new cn(t):null}var dn=function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return document.createElement("<lvml:"+t+' class="lvml">')}}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(;1<this._positions.length&&50<t-this._times[0];)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.x<i.min.x&&(t.x=this._viscousLimit(t.x,i.min.x)),t.y<i.min.y&&(t.y=this._viscousLimit(t.y,i.min.y)),t.x>i.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)<Math.abs(s+e)?o:s;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=r},_onDragEnd:function(t){var i=this._map,e=i.options,n=!e.inertia||this._times.length<2;if(i.fire("dragend",t),n)i.fire("moveend");else{this._prunePositions(+new Date);var o=this._lastPos.subtract(this._positions[0]),s=(this._lastTime-this._times[0])/1e3,r=e.easeLinearity,a=o.multiplyBy(r/s),h=a.distanceTo([0,0]),u=Math.min(e.inertiaMaxSpeed,h),l=a.multiplyBy(u/h),c=u/(e.inertiaDeceleration*r),_=l.multiplyBy(-c/2).round();_.x||_.y?(_=i._limitOffset(_,i.options.maxBounds),M(function(){i.panBy(_,{duration:c,easeLinearity:r,noMoveStart:!0,animate:!0})})):i.fire("moveend")}}});Ji.addInitHook("addHandler","dragging",wn),Ji.mergeOptions({keyboard:!0,keyboardPanDelta:80});var Pn=oe.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(t){this._map=t,this._setPanDelta(t.options.keyboardPanDelta),this._setZoomDelta(t.options.zoomDelta)},addHooks:function(){var t=this._map._container;t.tabIndex<=0&&(t.tabIndex="0"),Ei(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),Bi(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){if(!this._focused){var t=document.body,i=document.documentElement,e=t.scrollTop||i.scrollTop,n=t.scrollLeft||i.scrollLeft;this._map._container.focus(),window.scrollTo(n,e)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanDelta:function(t){var i,e,n=this._panKeys={},o=this.keyCodes;for(i=0,e=o.left.length;i<e;i++)n[o.left[i]]=[-1*t,0];for(i=0,e=o.right.length;i<e;i++)n[o.right[i]]=[t,0];for(i=0,e=o.down.length;i<e;i++)n[o.down[i]]=[0,t];for(i=0,e=o.up.length;i<e;i++)n[o.up[i]]=[0,-1*t]},_setZoomDelta:function(t){var i,e,n=this._zoomKeys={},o=this.keyCodes;for(i=0,e=o.zoomIn.length;i<e;i++)n[o.zoomIn[i]]=t;for(i=0,e=o.zoomOut.length;i<e;i++)n[o.zoomOut[i]]=-t},_addHooks:function(){Ei(document,"keydown",this._onKeyDown,this)},_removeHooks:function(){Bi(document,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var i,e=t.keyCode,n=this._map;if(e in this._panKeys)n._panAnim&&n._panAnim._inProgress||(i=this._panKeys[e],t.shiftKey&&(i=I(i).multiplyBy(3)),n.panBy(i),n.options.maxBounds&&n.panInsideBounds(n.options.maxBounds));else if(e in this._zoomKeys)n.setZoom(n.getZoom()+(t.shiftKey?3:1)*this._zoomKeys[e]);else{if(27!==e||!n._popup||!n._popup.options.closeOnEscapeKey)return;n.closePopup()}ji(t)}}});Ji.addInitHook("addHandler","keyboard",Pn),Ji.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60});var Ln=oe.extend({addHooks:function(){Ei(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){Bi(this._map._container,"mousewheel",this._onWheelScroll,this)},_onWheelScroll:function(t){var i=Fi(t),e=this._map.options.wheelDebounceTime;this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var n=Math.max(e-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(a(this._performZoom,this),n),ji(t)},_performZoom:function(){var t=this._map,i=t.getZoom(),e=this._map.options.zoomSnap||0;t._stop();var n=this._delta/(4*this._map.options.wheelPxPerZoomLevel),o=4*Math.log(2/(1+Math.exp(-Math.abs(n))))/Math.LN2,s=e?Math.ceil(o/e)*e:o,r=t._limitZoom(i+(0<this._delta?s:-s))-i;this._delta=0,this._startTime=null,r&&("center"===t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});Ji.addInitHook("addHandler","scrollWheelZoom",Ln),Ji.mergeOptions({tap:!0,tapTolerance:15});var bn=oe.extend({addHooks:function(){Ei(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){Bi(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(Di(t),this._fireClick=!0,1<t.touches.length)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],e=i.target;this._startPos=this._newPos=new B(i.clientX,i.clientY),e.tagName&&"a"===e.tagName.toLowerCase()&&pi(e,"leaflet-active"),this._holdTimeout=setTimeout(a(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),this._simulateEvent("mousedown",i),Ei(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),Bi(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],e=i.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&mi(e,"leaflet-active"),this._simulateEvent("mouseup",i),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var i=t.touches[0];this._newPos=new B(i.clientX,i.clientY),this._simulateEvent("mousemove",i)},_simulateEvent:function(t,i){var e=document.createEvent("MouseEvents");e._simulated=!0,i.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});Tt&&!bt&&Ji.addInitHook("addHandler","tap",bn),Ji.mergeOptions({touchZoom:Tt&&!rt,bounceAtZoomLimits:!0});var Tn=oe.extend({addHooks:function(){pi(this._map._container,"leaflet-touch-zoom"),Ei(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){mi(this._map._container,"leaflet-touch-zoom"),Bi(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),"center"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),Ei(document,"touchmove",this._onTouchMove,this),Ei(document,"touchend",this._onTouchEnd,this),Di(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]),o=e.distanceTo(n)/this._startDist;if(this._zoom=i.getScaleZoom(o,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoom<i.getMinZoom()&&o<1||this._zoom>i.getMaxZoom()&&1<o)&&(this._zoom=i._limitZoom(this._zoom)),"center"===i.options.touchZoom){if(this._center=this._startLatLng,1==o)return}else{var s=e._add(n)._divideBy(2)._subtract(this._centerPoint);if(1==o&&0===s.x&&0===s.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(s),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),C(this._animRequest);var r=a(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=M(r,this,!0),Di(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,C(this._animRequest),Bi(document,"touchmove",this._onTouchMove),Bi(document,"touchend",this._onTouchEnd),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});Ji.addInitHook("addHandler","touchZoom",Tn),Ji.BoxZoom=yn,Ji.DoubleClickZoom=xn,Ji.Drag=wn,Ji.Keyboard=Pn,Ji.ScrollWheelZoom=Ln,Ji.Tap=bn,Ji.TouchZoom=Tn,Object.freeze=i,t.version="1.5.1",t.Control=Qi,t.control=$i,t.Browser=Bt,t.Evented=k,t.Mixin=re,t.Util=S,t.Class=Z,t.Handler=oe,t.extend=h,t.bind=a,t.stamp=u,t.setOptions=p,t.DomEvent=Yi,t.DomUtil=Zi,t.PosAnimation=Xi,t.Draggable=le,t.LineUtil=ye,t.PolyUtil=Pe,t.Point=B,t.point=I,t.Bounds=O,t.bounds=R,t.Transformation=G,t.transformation=K,t.Projection=Te,t.LatLng=j,t.latLng=W,t.LatLngBounds=N,t.latLngBounds=D,t.CRS=F,t.GeoJSON=We,t.geoJSON=Xe,t.geoJson=Je,t.Layer=Se,t.LayerGroup=Ze,t.layerGroup=function(t,i){return new Ze(t,i)},t.FeatureGroup=Ee,t.featureGroup=function(t){return new Ee(t)},t.ImageOverlay=$e,t.imageOverlay=function(t,i,e){return new $e(t,i,e)},t.VideoOverlay=Qe,t.videoOverlay=function(t,i,e){return new Qe(t,i,e)},t.SVGOverlay=tn,t.svgOverlay=function(t,i,e){return new tn(t,i,e)},t.DivOverlay=en,t.Popup=nn,t.popup=function(t,i){return new nn(t,i)},t.Tooltip=on,t.tooltip=function(t,i){return new on(t,i)},t.Icon=ke,t.icon=function(t){return new ke(t)},t.DivIcon=sn,t.divIcon=function(t){return new sn(t)},t.Marker=Ie,t.marker=function(t,i){return new Ie(t,i)},t.TileLayer=an,t.tileLayer=hn,t.GridLayer=rn,t.gridLayer=function(t){return new rn(t)},t.SVG=fn,t.svg=gn,t.Renderer=ln,t.Canvas=cn,t.canvas=_n,t.Path=Oe,t.CircleMarker=Re,t.circleMarker=function(t,i){return new Re(t,i)},t.Circle=Ne,t.circle=function(t,i,e){return new Ne(t,i,e)},t.Polyline=De,t.polyline=function(t,i){return new De(t,i)},t.Polygon=je,t.polygon=function(t,i){return new je(t,i)},t.Rectangle=vn,t.rectangle=function(t,i){return new vn(t,i)},t.Map=Ji,t.map=function(t,i){return new Ji(t,i)};var zn=window.L;t.noConflict=function(){return window.L=zn,this},window.L=t}); +/* + * Leaflet.markercluster 1.4.1+master.37ab9a2, + * Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps. + * https://github.com/Leaflet/Leaflet.markercluster + * (c) 2012-2017, Dave Leaver, smartrak + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.Leaflet = global.Leaflet || {}, global.Leaflet.markercluster = global.Leaflet.markercluster || {}))); +}(this, (function (exports) { 'use strict'; + +/* + * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within + */ + +var MarkerClusterGroup = L.MarkerClusterGroup = L.FeatureGroup.extend({ + + options: { + maxClusterRadius: 80, //A cluster will cover at most this many pixels from its center + iconCreateFunction: null, + clusterPane: L.Marker.prototype.options.pane, + + spiderfyOnMaxZoom: true, + showCoverageOnHover: true, + zoomToBoundsOnClick: true, + singleMarkerMode: false, + + disableClusteringAtZoom: null, + + // Setting this to false prevents the removal of any clusters outside of the viewpoint, which + // is the default behaviour for performance reasons. + removeOutsideVisibleBounds: true, + + // Set to false to disable all animations (zoom and spiderfy). + // If false, option animateAddingMarkers below has no effect. + // If L.DomUtil.TRANSITION is falsy, this option has no effect. + animate: true, + + //Whether to animate adding markers after adding the MarkerClusterGroup to the map + // If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains. + animateAddingMarkers: false, + + //Increase to increase the distance away that spiderfied markers appear from the center + spiderfyDistanceMultiplier: 1, + + // Make it possible to specify a polyline options on a spider leg + spiderLegPolylineOptions: { weight: 1.5, color: '#222', opacity: 0.5 }, + + // When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts + chunkedLoading: false, + chunkInterval: 200, // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback) + chunkDelay: 50, // at the end of each interval, give n milliseconds back to system/browser + chunkProgress: null, // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator) + + //Options to pass to the L.Polygon constructor + polygonOptions: {} + }, + + initialize: function (options) { + L.Util.setOptions(this, options); + if (!this.options.iconCreateFunction) { + this.options.iconCreateFunction = this._defaultIconCreateFunction; + } + + this._featureGroup = L.featureGroup(); + this._featureGroup.addEventParent(this); + + this._nonPointGroup = L.featureGroup(); + this._nonPointGroup.addEventParent(this); + + this._inZoomAnimation = 0; + this._needsClustering = []; + this._needsRemoving = []; //Markers removed while we aren't on the map need to be kept track of + //The bounds of the currently shown area (from _getExpandedVisibleBounds) Updated on zoom/move + this._currentShownBounds = null; + + this._queue = []; + + this._childMarkerEventHandlers = { + 'dragstart': this._childMarkerDragStart, + 'move': this._childMarkerMoved, + 'dragend': this._childMarkerDragEnd, + }; + + // Hook the appropriate animation methods. + var animate = L.DomUtil.TRANSITION && this.options.animate; + L.extend(this, animate ? this._withAnimation : this._noAnimation); + // Remember which MarkerCluster class to instantiate (animated or not). + this._markerCluster = animate ? L.MarkerCluster : L.MarkerClusterNonAnimated; + }, + + addLayer: function (layer) { + + if (layer instanceof L.LayerGroup) { + return this.addLayers([layer]); + } + + //Don't cluster non point data + if (!layer.getLatLng) { + this._nonPointGroup.addLayer(layer); + this.fire('layeradd', { layer: layer }); + return this; + } + + if (!this._map) { + this._needsClustering.push(layer); + this.fire('layeradd', { layer: layer }); + return this; + } + + if (this.hasLayer(layer)) { + return this; + } + + + //If we have already clustered we'll need to add this one to a cluster + + if (this._unspiderfy) { + this._unspiderfy(); + } + + this._addLayer(layer, this._maxZoom); + this.fire('layeradd', { layer: layer }); + + // Refresh bounds and weighted positions. + this._topClusterLevel._recalculateBounds(); + + this._refreshClustersIcons(); + + //Work out what is visible + var visibleLayer = layer, + currentZoom = this._zoom; + if (layer.__parent) { + while (visibleLayer.__parent._zoom >= 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: '<div><span>' + childCount + '</span></div>', 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) { + /// <param Name="zoomDetails">Argument from zoomanim if being called in a zoom animation or null otherwise</param> + 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 () { + /// <summary>_unspiderfy but passes no arguments</summary> + 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 "<i " + iconColorStyle + "class='" + options.extraClasses + " " + options.prefix + " " + iconClass + " " + iconSpinClass + " " + iconColorClass + "'></i>"; + }, + + _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 <http://www.gnu.org/licenses/>. + + @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<span class="finePre">$2</span>$3').replace(regexpPost, '<span class="finePost">$1</span>$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: '© <a href="https://osm.org/copyright">OpenStreetMap</a>' + }).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: '© <a href="https://osm.org/copyright">OpenStreetMap</a>' + }).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 $('.digest .filter:first-child').each(function() { + $(this).before('<a id="nearMe" href="#" title="â¯"> <em class="fa fa-2x fa-street-view"></em> </a>'); + return $('#nearMe').click(function(event) { + event.preventDefault(); + return navigator.geolocation.getCurrentPosition(showPosition, function(error) { + switch (error.code) { + case error.PERMISSION_DENIED: + return $('#nearMe').remove(); + } + }); + }); + }); + }); + + showPosition = function(position) { + var coords, url; + coords = "[" + position.coords.latitude + ", " + position.coords.longitude + "]"; + url = location.href; + if (location.search) { + url = url.replace('near=', ''); + url += '&'; + } else { + url += '?'; + } + url += "near[location]=" + coords + "&near[distance]=20"; + return location.replace(url); + }; + +}).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-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.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-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js.gz b/public/assets/application-624ae947c8848388100e86fec4ac512e8e9403f71d7379bce24cf09d1d30d045.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..32506e2abb1d982f5ca9f8fac3d7d9917df54aa7 GIT binary patch literal 454170 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ⅈV~@BmCgK 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¬#Y_+ZpM(lGz`nf;SDS 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ⅅ$ia(? zWQc~xQ{a%)a}bVVisf#+LC0(|5W>>tECOm9?6xAbudc7}(f_-zlglI(NWWJO&Y=>p z4=1HQ&JrLeiKd6>ok85}U?6IDS=qd~iBpu#;_gKRM^)=Z3}VVKVvjKb4mD+Vojzyk zPy(^M(cwV0q<S4MDRx&5V+M)}0?~qgz^7@PgE&c&<|}TGYEVS>ZY%WFsTANu4Zol? zpynwErvhm(ic@%!o=V2kC}T{uu9r$)0H#{=6;r?P)fZe4`4c+w0Y$Lh$3&tbunX{P zVW!D6B0(a2(lwq#*?1IO#da;=_Usqpd_#;3YnuSxQY~#c*bb9{37A~v@@cYH!b+Rp z04a>tZ*IcmCj4(XF?9mW)OU7P$uMEHd7MvTL5}WHSI(!|Ml>49aa&C=*4BzPRlx-g z!x~PcgiT;92yIRnzCmW-3{YFuhSXT*#xK{`fB}tP1?MP6N|M##;3`Y|CRZj-u8N#p z26A~*W<(hc(BeNV0nY*QJ<?Ap0tZ-74E%C{>~|nBAbVQuWw_U6ZRA9$S991mVKyGu zfmH_I0^4}}F9A0m8_-d8xo_z^DRm1Q?2k3GX_g+C57*aMH$uKOUn7-FLApThKXg6} zQpBtQl_##2nP%fy8C;E1IR1y_Wj{utF%5GVYcx=MFn=2D<;;B+C;4f2oFW6dxk(RD zjTmr2xdqB(0gkL@MU+5Gvb_N+z*ZSlfL$iEjCDf*i2(<}E0elQLS5w`D`X@q<Py@& z&0LH?vRL#y6B9R1kPmqd5@v~X)tyY}hxV@z^pwCzNj8KR8SLSk8(j3OHBccq)ZJbU zW<U=>%>aV94wIP@qs3>O7Q_Sx1||u#nEF>h55p_O^L`nYKw;vtPlSR^Sw8R^SiYod zzPY|8d<@)m;d#s|_y)x?iK)h%4JvQ8cCN2?6t)#GE%_jm(^5Rm_X@dK(I7i1PWK|1 zA3+{*%@{CP>zhi`ozBgT6oUjS_7RWp2=8$D&OVh?TFhI&PM);!ux6w&9&Ze?m~%M1 z2sdpqqHDgRC^SW2&!%{bhrC|LB+zXtjYx=o@OLD$S9P=u>l?Jpq&d8xk?))<T_Ru9 zk@%URpv7FJb;Kxu_!k$0L-0_Kv0tZ0tW3n9`U**0STkj)Rs-f#tS0ki-`pRnY~5XF zbs(B|u*hm$v7-$uUek1Pis6W2;L?cufIT{kR&m~kXWDzA>TdKBxJdQ>2AK>}!R;M( z<@~-P#EJ94A<TYw*fplY_(am?!E9!|FR;#d98zO%(-@`EYMa9t3Lw1nX~4hXl{9TJ zTN7AJ#OKRE%1{2GAz3}MPPNNHyl?98f<7;4cV&M-<vAhh0jmf=;z@_KD(CH|C088J zGFTdDk)DQe;;2`SBp?z!h(|}E5O&cs;Il~PpbY46if;ohoa~$iePqjFv%&Z3)&n8x zvV~{>KUVZZ*6&^d>%D^7{74;ZS^X_jA7W3mx+mE`f!C)nBPmeHY#>R_UiviKOC^^f zrZ|R;ZM68_RGi*JYHp71EkKWuaKF0Nn}0hTFDwPF1;iTx#2W{Q&jxi%iZ>B_53aBI z7tqFvX74DaloH;nsC<Ra9JDBX&u?v&TdmM*Z6#Z+pcU-#aT%3^ErDXQbTZgV_}JdQ zN2~x7=V%6n%=P(g9jbg5r~+#)5JKG^A=>OeKvqRvBLLi=H9EmRyMR->Yl<+&-G+8B zE{$(c8wVP;V1)d(#K8g`nPqs#0OJe#hAN#q;EIfy&kQ}n75OsvtG6TqmuVY|P0Mt@ zk@!+ee$f30h5RFAoPoBkt8lqBC{^S5dnG7xu{<mB_VD(uWJ%TEtyM2OMyDO4(@}z& z<7cbeJC!Ao;)EY>t#{cQNV3;cXPSsnySht%x-9p2hq{;dRiF1&p9Sz)4S<@feP7Sd z{gPIFnclH#Pgm`6RrZLixrDPu$j1PVZEg9>fq9zHn?N2Y?w6J11?i-?6#_m_5Q4Sk z1q9;sse!=wq9DN2=~e*f2*du@l@{IeaaYs3{-8Riv-H;9sT6g;w*2Mb!0q?I>2H)U z?fj7StJ)EesA;3ZE)<j{#vRBHE6H}!P>MhD(ogOuTk(BlILSGxsKGzoq!1drm%!Bn zVB%>7^Up~Ti`v~nwL|JMI>Xz!%i!riKk{HVH;n?TN&!T4dDT;$y4E|ij)fCzD4XMx zYbYz@2?nCzTazpc{d_aTRCk`FEHUA&%Dyk(Nj!m{zS@!WUe=2)Rhj70D1+~H+Y+s~ zot5$4XlG@%vohWXL0>^MC?&3`0{WFi9Zb-M`qaFc%os!5G9d2lhWg8D%YXsCAkBoP zpJip4&0odia{XyXjhn-u+8?sTd$h;9r7l8aPLr(L(5)<K0NB)vY@doACtu?=WxDEE zlpO>OyFeJ4?5Vxf;=E1<{{gIu!(cw!M-1%0$8Bfvoqhs~3cb;;1~`DNAE0SS(!Km? zpeGmQ>&vGDJ!7bzSQ#Z&SYl<AfK5ymMd+ex51<?%7{a7RHW0?DYM2U;G6pFu1{p$= zV6Q2H0kDvgVudeP_;Q6W6*U4mG6xC$JkDp);@{G_>RWfMdaiVw6qEq1y4v@Ij)-W$ zJ=rB{$lu&TNR)MvkjRT{Sx$e$d{I*KlV*82J&cNy6hsz39Dv9$C`sQ*dMf+#8?C0= zHwA~^h|Pb27(@Cg(x;$}jP4t8Mt2<EOJG#7sq~WC9~f@7@2AA=EAo^OPfRcI(gV4F z^IJOMmqC~r^?+o>R4?OtnNg3wK|Ok@Xqg6hz&tf~oN(jL?1>`WN6hUATDOR5)}*o? zvAZ6yX6opno;%cda39ys{E|*O+~NIl&!AIpd;{uE%5ZnGAT%J|N*UIzEC_0evPJnm z`|iY08xGtAq@vPhS?H%y7QpW9a^J_YWD~j5ZBh9*vX#d2svljxp?x7VVJ%rwo?r0% z8|A<;pls;XZiPx3tzaeD%H4*E)1y1ROZkY0dbe3o&C_`AQXZSHJzVZ~ntZ;#)&efl ziT(>kRPRWn>J<<~U`!P910pgemcZ1jGYWwCX+RW&6u?pWbdd2A?GpNyPUu@Yp>H@- zjpxz}=V-WPTUS8MDxlKwK~N?PSIST_eaRUj`iNkr3?@N)r?c#T5MT>l8(a(88eq%p z8M>=9@YW~xZVcCNv(VYgr^0Y8Y}H8^hKlVTT@TR=h3@wH|A>1N?zWAjUHGp^m^m6i z0x43C69*K+<1L9M-o{Hdz50A83Kl!20EPf<F_QlKS4;0`P;%zI_nw(pM5DXWYjst1 z)l*z9ZViV>)a`=VD|TLcoCH#UTTgoPQFY*(s!?r>bN6HVeSS43W!c+`1dr}Z5a1I2 zV9XEo6Z<DO97+7KdzsKDcL%ok!BX$_b6nt^O-g=%Z!1>Tb$?jZt-j?|yDCk+jd%5H zH+og7X4AL%cc)4u*jv<Xd_h6;MJ!6)2o*cH|Me~%#*6B6%mT<?Rdo@{O4;VsdED$n zsbrs?pS?IB68wrkR-8RTy@tDA)m@V)DL$&^lqfuywTrFRpHeNUGYL&%vj;EZ(0rKL z5X|7pO|U5&FuMgUYT3MOJO0CAOK;z8zi7c6nK4)5M(%}~iqv}n><n`dAf?Ba8gy9n zzRhT#wIy|9)5$B>$m&R`8dqLNp0Ht=y-V34NAz7^y=UW%Usy+pR&;@L^<5ud$Of>n z3lhKf%=6?99}ISz{jUatZ|)C<-@v2_UOUsO=COKpv`=|tH}pI|iI4RV3au;e6(^}q z-!tiZ#R<xe8<fO<SR<v!M=IKZDkZ7uRu{)hIm+|#GHy(9nTS_nS!16I)<<R4Tu?PY zCaQwSolCX&jn$UUfhFS1EH5(*R-HICM7Av68;#-(zm0;;fDGc{-%5)w(x;+zNGw}t zW{6v_CAVI?-1<@`FJ&^ye(%^Q;QRDSj$d}%gJqDye<$hd?CX2q42yeu-3CdtwR-57 zhmY(Q+)MgZbB-ELPANz5PTVbkX@?#;Z}oQMx0Afyt@rdoEt6gSyGnMKyUTQzA8^_P zT6ho}UEoA+b$S@~CW(74yxyJRV*5FVE<PCE`zHM}zj~ehoIZc}>-%R9-yXev_vC5z z;C_E_e>gmN@Xa^hJ_w!|yawzckSoBhM@eCtE}@iJq>>=@ibM%xI11&ia3)o%ieB&1 zxa`WU_Ig*J1o03guYKqu%qWRL;Uh|ufqmIpcYnmzFmfY{%LQua_W65B(o?-WNU#<C z%Uz+~-K2b0Wbu#r&$}{T$|uBe@5i+FBT$PU(;rU~`_A<TzF<Pzezey|YUjudlbr9p z=;1WyD>8bR=6F>`mvvG?JcE>bC-PnoOX^}mmnl+}w=}nTKbb~Y<6)Y1^Mid1=`$;M z63KR3+=$j<3f7fxEG=?zeLcjH&Bd<l*931@q{MrQ7MpAHZi?3}^4%G{!<oO^CzNuu zf4MJus`7pL#gt}UrJt$vsbU#_OMhje@h-hWPmnBn`s&RO*}Vt%zll=AK4gEU?t!1h zzvcb=`|7mW{Sy{W`cwQ{+P|On@LyOQN&0WD`&Xy#ZwG^Khxa1eCi|b(!5I!z_u@?) zNiV|BpFj6M-|JV)^ZkRtV6b0*I**Xe(zX4^B50}fsY)k6T%t%i)D1{p(T;Q#xm=LF zN6E&2K$_8q&RmDrbR9n1%j0q!J&UsFd6ewMlYEJn;xMTZ@CcLsdIUMd`1fWU{RMe0 z;lD^}u4W+WJ|AoiA~JSpn*6LIj8>n#*;4@$^h0u@{FN>EQAn1y{za1u;FGp>6~4(x zT0-fI`q>1=WcF?;uxvT`gpe225(>tVDvBPU_*VOSrd5-FY+~gD0&*NbPs+0;Y*9#9 zItg0`=mudY+=D!mCSOcIG(IYuc>kB;^e55$&whM7=zV*#mt6mIzmKslV%?-Z1|@%Z zj^9VZFdQW5tjTNWBUb!FRh`d^2xKadAn)J%hC1*Np%P!n)=Mwtbk*eB+tLjK4ZJ7m zoEtlxEh}``NT>XKUQ9n$SmSnu1G&O~L<74z-=52_))*yMK#?;pvY1WErn-QH1q`m` z-cH(!CcS8K<Tg#8(76FOjPacMMU+td1J7R6_%)nEy*yTr-@JjHwG@}8b5P)7IHZY$ z4KMrX<%UiyoAeV@^St`&Rk1`=AzVSS{x$SY7JT;p$<dpKkDfh!fA0wz@Pkx&4*z{Z zV~6bpt*s`#go*;5vlc88Py9u7DsX<%&rN;_WveEA#lOy*^qKkSD+?)RXGbPJe`6=7 zr;t4k7ubFVtMjehhZis3zkT`c@sH4hQ)qpJG3i&+8Nv3Lky9>9eT8237BlVaXao{V za}>&%q<?X5R!#bxe@&b8agz@ZrSnbytoS6R#Vc`H%wOZc=ua|al6?Q`6F6|)7jWha zkj3y#lD@&!+Yu}^VnEO+Ar6&enWVqdV0BT<>+9`*!ZHT(n8;Uee*WP#`U0g-q2TY( z58E(sxxQix{jL_AiBD*3V*>l-|2q7X)w9W>*qWUEkw?R5|GR%F`O}Kar<fDLq^*Bi z%wUsLOITgYdHfHFDfo|{pFc~YR2XX;tvM7x;QqMbV4IEQO?neshsejqu@%b$#KlGQ z(EC!lPCaV6eWyf`0eKL`y!kdOnzT4OFEUuIOe8Z{@RImtwf=c<FI(z|H%&GDn9V?7 zK&q6%N@9wX&0*UkEy`d?F~!N=H>spG*_kXbJjfOeI>==g*ou2+*$4G;_<b(xfS;f6 zi);9?27*M}GP_j282uyr>^?)@SCCT6y_P*|Qi<r4odV;98z6hDioB%O|D_&(pq4*x zQW$knPO`^M%F8r+1HJilp8XEg=whBdZGahg*yPXPVAT8lN%gse15$qM44={?FVFJ| zh?mZT=8sYO(#!L1VREb%QTp0@&klSh4||72>5C>mj*ecudiOR;qc=~VJ$;NnUcP#J z^zub?l0Ip2U|s%b(C_+}#&&T0vGLi=$RazWa0nX1+lIK(QR<?CwTVtyO<%U|Ev$I7 zVSwhpJbLl=>Ff7ze|z=x{qvXa-aN&0D;pIH<zplA_(fw@xU@6HxK0!*;c%e%^U)K5 z8{p4|jrCxIA4l3%-Rjp~agvjXna66x4;x^zwucFf)%A7U$<>6)eNTdVdiOF%P5SOj z%e-vTpTD%sYh4BxzySTYXudO^X<CRICfc6n_-=EC$9r%wTwf0;iG$78a6YT4YR?q4 zt8=1`<V1O$Dax~m-8^pZO!ud;md-D~R7)g0)K07Tj#O{9?}@5EX^!=v9G#(c_%F@g zp2_ttlnc0mRyj*d_?gN`GjT5?RNw2Ftg_p_|37z}T<e}RiGF6sm?tDbp#LtTtiM&6 zo0C+iBj<-8O+1Apn=EEFeMx@`&_AohY7tozoBjqooSrGm?fch;?D?gfL=qBEIvc@5 zsTokKb;|T=yF@OF*J<vpQ$<ch{!4Si@e*@0B+8W&>C*5}Bud|e&f)#C`W&NTt?0$| z^)>4JP06wTbv!^r<w-s`EO&Ow!~EbrifV<0TA|451o>d;?EPqUdOBy5<1grhxq!U7 zVVMzUe3=Lk_==OXB(w&+8$`$HG5?8|NhYA_<;{|;|MTeVbUvMn>BlHt%I%AiC*(ta zq1Ak@eOj91-<rK2nmuuXdJTN|i5^ORFco2971~8V;O6PrVLxryeO4PQ&g1O9e>cwk zjcz9D26Z!0m~J(5WFb7X+!pNShF<Fy<5Y#Sgd2|S{AZK?2N)NT3YbBWmLgw^_&Cz~ z3pnI0$TOMp(tc2AXYx^^lF`!%$j7omA2$thHul3y=aqw?W-8@JsI?Y(yGB@^m4L<i z(oY*#VlR3M`#Xyqq%&)SFNJlr!QkSyv*}qo>i47d5&LOa$UVZDf9Bth1zzL#CE6`v zA|hvEKTFsS0y&5#tEP&`b<oIMeaZCyEQ-(Spb5QWY3E|GY6^~agYY4+b&^q$mt%wn zA^Ul`k<6#q^1U!UnF;q)>kx9RD=`BEhI+OrO363OiGm3W)O=wj?0W<bPLBGC5fKVr z!(7fjh2}!J8jT#0DQVmyc9?SuMQ7tTb*yw`ATYshyxoZR8>=y2R`obB+0lF=*tj#H zoldkThJ;tcZETR9bW&fLlHlDlueoz!&B@?Ud8oh%P<-BcU7SC?T*MLLv;9w<kV8oP zKZMW*GB3q8wVgc{w=~E&#+>m@PuM5MYA<>_kYCJ5MhFIJoIfJZRoVUzm>AdN8Wn|E z6eS2^WFh;gZ5C+N*!~_b3G|tw8sEn;Djw+@ShE4BjMzJ73n&dFC)OZ*aK4r6ZxP}h zLdg6)nU5QL@n?Y?xiB@J3kQUWqDf)AT*UsD`-<*#!>^=w?HyVYYKLjXC!tW_7L%!H z*hz~C)>!`S%U95)=!2NUnQvus*<VHSwh?<Rdh#pbkmzHe|6EL$Rb72(`VZ$It4AZ$ zo)o0?z-sHhXfTdlVssX;G=`Qd@{O>a7KVetE-biW92fnkgz|TmLmI*^rA7axYBgSI za!2?xdwE0=T*O%x?Uk_fRsW=C)Q#tVwHA(B<82z~Zdf81HSJT~7|<#k-|Nz&w?IPq zqGFH^kSpesqy&B@{s7FYMt6;&C#X+fT&DPIjlU9g%wdLmXQ3=mDJtZPakRy@4Iqr* z5M&P8*Jrs#EHJi3Rl^{!n=v;SO+Dop&kI!4@`s{Sr8d<9O@%4Zs`-@&gTX=dcE@kX zuNSE29F4}5no{fD|Jm4>98ZP9_KEBQ=@Yzv`j3<K(T1#Su8XtqOmZ%$4|_w|fIP4k z=$)PP(s=^T#d*G{tw*4IZlj@t&*bj8?TTa6z-e>*OrSR${F_G@o(!EK+`c`7Lnz){ z6BP%JuTeO1HgP=_?pU5JC+F7i=zMR5JCI%Z{xT<aZ%9<DnVcS>q6H3Z_xRMLC4Mf@ zo<QWWfIcUR9IcwUC=0!|<g*-z)N1p`V$BM&=fbAtSnHL*@e#tSqd?|27ivJ#N4Hk? z*z{{Vj@_P+pLks~zaZj2GJE{^V}T9}zzo7L=ovb#&eqAuT+o{@yb+$I1=(SskN+HR z6i_v-Z6K~LGts921N)8ralG+d!>bv6df#u!kT0*DIy1rGjlYX-{qEb>4`00b{^jfE zSt(L_I6^&OR@qPQpT2mK)dH=vvL*c?mNc6Pg`_nT(qTPY2?nsr=CCZQ@0Y;XWK;b4 zXfpkny%#A)a>UatI}_+x$-ft>JU?CtgwW#OALxVp`&=-z7E$}`6I3e!ce6FU(Fav_ zNzbnoGWut#L_fX~Xbpnr&D-L#;Vq5nAVM+NteXsCmCR1Z;S<;(*{P6OP10MDE|%mL z|B@GD_7`@mZh%`<DbIy+WjTALS6TL$Q^~aMjj(Tsp9;smpnXG-I9P}xc_>)Ffgmk~ zhw#GC6tN&SFYys7sH8ZqPv~ncJcW<KQm8O?ge7%7`qFkD1={K0O>A!Lk=s}eN<t_b zq@_CkC{8%rB&CPr2@q|Cj(`a_b{BO|U>IOsaZe;L$leOr={>vwe;>hb)F4I#BO<UG z5DcjL>ZFBM62x1Q$Vlb&HGD^3n9+!$?`U3+P8+hM%8eeI6<bj<{;{Ff)oGPv+iy{! zqxAvEK3`vB**P#4zQzO3TQO$!&*xcD%t;3{76H{rRdNO{!M`)RBz%5*n8+kD8l%dT zb_o^<tBIR&?2bT_dmT=HqR|Ecc}do#q2_pBk$pgWZq+KF{jyEK#zZ_CIf-m|lkT-) zJ7}TX$9R8l5d9BD{AwxAMLC(v3s^6~<OLr29h^c%?;U9i%bgwIURh0de=xwB<n_b* zT3oD<ivxNGt=rkzw$s$Q`GaJpcOoxXQwl9yqB%)mR2tRaXwo#3>5SgejFG%+(r`MX zJ;<J9zv9}#m6Otf&FNo4BT)-DxAwu2wWE0-h~Pd*>%8G@(8yXy+gUrCL9J-fUeRIY zyRBzOt{!;p)@4&zL8h){T2~g~>_={Pb14vq^IIzY&}*gDr^yrHT`J5j4OGECA>Kyq zYQ4Qzn@xMQqqw`bL||{}&8%O-X3K;k0T`LnT79%xtTbMI0#_fYRAKF@Rl=HJ0~q28 z5^!iPUP;Utcs*{V5YDl)Eyw;geUC*Jgu{m-w51k@l=KIo92+c*5xWs|9y&w$Quqa4 z*ae=N0?21>nf1D5l(tw0*DMqMY*qTi9SX@)JYnVF*iVpv&zSjVgaby=-L3BryFRKs zeHrNdFGfqWt)*NA_A(`|^4C=T`c3JnfVU-;QPFQRpd-(XS=G`jNytq0i~eO#$W-(e zPIaE&AP>wQW?AbjZy|wrksn2V!8_<+x5E-8n>ORFSJrjU_x9M(8lt&=Qp}slZ~F%s zu4eqH4rF>l+p%#^z1sg#SlNbNwu8a0&S_;k@Und!$o4B9AoT0^F|J_KvT^LR6Z4tJ zL^c~k<~lz7oRl2iJNV}7`?_J6rt^>0kNqCy+WmTv4QR;UiS%bdw?g`IkcRGOam=7k zC$Oo^V*0@nc}y0yAnZcJ)KaPa<mlZ|drSu;1Gv$-QWz*P)IE{dh6-xrentt%f0pzX zu$)mm7-pw_{kB0k0@nYjAlSu6K*C)5lfBe3#GC1|;s{gf-D~}hj(hvn3oRtb{hK}E zy0bq>2zZX<LklXuP}(ngZnN)2`eE`BxDP1sClvfBkium@h*Z>1FM*B&^^*X2KaqT; zXg&6Xj{u$W2qca4SCM~I4$D`|l@Ha3r$2knG#Hpo;g-#{ZL&ZNUW%oRL{*yGu9no< z90s$0a9<Ug)F=kMLPMl{xUY@Lff4TCPx}Yj%M2+dj6nWM7}qnFc40-hUj90>Qy5Xd zEDUaXL-1q~a}O%>gix&ugaDx#@ZsXD&S|7X7`sJ`1`^VsxWdTeSO)?BaE0xP@Ws(t z{ycU*oZ8^AR579Xz>k2@yY5fV>uFl#!{XkqJM<%QSg<qtdze&$gN~hPh{Zm-G-(%a zoog8GntHzhUQo>i-458()_1^s61-h0H2zJB%1ODZw3n5dtzr=oJdA9LJ+O~sduWru zava)qA!CPC$?k_-mxev<zc%bOfmKVMJ^!{hjD*U~uBOX6`!$`i)3{VUk^7tceId%< z?Z?Tb{YYSWb#{D$FQk)>d<C@ZtXR60YBct2+e>&mgRal2`C0ZA(229c$%&!Ri{<Zr z1^R;c-jiqILNwWfdk-FbJ$OJhzbPk+Y)C(u01Yw!^yBNIMmP>2`KiGM_tu8U7Ye{v z4(4o9p3M<gPoubU&vT84h##T>c;>yp&pl>~5<_V4(~tS;3}qr4hZ)Kv485iwCAT=A z#BM_B12{8WHhMes^<+q=R#?i<RZ?udP7LCj=wlBwwZI3tJLWjHIQTK=N$?B2V0Ly| z<<<A_E;#-rRynZ@W=O9vE>VNyAI4s{hLa~7hOL5qw?=#7zZ&@g6}j74LxG~YKdkP< zWY}hxYxvGnwR;zskk;B$1&>}QfEkaproCr!ieslGydIDsbKgS%p|KM+#k4kS4K#er z9)0QHMn0CZo$9;RTo!n2nRREMd-DqR6pY3;#>j#e!Y_i^OJINu=w4rvcSQ1~p+#>H zbu{R=Hz~h_4+6_l2J@tfoI{fOdBgb=dy2QsKmb#uX6<*glKf;IP5yq?%JFJaQs^Q2 zjFJT0=ni^MV#<=+;<%>0rvakn+b9A+v--R16x?z=;xQgO8$h|RYY)XHy`mWh4kmN9 zS}L7L@#(1S_zr5J;<W^8vG;%^adK#7W3Br4=w6X3ch8XjmD+n;yL|D`LxpqIBXU46 z;~V8zUg>1iFULt=WA+^+gzW9Zfhr$X@|)Lml##m-T}<;@Rbn6E!`^VeBsWeXJWe^~ z2On3&1=OCyqMFbpA~@3wV(^*ty}A>rd4>aPgq*%`S6VkHXe6h9#}<Z0kskrcTtEv1 zc8!pzuCH~<_4V-}9h{)pYUQ(_s6u(o=<@gEHUciApstn)sf6RI4FEz%1?C@H@H{dJ zRYX++lx(;^kX!9avJtLRE{#^D0+p3!ate2%myQd38=|2?htzf!8=0Zfmr<%EnBCw2 zEUCj2=eu&cv3l83#QAPo9>+?<Adw}KzC?hC130K$m;!-g>~jJ|?MG^gdE*3D4t*rJ z><W2|O43K$?E{5vnRg?0>R!ah$GvX{X^-5BkH2OA;uAtT07~h&!~0atkV3QF(<>;2 z6pV^HIFoXa)SBOxcz@Dr0&)LHgS<}Mb|RmP5+3ooBrP*bq0ggjk3eX%Bj0P)BHr%Q zy9>u7%e)Ah#9)rlbjW9eyAIvOqXwge+0TR=^{ZkaWFi7^Uy(?p_%=A53}5jE-lT~2 z6?_X^$Bkk;M8B-it>O(zDH1@?44D!Pw}<wKC07f@-ds!;P<4?;QY+nq_VqAZdp$nq ztRM-+77aDiH*z}&l9l(30vfB1dzPR@ALWo|KxQXP(X10TG?sHU`TPpkkLG_(ucD;2 zDxA;^ALeU&*`m*=v=v4*R!m3P)lH&?<NA7g-6WxP%_T=R%cQ*jH!c{TTEVd*yi-h3 zE7~)oGXDiLRfYqs#*?g~kIjsOy69iRn5~m^mCttDhvfvx)I4AI4VDGaF1$sb=EMG1 z2kHBKx;qUSh3D~Vch#Hi&i3MF+#AAazWW~jH{YEn`|-gpB(Aa<rp*%-`%8m*4wIfx z<6j&iHV4%3Ak#kZML0g6<;X7G*YS6+K}UHfQeUXRo?ifaagi7Cz`A7qU`K=5jTiAn zvKyd=*rxpjT})l<O?RO+XOJ`5e@~U3+cxc=@)$J<y^CajnyyjPDVOt@R2BL$!^cm% z{Rb}Zc%k-bjG~^saT6UbZwpQ;H7DlFz4K&$od#p%c;fxAe;+y`lHE@uahMM!km!5b z5~S%sZH*%xk_n<m4_Vo<G~2v(Sfvjzsrz$S=MxL236~%d#@T)-91l+b3^WfiG_s)b zSG-$M<WoF5wFvfJ!asrBp=#>Jk4z*tdhjg%;<J>h3ZA64cpL_;^-lb89G1b9bo$|g zp<L!vI0E8+Ry;QXTeuRfp;SU!R|QJCgSOt`Yf9c|e~+SDeM!URkV(x@2TY9q4rg<t zRJiY2Jr-=Y99yRXPS(8m1jh%v=S2QleHf}a8M`72uRk^8cWORo3pbzN{jW6tyHL$t z&DV1h+!<2;SAM9LQ=zbPFs7HaWo!n$45%6ko8P0=uMYr)i&iF*86h4LcC*%&wLU#e zy><up@=>f9$K?N*2&6mh9q?6K{?G?F8eriaoZfY_e9|GTuJYIM@q}P;$<iF^a3Oxn z<b)aAmEmER$t`m>&ude|GJ&)H2q^dE-W(BW`)l~SPDYq=xMIxS>uY%UZYA-SVI@xc zmpP*8V~N2b{5zf^p#Kb#ivDFbMWB6rAkb;3X)SA7V@+#W)0%5q=ZM7*-=vz>P}3S~ zT0>21sA=7!2Ln6J%fmZ<rpcz|;utukf}={HJG`r_wWHwi-g9g>8e265YY?Rt)cbDJ zjp*3C8r)<qn4+HC(FPqZIcv~z$~BBz;q!n9K4lA=>h1vD6hi5afUL#Yts3VPh8^!u zwNQlip5<7LG1OC&F*N*EXNKmm>i~zH;*}}heNT($O!CL^?Yc56A-4j*P7JZ5Y^mYg z(}Tf49sC|s@3d-3YV9b!s^(`j(E^cj=vSdQhxUD!$JASzDWgs`q%83cU3F970A)a$ zzlc?zKrkRVGD;j>>P<SYrp_&yMD|nklit46(H^fF9vt8mze+!&S~<h;Q5ZM~@k}bp zFTq4K_JJqQ^2NgsCNpao7@lX4UKDjbIWMxv%0ViJdbPk{_r+O1l8Sb@zST8CtK!$> z=TWPBg`ztrHNlHL)u;ZAt$~1yzhK(YnFZ`%^_okl3*#8CY~g$hXGOxz&T3x%)GUf; z-rN}Dh)|U~JK-<U2B3D|o+A$S)~MXA)u8VooKz)+=Gq-H?HKJK@*S=L25;w8aDB}l zE8}QUEH6Y|lRQ?GqBx5vt_{AC<F~bf-c7_DulmthgIB5w%@b~>Qp326sZvA5&SqAv zFR=BIgp(5C^-6iNEph<C<r*3VwK@X>p~CD;D-2?cYGKi=&d^9-rBvlPCE=<TeFf79 zQm@W3nNC5lo31Tp$Q}W*kyOLrgxzzss)ZasrCk6D*4Cg_CJ{BLH>_?z7+4GpBovq% zbO0uW<2tkDCjGwA@%onR)6P9e+ThLd&G8cb>hVu*CCP@mll1|=9Hljf4*HSrJOe6F z(XtojbC1F>!fdeW$(6qJ6{-`sR1sn*iC61vm>wriD7nmaR%u;$+BOYRqklw>k8YZA z@eyZjjqUTvVoPV;67|+;0Sw93vOt@-t<&|^1gPo^U&)&Y+$ziUl@qis_^mXY<><^9 z`D`eyyg^!}<qO6pqcwrIBwNNIF+`ix^{ghBv3tU$D^F{vM;3`5UbHN$Ignt*UwFy7 zHa^N_2zFR~%H+XG4`wD-%K55XhIQ*M(^|l*5)<`tE$?FO2aL=seK8X=T3W&_>O^;) z9x=qJyME<`zcv7%Z20KRuhN7%iOLj0MHr&HXv`KAgJyz}n;ea85ux5L+EPi;USnKG zu`0+OC3_L)CG%z>nHoKpx<C3fQeDlFG;WR_AZKJ&Og|odct%rTW<+zs`iP*|+;KAY zGpMV(wSVoV6*-*mna-i`_FZA!YZvlyGAxTL5G%*Fpdja>xB3?beJ2c!x(x7hs8BO; zBHP(gi|D2rx7mQEVr;K6S;zJDAPeQ?@A&$Q+rA^uA@{BNpnN&pA7p{_EL4*<-mPm- z3M$D6>?qe4N)jKnZ-L_kx@k%1vhPMjH+}UWc;&s|!~*J-_kc71LfN`=BpKb2^d}0$ zMyD(xC9$Nqc^<kJmnKG2l$`fhAX&dh$rpaD(=*_;v`&ATzL$|N@%YClz3}q3ZuJaX zGpCr#mcwzmAJ6xPC`j$fA1GRmO&qauf1d2lGb^kar&yreRjM0-L3@*1gA<Xcr?<2v z1nUbhvP`mYa;-y*EuW<eVCw*ruay_zAPHGZ4ee9~=E_*>W*cu-3rhu(G!00F2cTZa zJ8*ZoB-Te>l4brE62yfmX=)-axl_sPY8IzUrdBSbyg^8pt5I*EOoq+!4wVgXBJKf@ zHM)4+*;mTUr-Yiu?r~8$H0^%l;qQBsW%XR64|Z5fp#hM>!{0A-e1e<Q-bZ))Qs*Zm zq2fz|xY;$I(JP3<pq2>{%`z0yz=8hl>Pu_hop=z^=Boo&`tN<fiTgmYIOzlJLpdO9 z(QUrHW2{XQdp0xXq~z+kTjpfHErtX2-Nc);;)jMme$xeB-?hUmoOlcEzY}r(_G;ud zeZrM>;I?;Fqr(r-l>ZV__=C2Q(x%a)+3^g`y?cFcqFv*u&N_`@bi2B+9aY!8N_U4i zDy*}D0(_#qlx}Z)s}|o_%r+#mnnKF~zC=DzBxl~`YvhRJ(Lb+}JFNZ<BgApzI@`p{ z&i&lR&Ctb%hg&Rz_Byu9ong^*FLJ`Q8nNEs7P%WWm!yQ~OE={&6xt_q5UtMETgI}R zYI=&kx=~HuE|IpYX73m0qTH6RSG3eDlk5(m!W5FaGh@CEJdCr;9m94sX-)~?NXvP; zCJ^@C+R`4ooDvLC{MdfMFs|}VVZW*7XQGfV-rFxEN;bb~x7f;w$!sZvnbideA&hA~ zB8+Y{IjyVtsv#sy1Oq1DCj_yU&mVwFpUDRe)}kuNO?KOuoj8#=@yz92?Sq>dtJ!KX zG4^D!)P8kiOqq(;QaZP6_NBxuDV7%3<4C@UTD#mhgD4Gv!H`jg?p8gGnA5K)@UEUs z&Z^H{Z#f*;y6ZK&N_4$#stPSUx?V4;#maeUB)*md28aN-c>CsqW*w7F@JyUxJ(S6G zDVT}ebc&GSd~&sET&3#K(Mpf(2fVBkdC0onz3o}R^z(&}Eud-(^^tGfL!Q#gt_E6Z ztXRrc-RdT(a5Pq|ufp))s?rWF!6}6eQU-sb(-ctNB)Ga$WreMoM8u%6`q|O*mX<|F z^suf!o3_|vB(N97XPZp})&?Et2%2vp%IPd=^)T|hsTf7NP^0y<BhqrK9=?4H-8+)A zTJRq6am$)2am_j{a~v{)wA?Ik70U}(r-7{{e5=8wv@9pF32&`Cq%2!A(rf8YppLff zPTRxJyL~q{9kzu@hv^WxxY-i0r>l4G=3D3Yo1)pez%!hd(bl9q+roL<B5=ZfqzF3e z`Q7-3?D;|dqD0Om>oI;LvZrDsRG3ql<9Ow(Cz2Cdp^23w9ox0b`<8Ktr(dhZmIfKv zQiuZl0~Z!?BE@9`%Wk#xu~;wAmv2i#H{oA|I=8Pvp1gd{5fm&AM2)cJs<yLZfS}YB zdC(JV?K?;L{&9Hvj+LF4ROyw8vAIiq)32(0&if5#LVYdd%6JF8{`1&hd9GPUeB~J< zkiFoIa*NUYT6+N-of30+Z>vS#);IAx)CJ`Os_wZ@N?b<4+nu98Xgjo(aU#tp-{rSV zK+s6t@egwC&!MFsVD6a}=e6ve6B+_DE%7p<$_>~>PKX^AG6p7~R#k$#p!a>foJwG} zbct}%^@u&ylnTvkpgK80`yYc+gLT6qH_wTO4x_q@xNPTmvG<%V1&Rcy7@9Vn0_*V+ z0ru!Hn3H#R4V?Nm9PQYM3hMhw#B~Y;k@E62thzs}5?w)^x32qSi8`-szj_T7%cxA( z*URhc>iSxJ2ACQcMXU)8%=A69+Nr^ij>fl+paabHJgVA82313G!-_Om&p;W>gU)+> zjlgxmxl&sUk2TdehK{5&QVDN$cC5fUEc9h-L8KN8QDo7t=p=RO4mmSga7ENr<>5sE zq(I;+C8oAsBB3^yDQCmeoz4r5eS$uSIb9r_kh{lpq7)kbhG6to1+=AZ=ZoXP$;jyw zGd-2N&~|nRS47(UUpY7|S#yIc&Y3apt2<M68c(G?A{aUsn#tld^lH08yR0*@f}>Xd zJj{oKWaP{K`EtC;)6J?kRt8oZl>@0Q@!zVB@n3RrG*W<eIp6NQ)Uy+l8x3=o4@MIW z3_O}JOlfgEIblAHFnR{~xiBma>{qmNp#qB3o+3OBFfq@~;@{cnp-;?OF<<5lt`~{w z3j4(+PhtD-rcb#9&Y<}%?G@;rGh=olm`z@WO4jPMy0jcz<&(;T43&NBZ68l+{NM!B zQjNB%kb~JAg0zB|$Ie^4{g${M_=(T60uJ-Z+4?T-tjr%sX(PR2a>T}XNv7@3NuEh9 zhgtUk4RElpd{YAlc9mKEJD<)*2H4hdoB76(TVh`W1v?!#wlDj*Q+h$b*|7HccD-x6 zzV1s3b9MRNG7}BOR+a*&?N#}{TV1QQ>ChZSR-jEmwPee0H!vWD?`6@^s?vOrMF;cQ zz%|~NefPDDk=yAx>a`^8a3Z~PZu_eFj&+A~tL5q2Jah?sx2cB1tH$}rO9D38pb>8A z!h=@|K`Ra0gCN8*XbdD7Vz<m&OXfCTaK5&6Y@}1RwXcj*p796b-U4rDua~8=wst9n z@+-Fjm9vkOj2}v!YYku9CeAYicU=cc*@Hs+2%w1snb%7fRAW->>|&=sCC8xm(>wN% zXYL^UMOk>OR`~k|IChwqlA3Im0zR_Ay5r%1D#6Q83|$a=$g~momdmtPqx9sbuQ7cs z^?|1?7y&C-T(c*QA9yO8o<Q_4Eu;-nV;Rw?;JMZdwvZ5J(Qa}Da*R@nfKf`h!8}9{ z1R?6%P2Mk)-O@785UCxVIANi;<ulxpe{GZgb`ej)y|{x{aF@o+#o5?wc45;RBp^^2 zvg?C-n;pDk#{85n%NxABVF4<eHTHDC?TkDkvP&+qOQ+%=UxsY!Fn!BWO3MbFMV7;J zfm$ybGA|~Falyl~G=gcsMp>wZ!wu1KSw@#G42^euNMFT90<N?jg85B4OmJo9!A~eL zoVx}5s12`D(YkilORTgmsl(lEY2{F-ah=v;2+zW6b1$_gkc$g~opM_89-AUfJr!UZ z5U6Ff*0ZnGMg9wWS*)DKB(AL{rQxz_!2ksmklv6E4iSTWi2)#+H3hveps_k2QF6=B zzehu3a(#Q)24$1m$5(EdkU;gL^<x!sBaS+jwG<ZIJsq^+(@GAfrv}Lo<u-{rwB1Hu zQi7Us!{<DH4^cGIiZm7anpXUG-Dpo5F-)~)IJzBTCP<q!hr#$TE{!Vg076j_d1`Ao zU3YN0GLn^PC?ld_yvCWFSsA(z4HfZ56^S<GbtcF-smbczR^C;OPXC?nbh_ap^xE;< zwG6q_U@NJ#I4Y}m3)Jgo<xP^doy0;bUyi}S{ee9AS~<elgx2nhy}`M-OPA8%=nY$r z^Zr1Fh7r#4@Dfn&?Gn-B#)+iv;J5;}^dB8-@INB|y$#r>F3u76d9g(E$*2R$F1eC0 zcFH(VmF$o%)HYLJxN#y8bQyZU=xU2ND{dCw%g2Gc4Sn<9q<sFLowaj+xtSqU;~?3{ z2~bA==4L-{Mqxu0dE7meOu6CUmCqS@2XP5#?c-`$qHe{Y!!F3q#J1*uY_P^i4`m$& zr({(gCF9Z!%!TekR$#8Iba)M6^`YN73b~)DJ%Vlb85gT!vVcva4@1kAK@P-gDz7e; z<fGYBPIC}AU~_wT?2UT|@%SIA>8gHNKA$WCrz<rO@z)O<8GZX#`{6frkYWSu)dHlM z>Wyiq{Trd%r}NcW5nq|578HQ{w1(pL7;Y@&tT4+yip^4dezdffomoU^dQ#<j=|sx* z-DFdXRCBP^UL;>yc0(<@l#zuxVlnE~UW2j5_NqNGDvv32rLMR@2e1Z>MHa*-e;}Iz z^~@B9667+r^XMd*O{p`(<DnIr#uvvOmc&_|)}BM}oc24tfLktCrfA1IMMiG;DxfLy z|A+usYBirv7IlG_lWBkurx?!gcM2_pIncW04IC=-;?blg7xWs$Zbpw(Pv6Vo2pskr zai>JUp7O9553|8dCvGY7YidMG98pRA3&$-=&cso<ST$`pQ|q~IxFh;5m6XX0lRo`O zXJq0cV#dvJd4fSruoWdoOYw3D%E7D-QQE+^4}hSqh@F7P*rMWzmb$DfYqCao!m4hG z(<wcbO%yd?TMzAC>sYs1Z!Uet#0lSD(1)N8TfEiH^*DWi-4)V+%j3q=N#=xQ1`<P4 z;e`>?AL~M1U-T81AcLMAeRxp;X_0F%rZIfoBJv(p{^9|`(CJNZfEs^*8a+Vxr8|uf z4Fzrodb8;Q!Yr%QKKjP)l8~?fkohHB#@)5b)cB2d)+%wwy_RA)y1RGSVK(T}3>&br zReeI8WOBIc1#B^O(#kZ&Jit&4Z*4a(7kg1GTE~2gQR(rQdR(|L?vyo0lahv;9LLK* zUNpIL3QO5&-D^1nF{Jj}YOx1QzTPN@?l)|=pmD5QEnj!GnXNlcC(F%^Za4~HcJcS? z4eTF%^sD0`z;a#u?eV|G2Dzh_C~fn%`h+*!t@b}qL}et<dHrG2EXC;xgF8-^V$z#U zYO)QDXw$r)$QiGNiutNo8abHs9r+u+wHNj9#yv_#g)O5IO|=aJR1+l2SU1<#WVd}~ zLcOqlp2sIOL0&Sayppm;mY2TVM9)O|ky<z5b~V*GoXrtl4OIOZaHDzj4`8hNjcDdY z9zByI`4(0pG^Ns!PyP@DA8iuscJbFUeouU8;C-reA)KfWx>H3MDSE6mW6)ZB7im{T z812PmiRct=E}d*;l{UkHI@KG>EWB9Be8JGBes?=bjeU$dOm}uxaqxUa6j>LZ(d0mt zh@{$W4^vA_xceFHa6D{HbVUzYla?4LK%{b55O>CvT@C-{lWceqPvYA>eQcgDZn*!c zkbj##HUJSn(eU)f0UlQs7#0(IjgU9;A@(`9y}i`R(0ZNR#$3o#C2Z4aL<}1XVy?)X zyO5Jqzp&ThM#hv67v_aQHX0CrA|u=emK+AVEuGyCg1LcgKjQGdDFKX?ec6hXfI_#; zbG4W2hw;GN-Z(Shvh^G(d1q&MSOqt+Jb}&xoa&P`hJlMRju+b6$zE1u3rucx7&t3B zz&<-{y3)8R{-Bc?k!EHIL!_t?zzt<AyvEA;08=ydAopA5=fzQ=iI9MI6!v{o*g`ug z5(~av<!hYRlQU6CRd(=(>0gHe7swXdmZ9-f6>U+F>Adp{r*N1+5Vvqw<<Y-D_Wc+9 z8;kM3w&*x7&hkk9i2g;6G12~aKoYxR&J+E#;?9c__Q8*DpFhhBM}xz(3zuG7dj{j& zRr`E$TA<pfv^Xm`fhFfEN#>~0vxKmDU3JlDMM)x!@u-)l)n$Ys9CX0&TSpFIeL3jQ zV>w=Bl4%B`HFM_T0T+R+jUw+c0WP~YKGS27D3VBySgOw{J90VZgjGoeX|-Dnchxx} zH4wW94}3Fgs0m@xEA0U9H1F<BAhImJy3S3gP<+*s)~1G8ka9Xz6q~uwg2;mzj~2I> znrq1R&?^ICAiY6>e=sr;PL=UqZ#Wtp=JlxV^^ztpFsx~dx-@Dg6Mf3b%{DI8bZ0sZ zjUr_teXj<JUmsRFjH(tvon2AEmlK<`SdtsRv??oasjS5O7I;cui;eVV)TIuQ#tcTM z8EgLtcdCLqu-oRwk+P)WLFG+EHLB!9RCk*QX%wi?ga|_10~^7ZpsmE~>rjD-G;A!t z6K$}NAe*sSIlUd0QRF;3th27at45WZf--fAX^td8`r}lDRe_H7j})LXbO%OY&Z0g2 zh_XZ$;TUX*GEyNpIM>cUE)Ncd2P2bg<wmRQkd};(@D|OMo>PXu7kkE)lO@>F5&GJ` zT}S1kRnt_ZL)bYfF8ii?seZub;)i<JH5)VbsI<epK+kTgS&m6+o^;)0o?f`sxtc+> zy>KzuTEVRr>~64_lF35)G^6eLJ9XZuaC)5!UGG4BW!vr&>vYOH)-&8(&-+${ndEBQ zt-~gyl>N{lKHBif&d0Ud^1UBGW|tg6#fRpnVm-c>k#)!Wc0`)nTl1aU8fBX0x8|jW zFui+o?1kCV$fp%=zFO%J>~Q0?#ZNSF@@sWME!7Dktv%HW>{^8FI;F2+JmQe*g_%Lr zfW8pOWIRPr6;Bai5-Pcroy7LRq;xD=##5`L%X$h%Ftuoonwn^&^;$Olz}7l1^!_Ka zt=9Bvf78a9(Ch2P->*ciQLhrKiSlyrq5#21;ylI_+DF~?QH-*G(*?B(P}aKNx0jVH zrzCMJiBS<H3G?o|?R>BXrBm~5hYnw~@wo#>EWs>g!vP|~!upxw?UT4z6tIG*A9p`S z2<FB;M>ZcE&>ga}snIHxlznBv9=v@b?!3T$nHA;H*}NEQlfo>r^)#GIDQNoILm>{l z-b|;RY5DSxv&_alYAc-jJiJDcNg1uNB3s#}uf|?y6rqek6-#^DHMU-T|9~K0HCRm3 z702orR=`P;cE9&sdT9+|8O7mp+vMaHrnRlX@%DlmBkk|V#hz2LF`1OP%}{yykK_w9 zhe@3}I&D#4oL-}G?Tgg~n{bH3VR3JaoX|y-iG6s0pC2!xb`PBiMRW0e>$9pUAu*n` zQ}_A@4+anJef#ZhGrA8y534Z<<<&m^PK!Y6gv-F#O%SpP*k}PeX<uOMhB8n|b!#Oh zRDvX;+^-UE0t1Vi)lZ*s9XOWCp@p(rBy^dAi(Malf>p+<fq{84kxT|@Y?)#=P@6VP z><#IHVqe1#h~2ozhalh-<KZB?kALrH_wdiX>;V59!1;~LdU-dxDR1i+a3+e&>|ckI zEk3SiO|z)8{e4Lk|3F#bBHEJo0S~wS{bp+}PM4GAdJE(>;OCnHZQjMF0{z(Q=(}fJ z@Nj?f-M?<P%2Mh{dE^sp_|;8_SZkI07CIsItrF^l@x9ptrp}7QTcsmnE7}G?21C_W z)}I^pgaB;Rab_jP8w&XNVCGuCbzP2zXFNH#0dVmgYP&|KO1c)d8qfh75x1w|xH-`n zhhBO<2+bS3Ky|y*2G@q@_I3no?P^}H*YUNm*4|ic$phy2WMnU@t@cNfz<0@-T<d38 zC9CvB?u-z=2j&aB!v)4W-Q?>30jE<OrCZv})Veyh6s$7e)-`0j39@kQ&GAK?T)Q}8 zaTW+%k=O=e@M$15GTJY25AeXYwDgmY`+|O3GY^bl`cJ9ataG0NTUMY=Aro&fKLM`< z77eqNbU;EbV%@s36*`;M!LH0DWoAWcVHu%z5H!mu=T<pYy3Fd`C7-qUi@@U?30N)Y z+azdNgWf2*#-VMA=v68+1#IiLomy~(Rnjmg58v+f4OV(AYy(VICKs^(^DF6({}f14 zkt4PjL3$BlkHHxswp9I2XHZN($~S}|qDy963t9INsAI9@ye9ein^*keiTmOvT?ML_ zOtJp~PHumJ(?g%2H#aFP$56;|6ieTN@Vg{*#Csbo+RzM69+z67RIoN)lYDfuCL?>s z1HcPD4M?;saNI$1M5!b%LaWnXmO3u9S1(MQzH-2xI+w|26^B(m{z?Tl>%DRhmu@>6 zzNi%S><PSsL+sIi)fU@|ozQgYdVprB6+<Tg+u`pkRZY5mW&+<cbV$guerIRf=_Vmq zNPWxo^^gSh&ohC6Hu!<{AmqW#%e02sa7RiqIqtOX?EK}mCrM8QjNU(u0U@*<$|p(U zIL*;M(|4lkt7HA^cyN+6z==Ng>(}ujVMZ8Cf&CnXv|su)Rlj~S@KFdt!pFiJfj2p@ z(9}H>Y{p~0H$8EncZ@bi=bW{3zLWZ#8;xu8CG$&$8mh;5jjbOPqJ}g5gAqpXyz<5j z%JJ2&Q?fmh-NWRgyIO;rjN$_09~B&dN_z@Hq6`zsPirp*oJ(h5F+qX-yfq#D%M{9n zUaV6B2eG%2I=AEkf`w_Lu9;CvoleyGD}M<&kmL(9!Tr<fY;87_TKbWVwJ!->2aXSe zMfKnO{DVw6k|8UM$%?ANj;kHYAGg2hC4hjmTvBWn47m2LE;K@oR=b(ZZnt{edc*I* z;=rMDM^432v-dHM?_<j^#{-_i57K$-csm&&Dw}Usz8xI23Xz9s8@Vsr>KPv>#{KS% z9b5&7750{_?mqj3)9$$AU8Rc9mVUSJ^y8bTb?X$tNYU!4)B676@2o&rAQyL@<@Wkz zUyxOiJn|@EkO)5Vh+v!kjou>F|BplUt?L6?I#w`}_R29sPrTEW25`2g$qv2iE>#c- z{B=4^o%3sZ==gq33kyHs`g&VQMcSmQUy~uQlC;FG0c6aB{@1bsh8c(@*!w%6p${G| zmy`9jyyxAEqOnQM=-&jR7nMM$^YXap4Nvl+9kEs_y3$&L8l{tTmae2#)+Dd?hNH=0 zUiXFs=QGPc6tOs-oTP$oqR}n@Ek{>}aN5Vqe1hSP;cJI0^kKx%M8K=)Z=eD~J}gu8 zmxC^rzzq&kXqPnaNNXj*qG?!lSd1z(0E4gX>_{V$1|H1y3{;YLAgATW%`wJ9FQFAs z8zH1g3xV>m9+gn>GAG}LNsg7KGA0j(fxPT3;rv*^uQmKyr{WMpEU$K{W2zk`g`h0C z>2m0x%`jR<{yl~#)7%34j6qqf$ja{vPfj#Jnm@=_M8K?A%th<!Dy7fo<+v`gi-JG0 z$}iCOtdKSmMZOx1WUTwy^-4h{9Ya+o=<qw+Ss9nx36@>v3;t4_&#tdm@WF~uB@mWv zHim&;;#ehFEZ`T66_8jH{yE&nT)@yaFtjuHwT547C`bqt>6{TK)KERxDaJ8Q+2!73 zH=c9mWPg?}bBv3bedWAg+3#2Q{(#?8EKSI@-kV`9^zmdL8a>>>gRst5c7~P7AOUHy z)s;2&7lpks2L{#S@=$P)&T(;_4>L&kPH>=3Tr$`B0cuCqGSeC}eFd4;GSiwfJ-}NK z69&65(vsR8f|?6s2V)5=POpZMEO3$H1nf?r6SI*<)4<g_JcO+jBdTGqP9Os!8upgS z?kw3~B{)I_)rf3XHaM(sO!lBA*sgo|Y!}g2Fc1rWh>E7=SbiweLu3umd0~_e+n-|G zg30xDRGlIyK(wtRRX{rY-$G}SDW;}RR!xY)Sy!mVo-E5adQu?#9G;U~Al`04eeXZO zv6*fy<`|cr5})-kJpH>y%=@DL9^MjHR7?;$Jf&8WH}1N~<CoO9{)c5z`~?gpKPK@N zoW_f}_^{5VMJl5!yeZD{sCuG~koQG8omVv+HpJ7uEM<nQLkaZ3D1d;EU8vk=1!>ry zo}Cv*D053Y`)tAKkI?n-47YarzW(!Z_=82t{mjlG7Y;}Esj!cw%fi8rL8_lhs+G>u zY5G1t9;RQV2k8S%fniZ;npqvLh!`WOL?zx?fi!{$r?lx>;(j>%YP5u0M26@2dpHD? z0UA=^*i@Lnp@MbRIo2vkFsv~=R3`j^o%wjCexcAfMS?VgCeQhz%`{_5*O^Rnr+BZT z%fW)adpY%Uf|q4^spHksO8H!*uQn_eoX%I(e0>hnc8M0|&x-u29oxfE$UQ>it@0f8 zrjw>47>H8<10t?dBvCgipdbSe9ruP025Ilx!AW|IzrH1mv{Pup>+I`$-#i%J`zC$; z{`t|1m-u}D>u>HK^zRM7I{51T@SAV_styK&d*9q2Jm}y1>HyyMhWEev_UrrK4Eo>P z`}Ugy_=1;V_~4tbzxw+A*ZqTg!+Q_lR1EdPx+r>ev_CW#Xs^lr8U|ojC_D$*()|LK zj5!X6y=s>NI@i0LC`z>bo^Te}kFl!#t6sT(knHPQDJZ&3_T%9m@F4a6ffcB!S8!eP z>O9tvJ(F|@ED0jKTa&aac99ZyO_J8SL${!F`?4wOj{UXYwKCi_N-8cFF&=08rgzY( zgWdtRb%I@8VmK_^p#9-!b~wBbqI%K$=1|Mct7J4ocMW^6CTJ*c4~n2c5j-gAWG`QJ zeQj4Hy~)T~iIZIn#(BA0Kr=zOdb?q7JVWdDCVN(-&x_?0ZQ`@jB7L)%6-xmkxla5O zw#{D!V~xI((M6-DuipHS-Mjbg{Yb4Vq>NBrgRc;9NEUxC^8WpOwFq`ki~j2*{RxuO z{{6H^f6x*G+7SA}SN9IScE0ee^@X3}AuZe?Yzg`S6+(TFWqseLSGN@hX153bz<_&q zwJ!IE({n&#;$J?1m7NV2Z6lZYvlj=Qp=qR;fvdR31P9|+!;b6Gz8kd|&tkXOD|d0R zixQ<wj;5WAzVAN;nP`^3OW_v`8qP}oSD~IB-2W#3RX%(>7<@atm;YNn;^^kjG3OgR zREzvE8)d%<s*(|zDRW{Xq}KHYxg4YcXizeV>2%3$jKS~S;S~7o_e&ja`a(yQ#-DGi zhi3?*ZL)P;0y?J49w0_Xc&{zTAdX@=xOilAo!Pii{BY>l8~4auW3yzw`4cv%x`a_z z{kl_4e!NVtLetyejcNE6*qU_0nS`+m+dC<p8Aq2fUKQkM<y@5NKnFIW5$p!%S>smm zy7D1BWrW&fB+wSBaACEk6!V<#Q0&WEvSQNKNc_iwCb7V>oXdC-ytxdewyx~k)x|E> z54!fCONNYHfkTE#sq&j6FxZ;_+D6-XP->&q6t#l_yqy(WKphd1>1>Oo0SxVfp@Ak_ zR9|1~>~X=2!hVCu26{;d8KC!K&NdkRQ-WTB1l)T1!N#qzY|%`+5uh*K>?D3`6Rn`& zGNP@EvVwwO*yJKG(H$@PE#rf@3Cy*#Cv^k8fV;NloARjDtCj(JOUn216&b_v&9F7} zHVBN`f&oggz1@(@Xd>L9yGe`5bQZ!7&?=oRuSlX`j8o4;(3u;{*R<~Pcm=Kv{r$!u zu_9t9#!f_pa^?7XSQr=y3l~G2NW(%j5ujKAu11$*2{yjhL;@Swf5X<XiM~Kbazr4Y z+-^mc9qSPKDw(Xu5?m8!C)^fm*@izr3)fjN?Hn7w?x(iZ>%)CSxbEQ}%Xm(OLx~Mm zMQJA5YlIV}z16}}BZq_dreoq%CK#`Y*V?2y8M$IRvkaOmG7G~~CrhI32GY$1l*E3? zFua+&Af@SZ-asxZQ<D}tqPH^+t&lg4UqX^@j0Eg@Fh6$^wTsbr-Fa%6Cy=A_%gUuF z&}sk6huwLCUzSs(5PW_w@;Ak1!xhc(rX{ii(#}A*4&oFPERnv)EPzUf<HM4ij{U7( zoG@3_bs(r-K4V|3?&Cr4VRmqDd!sdXJAoRX7%HIS4UMoqX&qN#_c|}z#>3=xdLOr% zE4gT=wLW=AC0Q|9w%zL-7cg~d#1_Z?j6LC)*%IZa>SGbM^3Ca%!~*M~yBR)KfTg61 zsX84pZ4#{mC@yk;pvbxpZ?e$GbB>_4rFR^4KqOfm(W`-kz_3}oU&QHn@_+C&4WdVc z7JGAIG6#-><C9UxJdzfUENRJRR6=iceU7IW!AWG!NI@gYl@%(9Cn1^^KP~d#4M7QR zaQj<Ev`9!4%XqFxB6vkM29n2vN*w?wW^vmXP+h$DO_Fp|fUXv`cNxPNxRZj+8`peG zv#rl>Zh4zyRFFk5CvVXF{4SG68F}tbmjomW0(CcPzA9<wjZE1`6W3FELs85cC05}3 z_F6?r=0(V~c5bmHEm|;Y)XFOQy7IC0J5I8~3HM@D&agH=7Gb2&#cJ`eoX)CcMiBR@ zjQ?n--32?8z2c6h9hS?MODE=uBQYi9A6@bdg@3$TSq>E`O&@|E4#16Lj(5wsiZd$% z6j3t>TBapr3NAoWWleT4TUf`I9J{T!F7N;=w$7?)o%AiR2M}Fu92`e(;>9@vS?ugY zN6&wtNJIT*a*p5%z#Wpf<DRcIx0x0)I!-klZpul%HG(;uNyV|)i_kSFIvGXf>f)55 ze95abgq$z)<1#Hz6ez+`OpyIYdYm~ZQXwOB^1?t%D;yy8RAJO46NZ5<nPI^O@FO@F zXfN6mgf0n-S!cSwj?l%?iU13l&qYZQ*)SS_@+PrgVkkF^2*9viX=RmWFO|wKCxN~y zRmLo$i}P^c7ea*TgwMD*NAQe#IYqQu_HL1jEwr2;dm;Fao4x2Yh3JI>(TU__te2Fm zSk^~H{;_CpW4Tr{8QZmo&;3Pt9;Nt8SMR*<9b9r2o>%)dr<e+G^<>8f_tUS2C#jkC z?09%UNe&emroDS#wdlz3>$G?9;6#3mEBtDRrEeXvN3hf`Cg;Vg2}Wa!?Z;d}yf?*^ zs=!24R>YqFm@aOYPWC?9CzRC;=Y%4tc>4owir#jlkyt1^(hDdQrH=6w%848%`4kR} zbMm6<QOhEb+x<63{6Y~3rzVA_tbz>)(w%VdJqBOUpu#IyN(sURAq4YcKA9Hr{{IJw z{}Ufa|2i4(r|4g$-&kwqe{d~Op8rYyN!jp7d06CCaaY5CtP5@bmGOSJKO^SszsJvx zyx@RZp`lagEJcsDv>}?4dhb!EdZkS;Gi?y9Y^76adZ*vKS{C>+brN+7#+<YhpO$A* z{VL;p#fcZMTMnXbP^3Ar)+n@^{^7&_rMBz1Uuk;|9FTOAyt#+1z+5g4fy&y7{wVG7 zNDubMs&3pMB0i`%ewVPQ$O*P|7m$sG2GzV-6vdf__z&lK1#1&{xRgwB1@|){dzMy= zo{5#H!h5B&{B^t}n;c`PJV|8ap>#>cInEm^LJ@N%GZQeNmSG}Sa1xu_<Qba*r5GBg zCm)jinCrgODZN<hre<tOq)Xrfm%v{-CH23tPBF}mtZ}WsvDPWAZ<rGJpue%!DM|lg zg=fNi4LkzKv4xD(vP!QcNPf0GylL-YWmQQr%T|H++7MXf_^juzt1=TWge+hiD}=Le z1+151|5Qj<SBkyEt`cfDws&$hKVw$hU33<Q?rt}-{dt8)DWa46A-mh=<Q&O|_k1VG z_1Cy%+-kb|<(*G-=kK&X`P7FkYHzGc?%YsR$daHyVHyiYoqR8&N>*&%qJH{Ate^Eo zlyp~0LN?Qq3OYRq4UVI%GM{jU*^7nb+X=IN;K)%pI@}xEzkz&Uu167|;bXBrttLwX z6K@#!CrT&t2LJqZ#OFGN^%|trVloxYIvb`-Q5P@EAMwf?A;jsCa~<3tq<kOF&F1TH zo*lY4j?C{Ud@DXo^<KgUxvZ?8l8R=>@U8nGP}&4I8xA@>xwJTGX;*2Ye~Ft7P~gth zYdeW<%(PM)`~15dAtvo8;lyfk;&@<j$CnDbLvpE1P|miSRBcuWQ2WsY3spC1s_BN| zQGO%3jOV*(FIJVOtCtG0=q}xqxA#^@WfDv7F{?cMIPB`=C(xA48lUu&C_Yn=YdiHu zYT9srb+Qk<EJz*X=k!Pr=Ntt})1q?c%a3UmrB`~dXCmctnbU;C(kR{%G*N@VSecdf z-mDlYf!t=wfCPg+y;0v{=XNg&;>{~p9|w3AsTj0C{rPON-r4!o=PXl{7D%Tzk=%_9 zzUa(<w*1n~9YZJ-r8Pl`isCrZDisWI+8E840nhfw-TIW$rC3ln<ir^5#qEtXj&u;M zEJ7IAh=3|+7W$SJ%k&VjbGC;gbAQL(4vc}b2TLLaj2uOt1PnnTQ<7AvnF^(5qD*jh zKo<Cylr1E!P@ue~uZ|k7YjVnw9ioAD%b|6IW_s57q9eb=S2|?40;#lAsi}$~o>|fD zdEeY<6mENnBvFymMh~czf?=xkFmbXTD3=;x<^ijN76`MA@x7??k-^lZtjtI7*?Bm0 z;bmTOG7h%6dL-K^7jx5|OKWSXqnxG-T2gzJG<|d0hANc()|c`A5_NWYU{X+i{M)mV z>ewk(zdB5~LIZ${g*2h5Gc#>ASxuw<o|<lFmSk1DgB_Ch*>0ynOi|T-cB?fRm=cq> zMkj?%TLWW(UI%WHOhcruQGLYv;$G7k!mSlGs~--)><~E_`7u?IAUlX2At-yxGDLLs zsbMCW_mDNnnhaW*)V2y43p(rLVUdKWt6_0Q9*d+do!VTI#|ddQhWCP$L=UyWRG8^P zBu_k2<(|LwRFxznbOY}b4+nImRex|WWbGsS4EVHpp?_*Ebogf1-Irr~V`0BL)P%MG zlb^uFX|R%kj0o_`(g@#ynXv-D>2fM6yRAn4lByg9w9=oy3`<}b2=pTfT+?a}---Tl z@7{w4A3j9sXSyuN?pfj$0t!5yEV799SwzqOhHa@6&L;JYy(Y=H7#}5fNY5X{e2(%G z{(VfJ)5&Ua^bhFq^$G<(1Tv`bI@gm8yNs5#g<^m-Eur7V5;d`S3cZ$360OFUvHU`O ztdWY{l?*USrg>7CffAU!o8l0eB79QVrAWp3c{2vEUyJn2cH6o6`q;<YQk7ZUg<Ct- z6bfC)O9{oR*`$8?xqKyKy~YtQB@^70D^e;&)ylivR$I;UTW1${dVhzT?Axow(!Rm@ zZCpNHekdB!o_iJH*AL@GQQ;g6m{$F9VBFmh+dSg?2iYLm^Lk{cgsdO+Gp~#MWq>;H zh8?6BN?=w0Z5@VMT2zZm?m4YXq}?pP@(u~guN^Y$7m3)fxzo2Dhjy=Y7u^QZhyCjO z6=(*cy;mi3L=F&?PdQKUlalja+LwB&qJYhb?wqohhc(yo#?tGQAYAS)d8VN~u9<)? z%MiOe8l0UUe?!P3WzXPl4H5>An>~cWE)+8V;*vj-vm>6>3v=yI8c841QF&f=K#q1W zIeg!0&@jB)(J<|NES6J6JQ0-rV&U>bffb>E-ffaZ-D5r#U0mzf?Ks1@^KA-EP}q;B z1=T=fksLaMzZV{M#Z|m0^4GT-lFC@wEfWj@XN+K{uOhvYG)5p!#3ouIZNA%EFlk$| z@OW?W`>pAuM3a`&Vhd`}@#`;MZzfB(kO5Qv%lEu2y3u6n*x4EWzOWuoY`?-6vAtni zmkhx@(Ij@z+FMFZC=PIvSOhCbeS(C=-ts)P<W48Nq>0(~e9c)H^rB^r*M_BD#Ce{- z(+|qL-FA~z6k3k?{=5F`{fe$Q)j@nL_F#Zd_=?jc_Be5tFR9a$#Ip85c!;8}U0LH< zLam<jmnTz@KKZT?f7QEH($ij~0-lUd=?XCd_Dx>%7N6*CvR{p)E5sZ)DKv0EckX#! z@9T_Khj&Hd(71eNfhx6baJ?g1eP%q!X8p^aH5{w7>CI1){-wJVp>~4!xY77m)4a3> zrqngKT1wrdV`p~KfdN|P))#j@cbwyx*D7`(P<jfzxCtIslDItyGez}9RW-BkCm8$( zgrc%~JQoYRzr8zeq`4hZ$r`q#zJ)Kb8Kn&*$*JBaOQL=nK6bX9FG)-O8wJc@2CmCt z8zEx$2Z-f@LS3DIC}4XH5coo2hc!AN+468g00*l0%+7>p2df;!O;}Yj|LSl)S|K0; zFRdDfHJ=@?dczY$V?SOIgwAMs$Yy<0XhkiL9<B05jc8>EhVj#dlRvFEraDJb490Xr zHGJ!UdA_QfEexzj<Z`R25bAh~<<PAa?CkR`U2U95*E|jB!q5@wyoJmN1xLs^%3}&G zBNEHHlI`bnjzWuZZ7}Mr*vltqC~qC;@VqxXN%jx03iLD)Ny}9=K;b8dGr|#y{cn7T zEBXpdELWb2!?@hbi@dTw45zUA(lU=r^o=hzpDM>S;sou+_@_d9j2cM^KCj_<ot$); z6gwSao=EzZcyfe=M@sgL%5;wG)ZWY{3%Uc7+=WCO(lIBQ*OEk_y_?>5>_@van>{<M zj1|HBQ?Yc2fzz-+f6oht?$ycId30nRTu;mlT3_jK-aE#fM2If1k#QSaI8PPfJQZUK zQH=vds7;{}!VF20QNC~&F@uIKzuCYa5c@u|HirqoEz3OPPP*ffS|w6{9!32#&}X`4 zZtMr8>zI6grKE=@D9GGZl4;2)Lc%*jwMke|Ic~LqtcUawDa;XP<(OO&TOw$mcmvbo z!Zl<K;RIRuhJO%xlc72_uMCWLhN}UVz>=0gW#+X@7Nn)2kIjmvTkfhVA^u>C35=;V zJgJB&#uz{E85Kr&7wnGY=t)N-eU(Z_inVm)$SG+~Jv-u5lK7Vbe99+wmDW15U_Wij zo;t^xq^p8Amnm%AV=HoxRqk|k9=m6QFs`%(;-is=UA)ZC3LxCYNecfUU2Y`Q8La9V zP8a@jeGLPEKX@XRNaxe#@$dwW1}?U<gV(Ti?*Mp8J0qMTDb5jDeJLoX_FS0w=vI#v zN3S(i7Uz_9c??2Na>V|_9*J8;@>p*-xj?i&&26ivW|P*^UnssKFp(DCyCiJOak8}z ze5x=q?1fr~h;-;KOl=t1BnDc}ERq0s1*?O`QtmTYZm>#XhY>@6Gz&rscOo!ue9*_z ze!7GuM7Vkr1eKcLPCm>PJF=}%+ZeX-Nzo^?to#!rlKfHRPr4O~U&@8*K{3ag=1>1$ zv26tL=&^3|d}Xt4^A_t?=gWKoGXl&NY>qiHSHRiAHo@aHUm<^0!XI%$(F@nRXsBAk zUxJt0%Mqk^4~<rLE5sQ>Sl>OgFNMc?FTb~2se^TvBhy!pSBNcqyxgzT$$ovZnGu^M zn^^^B6P`GZ18#O#)ks)5lHKQ4VKkDR9pN24oYF7;TutU6`4YY+`u5|M7#^J6OqSag zlgVvIi(#^$dzlwIb{<du1`~$#bnK_JSTV_seeq%D(^1y$8^maYj>7{>X*^xNfuc<* zKA}h~%<ca>=i-*eBTxXM?X#}}iiH4nK&~#;(DJUTPNai_4vJwDJUXPxzfH$ef~4P| zEDap#u<L>T{#S&%>Jp195Q{5GxNFD+RC|`k!Xez1L%8ch*j;%|<b#l8fx$re87RYd zO@F<em;3|y-AfSINErh3g8(cGGFC6;uf2j$Hlcef&7iNYuUi}543)jlXeg!P<d-6U zdIxxc4VVHZe9n_eGa<Q1{_c!2B{4^u{)b`$Z7+xgte7)lXp+hYB8g$SRm4`E7ZnBO zLRkG$J+1M#sttcnt7>^BN?1X4;<eCoPUlF7PFy(Ts{3&MHF(Rot$v!d!7<_q1ULT? zPu*Hqxg5t!)sXxr6490_=Cq9LlIx2-C7~(}EMnZDo!ZmMboM>hfhfRE0(@<0tXS9) zda1pSO<m!O1o>gs<TqZ!9F-T;E3c3JtK;>&=)SEMT~GyWiQE5-&?r%<`_5a7jn-Jh z7Kqe4|E@yBdU+9ej~-)@Bo27>k41nH%p*D6RwVdFFSZQ$tb93M+N+H1BW6gYSLlk0 zXQDi^5uaerX;h$A=lJ#Y_XUxs2`sav!-3SFMKcAao<5yiO(%5`(MFCk1+ARV5#Mk% zUJ?2++2$V=2!2hOpQ9IxETITlZPZnYic>8}sL~lz=yrXHeOvLg0Oo_gfM~OC8YKNu zW<F`BYS77dAoiqo0T@;8+IWD*DvUe%q`=UNvUZ6qYFDk3yn0o-sdShfs7n8^EB!%E zAjWNG)Ixi3mKJUC$4P24VX<84Rbc0*!w){4>4k&HifB{;FM-mThZ}0m&dyAMu->$W zS8mI!#S9;npHL051^xK<o0l&ntXMy?fvCSP+7PP8C~G3u+Z-R9SlGqyG(xU@@E@b* zaA2z$YLGeb;DQrtjAbZ3dT)r!Brb3jCzOWftMZsvYo;<E`?>J+d+l4svB<to4L~y5 z!j6xp5;GPKANo0I)K7Q~KY?owX0ec!|FnRmRZlndQ-y9H|7mv?N@qXIgi>#dZS*@w z&vMqAkhpI3`iH`cvLuPpSdw7*n3`oJZj$ULq*JDnpR74;Q>N={m1eDLi*99C-7E77 zr7}g;Zs;)lt;nyMN-nX`G4cbmeW|RLiA-wK!k>%SVBIJ;vIL>^4Bh?J9T;4xzsO_Y zsL<ehzrk7a!hL-0K0Yyz9nEHGXuBm`jDr1vS!Z$+Wl@yu*;LEv<DXu2sQ|JwNHJOw z^)yNU_}eW*feem>kmv$jW9!QpH&T9mkQxXiaeYm=2~f!EV&QgC5m2XpC3oU?rxWH> zagKZ)K=1amU&qPQBLWrZlhxtdZv1xJhnmyY0xgCDLtHw-+6To_*-!e@9m%wZ@Q}7Y zPGB5%U+s~JOXV#PI&ZKj2YtAGtYkzZ*)0qDQx9F4FzYPEE1{d67(FNPp>XDeiA2Ff zf-8^!POzdhGo56z?t*|Z(`u~e#GHOvEf2pyhk=^8^v8Oas;^}Ajgm<IUF5$O=|96Z zu*Seu`WHIpro(i)tm>L?%JH$lWAi1W>JoN@a!7;<G@=KjZiw8bEr^$Mea|58ik_gJ zUrI(rw`D2;CTLUuvTnze*t5yJ&Ar19H{4<Rj#d9{+jlIS7+ltFFA~b=n%0JmXICOn zB-n?$_-;@g|CI$iRk7Iy{x%7UavKCcRb0RNA|qMSj86lDbT?yID*irL9GcdFRnlJ2 za#ZYU7%RrA%)dlyg4epRDVih=*gYHb>kc1G8Ia2OU~(bf2a{88Tz^T|X*6bM6Leq6 zTmGVVgjjPOZG0F~>1AWObH^+1yZ9U8;43c}{M{ZS<us?~Q8~|Pvn;A4m)O~uBSY{P z0s$HUsSp-{z??l&=V+fZcQoDnIxr$R4|@AqlT=wM{1R{OA)&xSfKUSRIi={xo$?vs zdh>|^>*dg95hh1m2a$J`<-J5te_4{SBy&?1$iD5i#T*kmJ5jXl!FyV-fo==?Ip1!9 zfm&}7wx;WyH&(o`TuNltm6^F*;7$atlsBYGhW?Y6qyrv4C!>VBx@{>0R*tq#TPCrs z_>^B4uWjSqCGXemmECslx)9~)(mj+4z9Vee*xTxK&M6#w;Ek5d(pUic@}gQcvtNq3 zi9O@UTT8yFR?Y0`gi7*V2qpq65GNz_%u6YTQIfilT}20ES0N$0Hab(eBNIBYx?T7j zzQT?t6k1-WOzL{)lKYk`pqri0D4ZSEY7v|D%N;igIE;Dh*ht3;hXsv|)J<xgP4YBC z2J}Bg{?7nshzJe~s26=8=2f*|V2Wb#uwDS2d5u5{bep-6u>O4X<mt=5Lt4?ww2Fus z|KFvrcPEv_87!7bH^FS|NO82p<xx~WTEFE^#!+3ZmQ!RERR|*tNvCyTr~#6~0LDau zIZ^g8IAH^wb6jS}M6XVyk*S$hgZGU^j`hzIpG13ehssmA%{-4K)`5L5$Z087xpZnC z;YBu$q*@~Rw)-iS4q0&J_^&Zd17X%MB=w<L9!hbfRD?@{SyRI}TDnx5R7nm$y+o-> zN<K|#uk1|=)me(F@{tSbb*GirY&h9lE3a`^o@#bchD9~@COjUb-<&wYmIQYpFG|92 zx!oGq_>t1U=HjkUE1@VC>SC-|D*HnGJe&`348(-<{{eQB8757vbvcY@LpaTE#Ra;i zJI?(w?G93uuCE31afc=hWg*9xt`pD2t#BNN`xNL#4s)n_If++7#f)tA;9xLFl5Ewg zH~H_;QZ~DmImSh9yjyKaqyeIg3nLnhKpQu);!}Q4&1&Us!kK-zl)Jki>JbZ}jRef7 zRCY=5K8aeKiaE-<i0E-vl#wH|$PReMRc6(18oo{6iULD?X9>@XUF?f`?(6?j<`eZx z*nj~mrtKg)y&F>JZ%Oms{{A}>eX9zL8IPg8-M$#lE#ZX1reNW@K;{JwK>O9xB5`9+ z7+`1AFe*gn@?><nEG8ds7><~N4QX?$MDh{J_=;7I6a?64{@WH^?+D5OEx9mqH&b+J z-Ni)^rdU?3ZVzr;rwMrqcw4Q|EOTIIYa>&+Q9T=APJB_FA*UC(RCcnBou}At6dx%` z=HwvtajkAX)n!-G^hF6%`{Uc^&vL<ohjTI_uWULfuss-dDQR2)Rb=n#h8_^X*gjf> zjMu@;xNHEAN_0y|a64+$m%|vrxE;9$N6Y~vcIXoZI*9F%Ec#IT+&+^UWeAlCSP$&T zCX+@Ec(p3=sA`((BJW|m*vfy&5Y6OF!ssL3`(IG5+doM5ME`OWrhKPde<>xuV4gXC zreYb8@gcf^AsDzEWSX+fi?Yo^T}&>iP1(J{AO#VWAMV5N$>ooX`9M|&8sBc<;oH5f z7T9Sgmwd$|^}1DwLB>n(pO6G~RQ?QfnY8QZU-W1N1@*TmG%I0J;17@t>*-`s{8X$t z%~r7k!(P5DyR@oBX^^`Vv1{{qMQK?$(QD6VS_P}ey0FqHW%zg*+sk1i^;yb~n~PH1 zZ#%n9O<xv@m6TN>HXlapMI+)UeTg<FVb09!5a-y?CmQCz*{ML;FYFa!@%i1_aMU}U z)A>yA)J<g^)?vsc^%%c4?tGIO66L(6<s|cv9cf>+Tw8cUE>A0G);pDuP?@>M;t)T< z<u|&YW1B3%RAt;`#EpOoLWyHENs(4NXd+`^yc@=*4=Y&-ISn#&Nq34Se_rC@;nv!d zr$$e{jFi!;e^drbMHn&tg+N=@*P>k}NuMH`8=p*<4Y0&3T1j#hHe&HO*wr4q>FH63 zQo8_CK&-z+D`OO>t);8hv`jkN*vo=nP`wk`J527KQaTMt*`F<o4|((txvfg;G>>-v zaWK3;im<OG^p*FE0`q-rzCf!}TD|GBxod5NSQV*!90{qF#4FMM=b31VH;W1INKskg zEJh<4c0nG>bdrpuXC<N|drC-k^58<zn9F`1c_5)`MXE&ihI}x(O~7ZV9E~D%Zp()7 zF{aLH>+|wO?d^zOJze7c@mVy&a1Mv%IM$W(nakMbHSi1<{38t=^ZvH7$L0Sp^jVM} z3NSxHF+X9X@irQoJi#qOL=eHqVA&K&rNPQUtNoG3=)s}_0i(uC*m%-zRm2f3n0)|3 zG8`n=*CxE3KcGB~dm?SIYBbd7g3P{lZB{Mq6}=#Pmy9X~(SFqylejxI#n(1&6PgI{ z^ibgGqu}64_6Ly#HfE5V)%7)nrQVp;;<PCHigB&@f+3yfz$c+n5#2@hX8p_WR%F{f z&ncw`Pne2^!I!;xZ_>X!9H`g$L{7MS1>{*n$u+#1=9B^@*O<y)x>Lxzrjqm;pOQ45 zUtdqjzfy)rMMdbORAAl=e11Gnrza9f+^1Xt{Toq3=+_^DU1T?~zgtJK%egqrhKJBL z-t;m~I0#T8L$_WO%kx57HDjQ9j~$@c&Z!;ZRr8-MnOd=^He*!cwII82lt4O@zEKbn zG>5<;)w(S04H^ig)q=2faccXT#g?ya_;nlDR;it=n0krC1Ms`$1ZmbdrBn;`sslP# z1v_;NHQe}pFs5%TYcY++8}{$^Ms$pE3-MHsoo*#s+Gn}i9kOkquM=b=c}iF_;9>;( zlVrX6aZ;Ymi)9VsL~*8SM7Y?g#bD|sf_Ue^O4hZGQ~~17D@;(KwY{lIO(KPkpv0T* z7UYU4ze!hRU=)4qG9HWA;Hmz<YW6U+U|5n1?yqo1Y+a|Ymt)^nekorTVPE#TVx(Hd zLMwek8)8!<<YyI4<4T(9{CvJ)TeT-e)dNi&x3;k|7|<=(trayBt&M8SKzmu!8MC1j zRdK8KI#7$VU98aUw~rnk6@mFS_KS2hgKVi{n0HP;9U`vc@}-8)(*x$$r^7EKS%*GX zek}3kSyGxj7q?H7FkiuAPH&LFk*LR0fitOsbf&6Z=oB2@Bm3=&EJr4D5}XnI`Y~|* zs?qk6QFn1wSdqjxZW3&i<0hEvxxq<#2FE{x?Gg_FJan<VfNZd2U{lu(kdrn3@~kbD zHD>?Yzoo134d_Bv5L){o8!r_z@+qtU3FtpIlxD}m|5iC8t5hnMzuCTEac<!Mf|_OP zZKELSG?cBH=S>QdFVl5MFx)TGcE}EYp+4iT*!H8g=Av7xl5CK}yCg9U`t9k|+Y)12 zP(n9Qtz7p673X?|gVAgdYnmkWu<`W1CiFB*#3kS~M*^R9Y42Ad?R^d_b`g=^I_v0< z;@)!q040^QH$kyu55y002F@Z@nycK}+4(4j5<Mz0(|K7&4(FxXCs0O8HnPZ)5Nojn zED|DL_!~WPE)UE8<v6Z$nI~0kg^Hkkm+1;6A*z@w1OAc}4j(A5{dLUVv%asJoTL|| z&+=AskH6UUmOjz-5{I_y-Kmnh7s1!jUQL0e3VR)g?s~rTcE`bK7jkiTT4HZB!PYB3 zXxH#XCX9ba{SxSj_^$<32LaqCvV4AyHy83nSVuIKIqxK#Rz^6j{u|-cmnS9n+-`~^ zP=0}I80u74mwf3^uJ=y)P`-C0L{&zPj3*<?w_zy}&oJ3sD>8vWs!@dl$Lbx73v{ei zJ<+i%|FuTS<GOWk<IT<0mp#rw?RCPD+q$aCd^aTxsUT}{BtyM%#}S+=a4e$=y~wXx za;N-~FL}!3o6#+!J*L3pxnYmhz{N#h#~5k9PSx9$q=-&i!r$aQO<`z^NnESNNs25N zg%37tmGx!0z>dX9TzJ#qiPp^x3(=c5jk_8`g0$+#okVGymD5G7n-_0P+U`8&a~9Dz z&PwgK=0u|r<4~Qq`YpBVNnDZtOE-|I(31TBeuppqR);tHLT&0ZYbZ8R>dn1&^%R;; zWGymf>ndbgSX<$K(bZ7Mg171@ymcKU*hWur$0?V(iqKeX)>edeS!;a6M(QzEihzvo zzm*=LvoQqRstS!Z6DCi2V37da-4{9>M_Y<;3%V{LQzx&(E{ep8ZW~0cDnf^?j-{zo z7<JhhJ)9$Q4-eAe!AUx6E+|6D={W{lA`=$N-b9DE7N00MbOe+@$2AKB_D4^SewJ?Y zGUR=eb;VOhQBjYK1shZJv009x9TyqLbAdzTT7PqPG;gvlkGF^0=$4Cb#{373ri(sx zRNYk{#VTQ>Ox{f-ZpGN<y^@_&K(0n?GPX(b@rQ9l$l<X@M+6!yg7UJ1oCUTK1-pVd zgUNcrcoq3029#Td4Z<5SFK7l2?tg7Xs$m)BmswFB!GV`uHdYD>0BDS~J&=h+4L?oh z*}-67TzT1*ht~k)C$WKyr0AElScb<J6C|TfqA1&mW%bK)f-uq2QXL!4N;Aid9c@J( ztv-Axmf1mv3A<&$-t8U?1@#uxN6ozWRLmJ*Nm??%{Fq0wl0`F>KunU3&^mNwirsuB zE=1EE@Wu+mgD)P==Wp@bu@!91wn|m`yqbMkkCCQLUod;l<NYPJwQ-kmEv@8-ApA=o zI%Twwe6j6q{QiqRAxht*oQmAV%=^D^WA5}^{$F%!74@@fLbiaNX8Zj9ZUK<uj#cF@ z-@CX7qnS9cuePPQU|<}m0%{Js4C8J|eeYsQlvZB)UhFwMW8nEwXyjaSrG-l_<vr$A z?A4hD>QXdK%cFfunBbCO|DD@y-kF5sNC)O-<JrbMl%m+1<G?AxJ_^b1kKhzFaLTtj zHQLId|JJe5H_YAa+~{oXF5vv!bLyGmF}^HHV10T`+(S@(_%D&@iG`0MC31G0vzn7) zioS-ox-SSGzlqCqPb6^4*WcqwQN(2{?y~GxxrZ&#jzQk0PB!_Y+LqrtJKIHLxu{yI zxzGiTG#}a{056Q0Ebtz<$R&QFaWF8)n2PyfC847M0-5xutL2i|)vC`<jhwkQmTJQ^ zZhHFdKKdPvps`iIn4_^*eK;IL69yTiu-G)lc+`4xL+}4w(Uw3nAeAR4NW?-%@F}ZT z%T=kRx&=Ncf+ei*^ypRf{gRy8y#yVc-Whbc$Jv_3G$os-E+4RAV`v%^xV+G8FS}E0 zzD-HGiT|BJNxsC%&AM12=B7&>t=Iz}N>%c6xK0ddu$)@WDr4p;u^*0$6IdX6ziO~z zyzK?%Jdo9)8G_vgCZ{zlK0Vo0`Ofr*+!SKXBiVKNo^`N}9+K~UY*od4n5xPNk!~t; z-5z9ebE176VE<~gK3FJmD<`m!3A8A%WN_Gxfo+H3aNF;%Y>ySBu?U%0I+jdjMVP5V zF>Q22SSXF()VxW}Fa>Xyld^`nz5s$)+1FzHM5CF==GYfq+US-JIUe3JaoFs<<o#$( zCT>V)N;tu)1QQHdxW$bo6^<0G+e;$jccE1dEA!B|wxwe|%taaRp~fe+M)gO8wmE^3 zE^zj8p{VUBSdiewTV*wY-WHN}Dv?y7TdFt^^pRH+%#C2SFg0tOTl}wgKhY7fDBEMX zFa3;r2gyyaac;9@k4&9vpOI;Vj_z#jyzl|P=_}$y_OJg}PFMx4ZwV6xTg^-mcR&0U zx6!G~(%w>!BzQjYX>8)-QkW)8VVaZCMmD`Ax;fMA-A|>Z6W!~>yuz8>Kfr5hD@9<+ zGB1F4nMiBky(-<SlhFi*dT%+hqYhyM9!n6_pNcghpgL=Grh(N~J3A}I0<6@UN5+6& zF#muc%H|c2k3%c2sI`6>Qkvrqx+^x&XM-?#u-gFd2mkIJXs~EzXAXA7sD?KJ-dNxP z-2I9Gg`xAs-jI4f>F7NfAKSg3oQ!4&Eh@V`v%5_%bhl@Ax8Xa7rQ316BeCo7o;t7K zTgV|Ss6<065>ZZPs4x96U%#!a`&QCdI8;#6@BnR01>?nZ-35Eq%IjTq-HSko{jy?` z&T&a57mH07%1VnTSC3{f2>it;iC~lty`-`CoY`e<trLP+I0=W%*h|S87Dc=fcDIu< z&yhWfEtf_V6*}Ch<jDf8b;pU*QH&2BbhZc{NEoV1k^^mg9~PLUHV<mj@{Xb>qY{C( z%~h=;GnMi#KdqLHR7a?FYNz>b?L^ID2chnVCB_dj=(3f|(jrCF{%#Jx???ps_I8nU za3-|`v2MTcuIp}NSz9cR#|5Sx-w6j1>VkYKQU&@{X;Z`g1;SV^=Icjm;F7F>lg8u% zp_YozHv2}Q+Z6jYS~p_^enN4qLd4w9>Oq4);Y@6>MIo;yD|)16os^zI3*kyX5u2+A zEj(0ix2e6qRLl9917D@GC+JNi)6VDB>4eU`*OO8Mtf)`{Z!7%<1W2_M(8uam*zWlE z87|RnFZ2Rxly`QH?Ss%nY8<4x<niDH!G-&m`-uIYa=6Gs%)7D=P4;ziVzuTs)tX83 zg{{%$5HNZ`)vq_S#$+Gb*`YPWR7=HIhwb3DwXm4b!)BIb)(^EUC;W`2GJr<dwzLyo zrDN^Nrr#8AE0#4aAtJLL$U4v8Hty0PvpgL$(|;?+7kM5FSIi1bx?4H`>n}k((%Y^k z4aM0R#_9`%S88_}1qzMF>mL(#AB_~9OW>{CGd6Tj1Jfags08K&32C)q)08+At^~J4 zu&GJj^2Fua6<~4Hz!1_R8o;6NRcyy3ous|ViIfH3RtxgBiWw_FzT*f^vDTwi6nf<n z!`HY;YcFYX*~$e;>m(4w_+isvpy=WZ(JheG+M1y9>jM?sVz~1yM3cay<^N~zUAvpO z(nR6U_OB>>W<Y|nY?EZV+eYC4hQ!?%)7VKm&0?|2QrRw$s?;h8TM0hD{e5nG?`QAY zCCen~Ip<xInZ~NBeZM^S%SP8q$mUTA*~la9=7#^+8!-psZ41(NHi-#Skt1NGMmSCn zt#U)m#P#p&bTP8W&Lb<`FfMm?ySo9M1+d;Rn;aBhmThnFs4r`?H&Ddxdns_W_udqM zpN8fg3eEdI9ncO9VR8W|7ZE?F03-%!*yYL-pFNGz$iwcty~*Q=oAdVWl!KTJfuMyR zr@a~oiB8<2#!r~JS@_S_-4t)g)MR=2)zgdEb(iP<9f_O7HsA7gLwpv;{XihUFOM&# z**Qt(`MkXEZ^J^GE@>f+dpa-9^zHk1>DbWSL^PmKM2qIe6m<-lOt+{@4K0IY&Ua8> z&8ON2HUaLGvKA|LFtbh0rvW*Ht8a6;U!OnUQTPf|-blFxmRm@<h0D%!ZPWUgv9T7| z<vi1HN*@XfrVQBK@5I{aakRrp%}I+s<_lAGiHS<28~Q-CPwZEA&-04Ex;)NTF&uA@ zJ-r&y5@3=X;cjWdqez62LT7eHf)7m)lqil~y$i;219A<AO{6ntPVHcRu(ZHbgi-Ao zlO7b6$Q>@(b{lGx3`O!_Oc+um8am|a!N%^!gBe;k(BEIoX1V2#n)TF^Q8DX4ovzK! z^?*kIz#D#!GKk{s!*?_yC!|@rIwVLzJ;A&Htcx-jPuOCLXlQ`%<`l>g{Xeh+tjJOB zjmuv16kT_Xi$!Bhesn)<QG#+7k%P47$2KimVw)CXLvnL)z%-v(d#Hvg0d-4pZBkkz zwK`=Gz+L~8pMET6sJB1M2KkT8FlX!^AHuLSAcJJOudABV=EjkQqg|ZpwBv|syY6YG zQ0kjJ8?t66o!MOIW=~Md6f`KH`_aR@cMm&l4W(o-fgA=fP*s|12^^}+`oHF*-O8Si zRL~n|Z1jM=8Gt)yc*@wxTaKD*=i0y}8cQ?6n8}i0+v0Gq>96#6w@9hIT(#E<hk3pC zI(eW7?2^SS3#yb}QE>{5ScW-XmF;f&8`W}XCv5eBX;TycuoFPnMEdhJCp_Mb=vtd) z&h?GH?mE!|wSQ8fFhiv{wq(OjNH!qMawgZ!H8GQPgXbCUdeI!?WzvV=pj(S$xX`>V z3V99UX@Zl6<bbIVmN8({?lMK-sE!ChjP+yWPp>qq-QD$H{7gj_`VAIYxLhbmR`!0O z6qOOKqz#(;K+<E=ICbN^G^<cJR*!QydY_1E)(p!|3P=W*!rT3o^aU=Vq1AtgHr%Ez zG(?aws?5s%G!|g2VJx@v=M=^`tj5Sl>~3VIgALB2frB(DG@#%SyN|*x8P{kjhwt9N zCQobf3>^Zp8_eG1z<FoQyc|mczUuhTouY5^4g$xln!J1W8K8*mM}-q=0-m+<A+21n zZ&Axo^wc;pa*UhG<|c>v#@2wO-t|5{c#ztzHaEMjqzjI-?OwvgZbtj-xn<=r#rCnU z9}HQ7>iK#m@<@y(rs)Ht(4pf?2)7%__t0<*z*Qw?-!lH3D$m6L<8?2jTej-5_Fyq% zB86t#%!xSbfDD9VKk+Oy<~u6!^fT%saiT<t671p^Rq_3~>~9F}pZ{LL{d0=PPlmc^ zNi>7~Kb_A2UQa8ayiyFCR>OK^6jl<8+rZEQV_@@$khYdrVfGFNOTSKcpUoa`{O^ZX zn7k=9q#;U{%pt;Nt_VOb5C*2dxH5P=UsO}<t9!i{nEgcAz10{!=FT>uw>{r9Y|N*9 z(Z{q8Z#Om<8}ItLF+o0ep}^CNAYX)Kkoaf>M=qZ|_E8xh2cnq@V9EjbcjUn~69lbq zipae%^|Aw~m>|KJ+ELiKjV>nL=8Fvbh!NpBlHWjI%fJE`$6*p%kok1#@5z^1#6> z9iU_B-X?lSJZO|*0LLS-Cn$36oc#;%28dbz)Aw<75X?^`-BRjpflQ}X;WQ?n7JI9x z{*6-pPE#b-v|m78%<RBO<q*N&gK9iMCXG^l;I3Yw#dFcZyLG#_Wd~6*YjS=AWG~2Y zrg5;+t8O~g4*jYVFZ952I^Db3ojWk8yyX;M*{rsHx3+OFbuhN>rBA&m8)^J9enrUy z=Vd>0goh-y{Apaj&VU*R3Z%}bpNc`gyYbWE@kTn$|25C+8Rik29cGh_l*14cpd$|j z{DqpX49ZY|`>hX?{2VYMs=y{}gaG6Q9(#&rvD1V9qu8TD@c=|)KY=+$HpHZ$E7Kzq zLXYz{;_GlWUEkud=sLqk=^qge@@@sPIg%u9IhFJH;qH#{>i3CJ!>iZ5tNXwo8Wz3o zE$)lf^wJCrAZ}~Cd{~eW<JBl~(+W7Ds>k(@ysjJ|?giW;q3>-^Jz04pY1rv~^{5|K zf4l*W0`{um-#x!RfQ7yt7u?8Uo@UF#h}?iKmr1N_M`_uA)5)z4r=UEG`WZ=e60QM- z2fI-s<i(8N(dil06|QW*f0#dhTVXU}K*z8*7{=}0?pu7S_zB;>>-IiWfVhE9z{qo1 z5YR)W=gr%|*X+SK*n>0+t<2@5cLQ@!`{D7%-KS5F{?Ug$xqEtAUG+D*57<9Ju4$C0 zya@Z9bz4YBfEO?&xZ(YInO>Awr5|k)p~qaH2c4i%+?8k|L5h3883TDWMS=Y8_RUT> z>D=>9ku2u=;q&KTuUlPpnl`v`=bdJnjWCE}OIX$~NE-3p%QQf&f<*iFWBLR7uG3bh z9}}_x1N`1lUEU7?PEV_an*7a98x5Zf?T=9r?-V#=aPL%1duU+EhKI(D-Vqgry|m5| z>Nx@zxo2g9;Tsq+rRUdet-7kolhg6WO*(uMykXE$sN;ts&PaI7&@4i<(aP$h_l-{@ zPE0_|TGh1LZf>3zra(n*qzruUG};*|0bPfiIjd<){!^*KQ)^8U+@B0HPe($gX3+#= z5kZQ7X<By7Y`9uf4Jx|&0clH@3DX_Xn+!KwS~82Lg1F!f{KD3h5k)h#NW`H>_B<_O zhh=4dU~iLW%0kG?7s<l3Jf+YLex;oU5AUmb)~ArRrN8V}u>pDWf?*hvLD?TUigXFc z8m$^uYu3{qX%^U^zWntRXlMj<3~%(SCft}*^=twh$q#PB`zX$DV589zlE}hm!oSx` z{7S;0((FspCdL_L<);j77M_z{$*OubQtjjhFVWy9{pz7Y79`A>Nf_*8csk-A)Wop5 zEcw@bl6Wz}U9@Z)B0E)m1K)4TTu`VC>ilRv^RU!lcE!<lpK;TjjfX>07=`FdFU&LR zs)&pDhIx{J4TOfH{;*FY@BE6+|Fi98JNa(pL_{w>kMybBDCcQ=6F}J0)jKK#d3-oc zGcBuw5T&_)G^H_pW%Qww+>wnC_XuGWyea$424ReBjJim<7){9W@_r5^v<(4{kC?|T zny9geCu&TeSz~_KRn}^B9;Oe~8R`*#Il?vDWV!!UDnAyU#z!YwY2cwzz}Ca(=Dm$< zxe6m10T4S)Lak%9!uZ%q-0Wxd#gpkYBQ+eeOC9g10JYqGM=_RwbpqJ%E4|;Hr2y+b z?K(K~GOK543D=8QYZIo&e6hnfFM3$CUuZ~$uT4H5dhr4i-1LKIW1eeju;RC6jv`BV z!)JTu#5Ilb#v*`cNp^!cLNfisneOF}bNbOQgGu+xw0vCheDd9J^trwHrfJ{hLM?LI zI%c=6kvTFJd!ueY#XwQ?13m=APHQL4tk-R)<))Tw*)UF2Loeb44MS7M4|dY{EE<xn zw`ub3!4^`qZ{LyNCGT(V<&TVO-(HRuW+-&)zaqQ4PKo|=X;Ht*UZI&hBk#S6ZNV^Y zlI`og?W|u>2FoP+EiyPdWNJ|&tErvgTlTMsefp7ipFbaZh|2hurjceF@w%LCraAu| zH=WCzgVk?$AMET!Fii8+=g&mPrOhvf(o#JV+;p1IA}!u^yQ@~suGpxPYcZS+gAc?O zP+>*ghl)#}I>rIMx7ysucNoQcR_R(Sf%zaiKJ}HhU}thif#Pk{n65xd8V93XW@3k& zsI51|YYA==)C3q0apR&Zhd5GWJ8k50WVG3M%UF|Wr(n57THiK!hgq{v2!$*gTSRAb znxCWF)$F395%81*aWcI^riZ9Mw-{JvhLNhS-7c`*rIXBtIAyQgEBg$>yKqW4Zc*C7 zxPj{2VLT;w2r2GYjmA$1Na&jb({?hp_Z@E@^{kp|UhH)>S_E9aT{US!7A!4O@<T&Z zHOZ#48dzy#2WtJmpc7p6jOoM+Z#fx4W(*qfbJ^bp_&G%{Wr3RIqiU~&&o#Y$TfR## z-j<IyMsNg9s*T+Zj!(7mt|OAmE}FSrNTh7)Mb;j(?j8e){W0%cq~e7s$@z-uAiy)> zgi#p@&~ZFLA9IDEC&*bk$t}>}rPILc#BOj5vtcm@s%i%@L}zKCpRp7`u<lm5w{r&_ zgF3l6thvyGJ7kKL`^(wOrh|^$v8@WWXFGj(pL%$GklulwxwYKwdfHeViqr~g<6cEY zK85v9!;sOV5y`h$3HxL;xxjF~_}bbt^|(Di=<?-RHL9kl1sdQFDbV3>Z{`@uWFrR# zw;GZd67zxMSnl54reIWz5!fm(pS^_BfGFNX5|zh}9VF^Zn+Wss=eO^WAn}J?*&*X0 z`$<T4?vU&caU5nQX7E__SvJ848~jV&{S^*~yu_cjK2yZ8tR*VAhZnz0M@ZA5Wt|Ak zfsksi>Q@XxfZV7UhIHd$0t*XMYi<$ad1(F$nms?qIDp7VqeCAaN1&GXP>=hs!Vw6_ zanJxe<Ps(`v^;qHf`yuX>J4rj#+)HPx+Ok2O|$UUMcQj{=HH_^HB0tkoIcCms<*ko zN;!w1C41WO5?Q)h=8ec273enSWCx~%?t(*~`op7fxB2fOL|%Ft@*7S=9-ao;ZaBi- zz0xYQ^$;z+;;$gtwCd2Bw_l%9t<NWwGu&UGZtS&TpH*wkLho2-ZOb%t*4mg63hf^q za$5!ZWfnbT7`TaexUdEz=lMc4SUR*0FkD^N@o>4vtqLE9;sz=iu)HmNE&o*nXM@8H z87I0E(FkR?n-v~`j+sl>ajj*82k)15Qfw!~m4c~<3^`Y5^65+FrELY?Yx~jT*<<7x z2KbKU2ILM@_BA0tT{NOqmDxD2F|izlgzapMK8;5k=?0Y9tp^wRIIB0u1)646XS2-# zdSk=)ZW^&*Z4-4q!Y0v|;K99wLgw_jlW*_Ad<NNUaG@HxO}pIW)p%4wlhFb9%z&F6 zUjy|pDf_>!94IIf;{_U1ITYjifOb(|=LX?kOc2&8h_a_ziJr^OMtzY@&{1K6vOaIz z^yS8oMkWXent^WYBs&`<4S~+7b^Ngr2H}(fzAlIe4u@-ffmn;&sX3)a7GXbAb2@7Y zB^(cST&yC)a(%P$(yTR(aA?`2=eR^BWP4)DiiEX9y=rj{xs<E1R6>Uh`*-e?@;j}F z_>_0tf_!@1K|_1h3!e@8iMw2d3t0%k2n-zmFcM!P7~w4wj)e`RSX#QXbkdv01^s4X z^HWECK@8y}P;9G_YyjL+Z>RZW1YoJN)k*HB$^Guuc}it;qm&C120j4VwKTM=t+|2e zMd7-hjj|aXQ|yRj)>0U0T4)eME_eySX`jtfar|~((Z?N50WVub%ZNXki<l$PZ&ph& z3})$awRDQp=n}^CN0ZZNs6RtcwQ_zwYiDCXi4Avyn=7O5e+Irr=XF5#40#8`K|bC% z+)lQEdwuc}00=oZrTBM28FX`cD&aS<Z(n`$mxuqgy}cpf6@q(47GVr7dVmL)(IObA zRBM5jAo%xT(d%?v_Mgul56j*ENYDNNeI@Eg*>Ou-R2<_Q(p0XDV#ataKb>!Mo4L?E zV?)~Ae7c#_m|(rjs&rK7w5n#`!Jba2y;y5aI~ZH%CT-qt)6)5`ZKwWgSOFAcS-n3k zWSd<`iyHplpk<5b@Iy=`GqD*?_^}6MT{c2tmo<EnFF^T)_U<G-L@;;NZG2-H;s(hi zO`aOo=Y=IvqyDr45dOABruoi6;Z_aYa>9eCg0ZCv_GV3@f{eF{H1eetcl(4(jOY4t z0wXwtMjaM6LbJtMh@F;%3i7?3(wG;zk=7&yrpV1CMsu1i`m0rl66};n5*w7ArFn*| z2raIeq%f!tac-=@rr^E}hXz}V%K0}Utk!af&j)DZY-LzWi{fcFWr+-c-<oiVR>T4s z7TD0GktC7$ZcA#I4%k6pSq~g;al<QrQy)@?f~~~2#Gr^=2$`@PkuhmZxY=AsETi{O z6EN|@)A=YjB^%<=-S}8!#7jl{A(8U;juqw?-CIyfIxl;x;JfT^WQM+3Nd%r_ioNY* zC*4jqn1l~0s6%K8An+!Z6dJ00@bEtN0d?s2raUwVvg&4{%3s#u2D{YUKx7$!wVb}< zQd%5wu9^0K&OU#B&LW93Cz5zRyL<Pnw0Wy0rJpt$Al(}Pt@+dw5xTuH7-A}g48#@# zUsG49UNPf<iH+G-+dNy}R_2wwZ`QaSB@nisZkX(=Fn!rXUj^lU2uIk^<8yF~1*Jtm zpE(mf4u3m0R4vP$sOHEa#tXD(oe`ts<^-lQmwY&At1qMWtKAp{e=^O_^64|OY`c4x zq*I?i)2T3iv!BZT2WNlY>Lv0aSM-=Gr49BKEoKs;kg~sE*UcLui`YadCZI^OCAtCr z+emY7JG1^imL_7bn$IqN0@|7IECzO~rjZxVGxvh3@QZhJnM#pz0VM^jN{@gOi~#R= z|L^Hf$ca?rd^TN(hM@m_j&BFzjlm=Bzlgl7`#;cImm3qm_J33_Yy0+JIrlYt0fU)O z^Zs}ABCE~w-}1DP82+?kr)NwDPusmH`_&EGtpsGvjE0`jL!DKoOv=3Ose7Y?69UJ8 zuC?UO*x#mL8bHc=?!Lm~7#n`Lu-{kJM~@GD9+CcAD@$ilNlJr#cxBpRMBQla=@&MK zjSbtALEu-%vqf1of`UHjh_8%M9j#W(;3Kk<uFpO?da>cfKHmFjK712x%>_Mcw1^o< zumR(F+ET3BzPCzChieuB);qIaeNmjv{+2I3f5t>Wv)<)JF}S#Ummg3<RFw|GD&v#p zq&m%Uz^nhj%Y0hck0b~n?bC`0qR0-{2)WZ=mDTR<ha$C>!MjbfU@`Rdzx+U{>G4eI z%=EZ8*XBgE>NVB&TGmuHd)va?tB53=9B)pM!E6Wumg&&Q<@+KloO%owi#bnd&B|3= zbp6R~7Ix1Cz&Prt`i-6HroQ=%^@V^zuz5_^O+Ri88-5O~Vo6n37WG9$H-HPw!HsMq zl&^M`W$UJY$MbiB=kMu%(=qyC5?;H`PTyWNxOaVZ)vW4_m&1AP;3{;jNNnXBXdpo( z6pJe)M(o@AM7-)O^Sj{8@{MD%Vih`NHg*x8X`x9du!%n4fEzbbgFA(8DXt}_g)F(Z zz7PLI>lvi4H_IvcZb=$Z%n%86HW0aS{!6&B($hw|VCvh);lpZvI?Bne!^h=U9xjie zOBL?`u&wb+aENW+HGKo7R4t(g-AYaQZ*Pob>PIBi9{l_HXqKrMzLL1l;*rPsX1SX` zDECxyZP!Aue$3}nPnGbw`0&K=i~cD>mhPtQ3p&_HucF&1b|{$Y4VwqTYxmA{W`6JI zgB<-lDUJ14UvJw&huPKfBnNT>Q}5(ioue^QHpToly@%-~2K;?iO%{Khk13%W@V|Uw ze=O<&X31OZn)7mb<9Tr+T5F@z2wuDw6rh`nf<F4nWM9OI)0W4hNQ*(2*g~>>c*Ej( z{N}x;H`+N8U!rql8n^?w4lo!AzHsOB^)$z7l)%l@bLPN$6}2V73N2!|Ki41>v=Ail z<+Oz^FY=P&4s@a=y4Myzlb}3;ZO*6JY2q@Y&j%NqG`8ki<R$*;DBlapn^<E!TH`rB z&hfGJ>W^0$&4xmcZRM5@bXe3p(wnGjTg8A`*M_0I+0yGvTcCVz`a~{?<h{q1=Jl+a zbo|`HHhzgUuWkQmuc`rz`<*4F4Gv=gBOU1en@%&)eL#B^0sHIu#BT2B(JyO3vBzNx zWUUhMr?iyfCo@l->q^C!T4{+qQ*XTnD9+lO2`0yrAats{u^?x|*K81w)ecB)7o=-X zMXTXq*sPD}MzCr~5UG%Vx%%|Fs{4)en4Q+}UbzLC56}dB*b7F@t{y6sA`IQQf9P<3 zCVy&8ZXp4g&rXjsy>J_Bm*&@PSefqaJPOCdM%Q=mezW~(wy6g7cKh94H!Mu}yyFjE z-nDrg2lp`=f4u9t`I^J6tU2Fqr`zvzSj!^gNct@4=kR3`?62#h@?i<K=3O3$zpF-d z1rwobFt6#<wnQ`A?94Wc?)~7}&?0C=7EQ`ziyN4uE{VTjjpGysHB<$J<gVRfs%G~v z>aqAPa17+W8jDPoA{<H~N&>l%Dhm#W9Ivu4z7SO9>f3_DDc{%&#ayOdq{_{`aQNl4 zWo`PcOTutZ*aJlsw4GCTaMHrF_P_vs1|l?%VOq9s+ZB2Ml$*tay!)TC2gPQd*6{p* zpEvP&>cU%9@YaPxui@!&wOjACfS%Sq2cxRYJFUwFn=`cl)4Q}S<iD}2D*JbG13wMi zV^Cm%%94So0!~b90o%|m6a>S!639IY_$&}MVTwFR9Nq*Aq$qMu?c7Kiqz9m_yS0;l zg&CiE9>E?4hL~>EnBFMUA=eoerE`ZO?P?fKAie0OBdDcXns33oL4UsGN^6GVK9J$> z`y&ru58$-ffCcX{TKW6l;&JCa=9C!Wwcu0Nd7l;$8YDgJXxM{V9cc7@`s;8mJj@_q zR;FoLp=^UmDqw;nC=Btl*Q9a`Ht+go&P#Zzjr20casfYnT4mEA_GW$qgF@`&?w<`? z^x9*Kgom$pe;ws#v)#8}{pnpgMY$3D{L8zPq%Uv3-hP+PC-COa?<jK10leG!^Pke4 z?LVdewUh4rX@}pV<v)D*3w-!X`pwty;j4G8F?^a*chV&CaFqfroJo+ZCoFCm=oXQB zh(Wc*OmCK*Qp&?e{cQrD=DEMIy&=I00P_##wdKuT;8S`!nosSkr|^(kvHEU9s_ye~ zBCYV6HRIOpDsJU^CE<no*ii;j0k`spOy}(E%jOf8qia5$S~WRjXD+tIX*C3#=AO+D zG1Vpml6o+$Mx&Ezg3br_K_c$s6Xqas-|%TKwq`vVL<h~CN>~!xRHvj+dZ}5)=9b9l zohaK8q4a5k*8o?1N#&iUpc*PT14p^=4Fsh8p#XgSEniUjc|imQ4v=4E(cezV(FK;k z_z@P5^1b50gKqhj-@h&1z3ac-+_^sk0PfWy@DZy<AGltl5}vJC9emGKV9oq0^GU42 zd}4~@*xtFMS~sr>f{s;|g+XAfbN)gDm^G>ZbZn~wpQzHN7>dOdfmX1-AyRQCaS<7< zy+-ZozgsjC7yVMoof(G4C56_kH<(RF@^hTeGWglGE9+#$+7pj*q`FWiau&NK{loxX zckjC2NEyDKR_D{au9a1UR3bk)D;Fhmg98+AE5!d5<&b53UEt4%tb)EDlr=I?%)>;A zb(y+K{Lz~;1H(6B*3yY~A9R$|_N(0;!{V4)lmM7$HfZ(XpU^Y&^XEG_`)Y#bfcB@d zSFCCbeOnK*NsfyxQ4dP-*u}!YK7J@TQR)o@g~6>G>FXFl!I15zi##8RC_cT!hy5Jw z5(cFC*!@~wzP@^$Pq7$h)BP_)Z@j!w4EwxIl15mE8h6K(MsrL93&PjI_3m%qto#0= zPUt?Uw-NIGMWKUGYUxO0&GyugA6Q>2B(4elIX2{G#jR2hVav{(*SzTmgun8y&Nm%b zuo+Y%RaHbYjwJt7i!7!wz1Jk4V%RmC><O8bl+R?UKi-ry(CJ8G>x#GNxWw!;+j~|j z>1C&&72fK6eZOT>{4<N5z+bbw_ozDWJlyK+JfNriYSMA}!pkoFw?&UHUp)loD1Yqo z=v7;J_de#|Akz_IEI3u$gU<FNHK@n+?k0eg&0^0xzTtkdFCRLIDqW8wc7qH0cxHi6 z@nDMi5&~^c<D8{f?q-!w(9cHtG6pVY*#toZ{5i2PJa@hkFmU?iV1NYalHSDW-&VJF zxovy$*bK2k6)~9`JnaXL+oTUe%5LY8EoiccdE$6gc!zWHMXuRJH5wYz6JvB|TE&z` zC_$K!VfLP<A~t|SWH_97qre~<aC-icnqNPo749rMXOsAi3{RDP0sXwJF42sx&e45* z!Xf@es}b0~tAYA}ph3SD^+`6N<YXPKf>(=S_TmSpT&N2`<>+$xiDTC3cyeT3%g|*f z|Ei^iGH)sZGZ$LUz#!pMp7JUy_1g~<!=Ok~`S4)euz$W)#I1V`&)D6&7~QNlxWF*| z!xM8P%^~sM2WN#G)K}g2@v?o7E%SUriyYhT_-?XFodXEC@~w(2k+do4k$?8Pk0MAy zLnE8NG-})HuGikGm#BR$SgF8Cef8&+GHq}>hZgZ;l*ZikLky(ZQ}x<{AU0Wb^`S3# zi_{x&tm#flOm3c+|FFM)P9rl+;a1xJ-%i;P(e?}*F+t~P?t{a~pJ2MLQ}|~oKAEAL z#Ay_V;3g1haKeehQYM?85FR7>b?r<-PHsdhlhw4eNJ@x=XJwQ@S4>>&mLj6@t;X>5 zw~fJjc~fRtd+6`peMp3bkGNn1ibfjWJC22Mk&G}g`Vu---7PkES*h@jRZ=nS!zPV7 z>F#^2^-{n<jF5}vHd3n9ZffYOJKC1Uo<^rIElOG2oBGI25M({bt~bp60)tU#fL40n zDIt-z6!MK<Q*S32C>Y(mCor%$Cpb8ac}yVIpuA_(LB*X>$9`cIK(?V)a;fcXMb1&E zB>6+m6j1rWnr{Vr;-Z}WVt0Tda<ds#xJBLcPT?gR^}&@rJJ{GGYV45nN+D*f9_<*l z4}SlazjGcK{J!(3>Uu3$g$0#Rv8>%0?nlqC(wTY@m(`6)cl!NG$W^jCpj`nDhh(_n zVTP){)<|C{TtjT_?p<^RsZoW=Kdi{Y8;Z_hS_I+9!#k$~czc1!)%$DTkhtKV)JO+$ z;ZAUwRIWjUcP2(KVVP+^GYzCg+7e1U{gsA^3=lC}n1#fEFV$lIup^nSu*>is#q+AO zb*^_^9(RJfzY`t4M|v&=1F@n}2oN*-adG-F8A!wFIaepuTQ@2bJ<I8x?X;cY@9wJl zWMj*ztZ&mp*EHgm@J2S+UZsungo&4@Y|7eSl=!soTSoS;`0X@1?_bi-zlpr9|C%0; zeYU#)lHLLx+&|@CroaA4nI4_umFS%Tu|{s%Gn1O7zp>N%rbmHM5bQyd{lDYqfjs;N zK0KXPmo?n8rx-?ofFzvykMR4jxGKv26s;J4m=&Y`F*ZY?YW@koWbQy^!2{D-{R{Yc z3WQ`oqiAf|c+#JzBx(>Uu8+an_Ny^<)Bm~PCu;ql_y9z;JuUrz&}VC1Il_)mi%P{8 zITar*=;<{-ArbHtez76`0Zxu1aUS8o_~#q=X`}yhN8iD#ng8l<*dBu#d_1AP8LfZ7 z_;dX8C;L|Vd1b%Ji+x<PH^==K@b|mC`s?x0tNu?p`B(A7Kg>f7-TaliLD#8c`;((3 z{4=Mf?Q?5Rm4D_Oc@2t-KNMGZjt!jYHxUOk%5R^OFmBd6z@$q@?8Man53FA3H(^XK z)x>|~@)Dc*5s*S<D*YXs`J~@0Y3A>`nd2Y7GgW33?C;b03Qf#P)x>`B$yCWpIxrJh zhO(p+Gg-E%WoZ}nq^eMZ(66xCOdeV*R<7a!+`9fpT1NcUvicv*>ce2EMveUp<)Nig zT}q|HZ2A!n&jH0+;NPu7J8%aDlMeB*%V<{i@d6*en-&rhZi<iR_OWF&Q!^Uavi_Ou zRsS4+7<bM72%p#+vp>M!oO7W6p7sSD3XgCO>>Dk!dV_BU`c3QH-nhAO6a81N^0M>t zN*_4{FX)5c-_PlY$Wv>t`>t24dS0PNsnk68b}y*-!Bxaay;*sVL5WI=xnLe!D}QoF z>=5w7Uny>Ww&YCywNP1?ekuE+tbVyS>y=0zp8=Md^_!v=Q?CC@DQQCO8_fN@zIA^+ zxu3jb&Q*@zU^K4*=O#P7uX{TW#u+~JzWP&k`j_lsip2rQA~>j%r+GG?6=(BNV)FVV zyvxZmZUZo}jlh;+R`3MCwdpQRvgEJF$*4G;W>fy6;&CLf9(519yO_-;_3qZzc`>_~ zpJE8MEoosZI&iGh8FZ6}+dB_8;h#UH$$kb6LScX;X;MRJKph{U+}8TK6>TOR4t$y> zXE1_ly67gquCGZP^!#d4O=ooiG;eaRBHVp1xqCN}&*N%1ALYp%{0cZEKZ7$jyq7#S zO?9MxH`%pKaw%@njDgzZ54~(Wga-Jb^Y)&!aPOTOA2il6J;>;LvLs1A30{2uocwy7 z25*Bc?=SyMO#rR6w|>oT(}`L=JH=mN4eC6>Q1Y-!d+X+q38a&wLHI0TBBX|o8u2Bk zi)7$V(Ch+F1J<n*!=4Y}Xu}Xn-bB0=k=Fb1PWwT3R^+t4zGiZm;oh%}vn#3ihQcuH zCV$>eldY{MW^^!!(Fn!_=PJo&a181hNjG7*<szA&Ep45gO{;MNoMXbYEVPTr<QWME zU&!+9CZrmIZ_+ZlqU_q?>wGdQ5<v<BUaKc?7pG^7qf+?H-DEbM=h#+#QC&X6!66Ay za;Q}M5h>-9ifNuBiM;D-76`z&^TTQgLpjTUfus(_*}+|LW{=Gjpv2Zza-7d*ymzn~ zvx=)H7@ra)ptPkVU&}@b+yz`MnRuO4^BL;y@jVu!<UQogl#u@)w_k7@lH)Ns%`dV~ zMKzxi7!jQ$N(7*ntj6_%YAnz@;^u!W>H=mV4stSaJ9al@_#qQcGT7_Pkh*o!!4-rT z!^CVsx5o_}oXK(}yjxN$e?obi4&^AH=A-H|xyb6Itdjif4EX_D|D_?adna$6ygEKO zIXHTSlg4%zDKD!u-e|$tChAE6TLSAf#p%fBgtJK5o0Xm6ftHuJwvn3ywfQnm>_8XQ zJjtfEHNY+?QkcWOnucp$P8v*7oSBlR^U+6JW`wX=RvdQ_uuhFgK=0%^rLT4K^Hx(I z(5<b55@qkadxiat=S2iXNp_hn;0;__*}MWkid~AyBnOB>7Z+>Ui)%J|Uz#~&%aj7| z)s8tnhuOy*?t3z+YC2*#h<cI_in9e^JVTPm?!hj?@sL5lGMw99Ugqb9m^rdQDdDI^ z&|B}DG@)=hyUD%(_3+`tdwAF=WX^7~-TNlFHp79PFL|+L;W^4vijTFOa#1FOi+TC6 z?j?sguvLkPID$nMaK2{vhOPjv2)Dt8Gq67J8oI{=Rx?OEg(8&mJ{islhC6LyjX(~& z%7-Sku-QBLK;fzYGVB5hCwL2RqZ;J38!aA@44$rv@qCPc;{PONGKP+eItSPa^8)+? z(*_iDevYRe2Z>D^<0BgKX*T%SHJ$F~FsI$*8}2ZhQ60bv*m|A~E|@m?g!I8Vp3I;> zY>PH}0k>tmb;=C7Y20)xFjA)Ek7U=ys+H;HL%8VG47-HEP0&&j&}{F#C-b*W;H4X6 zKn8Sq&*i+}cqVX>%(Z=KNL<9CfS%__IY0%Wb=@huUSFf*qilT>hv-cPa6*wUNzS0e z1wt5@LVJkr&XSIw1HOp>xwW+$N&)IN1{MVO4;m$~ziV6t(X(o*0`b0n(V@{b3!==3 zq#ds*W3dG7bB&f&Npg#uTlGrb)GSMptt<r^-c~K;`LI@0bw7FgF8E4GL+v*>V+PSM z-WwwN1ZZ@bBfKu}%@FbkG*7SrJSK2&KjsrS{8K#7)fpY96DY)z7=x1s^C?bYv`CP| zD6zo|XhDRR7@Fw$6;LN|`8^!lO*k*s5c@^cxrL*$Q;;T)u|2K;^B}J{w?hA#=kr{q z?kZy7Jf148t_ZoXIvuHd)_3mSZqlgYJa?%q4k=cQg8iqqIe-gojiFiv&)}YbUlcsj zngLRoR+DK#sMl`t7|?PxB(#P^tijFwI01khhrS_Fe2*@oNykI?&ouN{Mv2t2J6dM! zWo6&dsfF>vDatV)6BAoL5x`Ne8L1)yoY7=DCP8ijPzewPQ9(vvt84ewr~<+~*$v;k z;`FcB?w)`ngOW5b;^_SelI{d&=vjt0KsM{8lE?{=(Pju1&2`>V)puPBLAJK`E4(I# z)`!cS5FwhtG0qHJqgtrtVWFaiW6kT&F}!%pd$t^zecz+EPzDhBuZ&-J`A>4qW!13l z7#(Ou;ke(q4>8!0@^|jqk5<NwHy2r|FlBaz0O$g#y=*i^KXS9a2%z$NKsy*%g!Bf} zxh2t1nJMY@{(fFs@>@^ez3y}aq~LEvY62fI_vE1WDr;lz%o*U}3j-vPC15%YCgL1K zZU3`sBKtyyim3DeB49vfAI9ra0k|o*E>&v8d8Po+_0{wva!hbtfo6fl`ou6-;E6oZ zbm9K-gyCBP{|Us!Nn5;%aCuK(rQUlCe+b27aT$knbi1|)S5Lm}>!zjNS}>Am19aA| z8wV_c8;qL1_D5o`A^L4|$F`LKW_sL%8Kl#>5lnm%92DIbUySR7tjL$vR*-B-L+kuM z|Jo4PWAy#ILq64P6!^We;Esv?+XFn+!!p3b#eO^3Q!gn*>M<~8gS-=khG`<pXE16U zh{eb&2BiL2vANj@IT^V${Ai|d{d-P3dM%d%=v6^v<8`=oaxyqOy%NhYr)&f`3UCGc zpOO$D3SpP6#(y)A<poDKxa9;VBNDFT*4|?*;-@T9u;uDFuq=y>Akm!F#)nSV2dEL) z0>pjxF~`+R=*}R4Z>1ox!XzVrjUFSbk3s}Th1CsUR8#okG^sxp6DsmV7#<!WonGM= z3ofhcb(c_QUO9Ub5y73ETim4=(BQao;=X&p$s$3PM3_R>F~<{7c!iC0B3i|K^lDh4 zL#&4RXljfMn&#P>{DJb7!xkWGXx~UsDJqRUhy)kEjf1o3U?mv>A=^V!?-;+44hJ4Z zNsSyHENG-J$dsU|fD-y!>~7jy-r5=pE;@T=8jq5Z`TgL5X^O^cwgteml>JW>29dU8 z+m=MI0GE3TG$d>(&?Qi7ICX-&l+fXntY8RSp^J-=r6hHMf<T!Z$*6cicBOGLg_N>w zvr0C()}GYCv70*I`sc-sdhHYl-;c<l1HYY@$tBQmBy_DRpp2&|^}%tX)CNU~SwiKL z-Oa8vaJ?>n`0v<1GH-dsm`CPCVo3$uZ7chunDYsNvMCD6D%}DLwc!@`YzxOIk!KNe zy=&iYCMPJLvNBd^xvqjkPagHjhxvHIQnE{!VNbO{W2;Gqj8aAk-aIr;dC56lS6~80 zD6q{7V#GG-Esx&_BRdAVc3tz&(0(4*mZ2M8CJ}^;s%nCthE-m(fRm=@$(&Iv%EV_P zB0V*GR7~z}ZGEV*2I(cC-X=D?IgoxgxyP;laz}f71C1udynC(Aj@~98Qq)B5bj?v* z3n2puS@--Sv}O|>quLcnJ{pM-h2t~{;Vz9J3ZcwbB+QF)ZaTWQhwxQ3Q|xn^3^HV{ zPjkorxiz{oZV;I89{_WQ5yoA8=kB!N95=^yZf<NyF10KzvuN_X<F4zdrBc9jj$;hx z3e#A97H-X%+x`IS3m|crI~E#Y0Vd%}9wsCxhf;>^o;vD|B>EnWXXJ$)7;S<4W*3D% zRQr>tL)A$Ssno`M++|99@eC-k8GuuS?+?}1Aq+P3NI&r_J{gUkIZ_N=_)RUsi#T?% zM(CS1-fq96F2>1Y`)cQ1va7z^>vMMQQDLgR@U-wBS#^uO3;?vV0f;fpQAh3s_XuY- zP7>JS)$cGkhr5{GfQ0g)j7)}t@UI$AFiP`K<2h8~$b@@#%!aan)fov_xpq6cd+pYw z_u2~7_tIA9Q`8cU7I0gh2`W3O4zo#z)hx=MH))e3m?hJU{F?H8lXXiYq#LP>?2_X@ zngv*snj(Hu?UPSyL!KYyQ@N!TsHWvKz;7l2RzqA%@Yc#`YZ=zMUjIUzwG?IfVB6lE z74cOox{70~XlF~&O0-5)xI4a4lynoj#{e(n__U;`h3Vtba-fK0yc#d_TUoal=d;%; z9ilr_kWwuv_zo5A*QfZOoAaeNXJrYTxf6I%G^RE0m)?q-1#@F3lpBWvIa!aJg-~Np zg!em0+1B|?vDh9hKL*ugVbrRb$WJP^Ou>}D#HFBI-!UjTvrl;0)XqGN9}c34=q^%$ zz35eVxa=-G{I_3*)lca|drX7rKV12shSJV)AT(PFH`>6)Z(XRB)~Ow4tO_!gKn!(3 zZUZltfeUXFcn<`5hHOF`M7YI$jrG=)N{>@9OS5w6mHRNm2R0!BpU&Dr+Bhb=T^mOP zw?b4p!TW!wqVYv>m7oRSMeZy$v42B8IAfCaKb~T5qi)^^{em2hNQErh+B9ceU!zzL zO~QtE1xP?-iP5MOZCuEN4`p4*QK3YUO(`-qM0MAb)YT|cLUIvBdt|LOueJWWX@JvN z<g;#?oT5pn*d{uoXQ=V9gb!qov%1RP8VR*q3E@XCj}Ll^m;(_1`a@|6;0O{dE35zf zA&w8DB{~uPlCd=uWvNp`M)W0WBirq-f<mSgTKDlabtiyV-avV_!M=qC$gP{y)f(>W zxT45yCawT7df^3PaRID|F+W8wpW3bLd0t}3)ck<W_RKb_wT)gH^skztc-OOuKQ~Fw z@PrpL??kV!*{{uOL*ap}0at!WxXZcMb;5ZElaw{!7PL)M1fHBa4&DGyK(N2zYGOj# z_-R2%$!4;H==@to>zkWPdJS3t9PgPK*v_MMz4K=mjjFlr;F`@1sTEXlr*wVI{?v=l zhGc0XL3P|-IPqD0MKqxpLWl_5NX>bB<-J9|@54$v8{f-_JWmE5Y;WPDc{glkW00Ch z<i<YG5!F0|Zt{aP`N1|xlk+OP{qT-mJXx+NV#MN|N6dz!(3~0Tf;76<Rx4gjOQ6$M zbM`{n?o@Z}6R@$9=s;e0Y;HJ(bn+Pt+n;d|An4b#Q;k7db1b;LSgG-z)4y^@`16XR zOOv0Tym@u->bqT_m|&F_$!Rv!dL1`<J@{hih7W`g`jsdX)B?4D0L5!erwnD&WM}&Z zEHYA-DKFW%8sFhbF@50#rKgeGHxE2;0ZruK>zd9o`coiAK$CP?BxDwi?kq<07-}_Y zOQdZ~e0{t<vsU$9pp~f=zO+g&?X8u<H{4q6UrNGRW_h$4jYVNoOWMnjqGK^vXYaQT zL|yXOaNLa!tu5}{2@L5_r#%Yn=2)AFjT2>nj&`wY8<>x{BSAKN7#EFP5P(!}9Ey&i zw8%;444@v$rZe;+Bn1!xliE6Spq_SJJj9UljvtuRc~LksH1TdUU)U$o`Zvn5*{^*c zc3gW03@2hWI1QTv?941JdJ5p8h3ks%$;RtW)WqJm@-o4$?@0`I;Q8DLG-)SZ3Ru*V zvaRJU+E7DvvRzq+j<1DiT3-hBcmM#%I`^FW(ml5y-e}i?rUIic#bxfTuQ$eOE#ypw z5StgonqZFFY%jOAUK)sGi1?}``+ts722{g%oDa#0oUhAzV^NkY30a#yN^}wm7bb+m zg81Wr?U|2;D8o0y$;4lini>%$k{ryEF=|Xv;&z(5(V|?ARH>7!OvvRE4dG|&{sAg) zK0mHBv~*HM)-Ti;eL?$J@aEImJRRCC)Nl?>r0cN?Wa_%UMt?k#)NnL*_(Z!+_8bBk zi4e)j?Th*ax*g?yE+!j7$=S?J0m^M0LYw0MDC%@^wS)VxvBVb$H8ZgCIKm~~I<|z* zc55ElBWiDEz^vvUwwf2isT7g=vEfU4hfn_T{^gUCgOeZjpYIvIxSmy0#~53Qj|d?a zWJDuAd56!wgVTG4<)?=7M7545(oB<49A6s2T~p*KcraFp#Gm#=0qZA1cR`sw&o)+- z^lfHcX;bVvusS8#P)>vqt%q0z0jp_O<livM78}=IXz99il6H~IJliETW)avsM|oi> z;6)MwW+!c1zp#D(5-7R1+zHE^?YLW)CqXn2O0o#v(*iwojB;S74WhXqS-QN(R$7cV zJwk|s0SC6WPLB4Ek{1X6IDEdFpysxQo1PFMRI#^-t3{3_HD*1(z|}<$>Ku*FfDIlk z+|CBwG%hh(LUKG$D<gd}n9YgZz#dR;Xn1euH;on^qjq|EC3ipPvovz&>?RP+*9W0A z|B3=?O9I`zfe~t{b?=O(C9-4(NP5=BD-nU0vr)3>%R4V7QD={w(J<7lUC#LD-ZY<# zGNhGk)=BAM6MKMx-@CW$jPZK?JB}Imq)wVAd}XX5>-G$$QldaU@W{R-PkgrI3gz(^ z(31%V(dzp;Rbyy(>hNy;GD&QJ{h6EQ!+MT^-UyPgL#%%yo&1&jm;y^K9G!7Rl21tG z%Wscbc2(_HEsS-Xnkfi;gdV2n@4ze-2Y_*^1%6A~+x0cA`qontUNXhnJTy;S`NiC^ zZO*d5K;e^259q5Mq4DEfvrO>*{q?oveqxm;p2Z)YuTbu<Fb-P$qU{;km9dd^J)dAm z1TNL1rvEoAcs4fevY)Z>N*1qSzXz|{FXVfVe*CA^Y=$HrS(+=f*D+SZU8y%MJ^>wu z4_mM!+|>){=sUlg=8;R2U$p3SqG5|MJPB8$AJ>kMq;$+Ir$NAHqpF$)q^*e_+I8ZR zJ(x3Wy;O!L?*QBhI(qxdJGqt|RnSg_SPTiiDT)ZiW#Ck;!qSN$_0foWO6x_-xqfcL zS5q#%WAOxVuPu?&XqG&yBTXuLyErd_%)^3o$zz=<w}zso7;#6Fy!3`Z;o`7?;8m}v zv8*x9a7c`V(H&Ddg?iO!C^1Xnfv2Q2!K!1ks<x{NUP?BX<|5n9A`%w79T)|ITMUUv z{AvMp%x5T4XI3=`i9ntdacPfi5UzE6v)#7rIULsZ8CNdc#`Zn1CDX>?VywBg#*<hl z+5)aenT_1o@p4&i$cJ;}M?$E&hjoWlIpcT*z+&#|7&a)1z@Rr2=j4Jke}IRF+02Ei znqd4VrUX0KB}HE`gQ&X}A~lsba&aBN(yBg~z8;m^2F;Lq(8#<bP;?uxwZt}WEdmv9 z59V6E2yKKOYh_T(01%#EkT9kw<;cWW$U8r+P~R?d(+>aI^QxXEsEH4)9z1p$S#O}Z z&MQ0?)BIoaf(=7)TU=DNKnt8YtupSHlr!NHc(;_j`SJzBXD3GE4osw+WCV+|9<#}_ z9#Ugt((WiK8IO_Gn$Zocq5kIPp7(`0PSjQL;q(-3WDsvkipWlmivg2BS6358<#@(X z@`e{NL`+T+7~g#a?vc?ZkNQ9d5&8bihH^+oRf!aZ+A`XB=LdnBsHPW$3xdTfP4#?V zgK#^o(*YNF+$=yY2$5>m>`s=|-VMC6^hsaxx85oTB!PVMX#%%c2CaEbbcJ{f$&H{N zz#`I#S_i))^}(k=8vV(H3EAsq<#ktU-aOK_Eh`}AGhkq#>C702HHsUxGU*_j{vLV~ zR+*!=+j14o55#=(g!k?k7PX3`<BWk)bp~hpzAJknv<=KNahVFN&HQ;XB^ALOQqvLv z5f7JZr6AA_65hl}M;%;ztH^dRu(?h?liReEVPXWxv*|(IWDyZoRK}`6AeVg>M@(jr z?8_({v{qp`EY;(lUsc0AU=59WFSM9>X@YN)#o+oH{;S7`%CJ=Y2Qd0ic8;0bEPaa~ zDB>sl?M31@c<NiL%XrN}6cb5{XfYFIOhER2t2#SNB+#Phhe?w|aVdvLt&scIEE}MU z?XdV%C!Kw5uvS3X9Kq(FQv{XMoD$NU5V_Sgt4o767NoQcPF1A$tm9_K=Y<!<uiEqb z@b^o_P=NJ>y}BnezLz|p2(0!f1#vxH)J)tMHkjb>Nb!wXy2FS{bCfL0kLErHJ1l3X zbxhJub6BdK&!2BqKU|pj<n|?KrWctPZdz+lH9b|2I3Oy=AzF9I1HZmKqtYGV?#WfR zQn-7D570Optt*58NghC@dJNON7ia{73VsbFiRR;bp)QR-j_{z}3k~DgTus7wcYaMS zX5-Ora_<q`k#8T>ldSv}S621<06uQfheumj2z9VV?g$nAiBjE^?&2}U)Z^|rsma&d zY4SBp;M%caPFxx{v1t)cGy=kgaR(X&Y|Uo8*hbxE5mP%7P&TX`DI&xzjT0ji+DKzq z9e5`*Sln+B5{sN^R9)uvjLAkhK+UPc1&Va)MH?(T=GsuFp3M7bdMr&U(YG)Os3k$W zsZaS;axn*HutRh(*;GhKMVt|VWzrX$K{l7LWjq$5+cD|7QI)S(b3U^bwd_|{Y}44Z zl(#Yqe{ovG0}lD;JumbW%kiFtw1H+qydnW9XN07P-FK|%rr+eU`r_tmO_zhRtTF5N zef|)zTcaP3&A=Kl_Jiv!zk$Z%c55qnf)S-Du7UN;gEQ~qUXzN1<1^a@7DiBymbero zFl9uVVGFFT9X!41vIZ<+%vOLM6)0u8B~~*G-Alq3lcG48*W!Ilgj$o12ws`Y)4b(h zbwjg=W<GcCwCZcqa#jOiy635b;&wxhI=S|hN2orPP^;F2+>hxKDX80#>(X$K|2BEZ zi^Ig?9eYNd6_B?yx&v#CEze#j1jW7wAcjntcMAOAunuTgwxNA0y!INBH1XKdRdf5h z!rHY=nKe0XI9dxCN2_0kKi9q-d9HmK=8OsBtQzx+Fd?dQZ;J|7!)dDJ+ak3_)m5=t zOpm<^S_{P84Rr)-%PGF@f|b4$#mCcU8OV2vA-|<j5f)FIphMcl)R`#Dm}$eIf2SRX z(nqu|!m0pq-NZS#{1QWwWv*i^2Q}VfC<H|Rv9^h)D@de$zcV{zwV+?%%C=;q{6207 zfow`TV|cq!E%s(@+`^R>(Nli&78|=;i}b0&lyYQ*fGf<Qp^Cmh0L?%5w09gCS)#@z ztjkegh4v}uXb6?+&^4TJms-MN=&0wGf<oJf`x81>Q}teQgi^1|0+ThEuIWzCDr#pg zi34mim-#)+OORoBcA&+2zS*;^0V3uNQ)R>44mW9Uf6TCCC6eo=Tb)_Vmed>6AEom( z)J7C<wbe#j10NFE`tr+Ngh18A7TZxhl6+-W2{v;+@%`3_9;C?ncqg<u#4mo|iHR!f z)Zy^2=jP*&>n+KpExn_A?U+sIC;@kL__u7t5WWX0Fm@RAJB)eF(X^L@&kp_ncrcOB z+9LijS9X)_K9qC7Zeo}Mww;hv5O5DVuPLN=$U8_e=CqmTLA_;b2=0_N<(4YRKhl`O z#z3TXdd&%Be%Xs&t1#P*cd{xG1@dPS3<VKUB|vC-i};}EPc6=zBF0eGEV%rmYUYAp zlh)H1hAh1dYPOzLoKeIyOwDEAC>Wvj4d={7)|ys0(-Tb6g`>`tl%@jsc)BpQ7xY|H z@~Oss#9m+J+0?U9k?gWgPe}E<R?R?<6g-VB0aPs1z;K<U2vmHpDLQUUKolxw{FLse znvUTM-Y}QlX?C&h#v#*c0EsV{8HLph#_fl}rdmPtw5G|iR83h!5r+R_DQ;s*c<gEn z{f2V>*}5GNlymZv<&cIcCEL5+mdMUK4Wa8Ijhs&RRjDMkCNf+p9_KS7J&K+RT|n05 zMKOilWNLwOPvK-Kzl*O%cRGI}8HSV&AirXrx^Z)?C7(xREOcdmfe*hJG>dj!iS}R7 zwp}=QzqMsMkgC3ozRq8Jz3{GVY~jtihSp&^7Kj<Ox{IoNSy{1BFc-$kr9vBZT=eXe z%^5Im{fxa9(ej0Cb@`mS^;}<D!K}j`N8yIr;J|({#El$hC2)a6HyV9x={W@9Xa*Gt ztI*8DLJhLx#aWmbBS70=RMR?QWz)C;f-OTJVKPqe&|n{EFeO_gQLd(BZtci{E@<aW zBCxV?C!$rG42H7|rNAH@7>sp^n6zy)N;ZbYbhg;A{#53|u>Iz%s@ybROi6pCOrEH@ zWQDn;giXeaB{X90wHS6bBbGF|pNN%m%v*P$RL6rQidZr;X{f#}&g#AA84;z>^?Z5_ zMfSYpOg00QXd>z<aK@B>O=<gc;*z&0@pCqqk)P8AMG-=CmG?O}qNjUS>Iu_lHfA_0 zgG5aHQDPi=<c|ITCq+d<l;F>j#hrs2{vAsTVUs3bZEq`a%9>ZGxh<agvqV?YBe%{u z)+<MSMVDNw`0V=Zi>_|6D3MvZnMq^`_SRb#z&8ayL>Z0b{2Kw(LO4bU0jX&pTi_|i zh|Z_QIq9)be~H4ChLopOx%bZ%Bt9`G3Tu!}iRW;b;s{0ziA@3oq)-8udT3{^x2qAR z!&q*~u&k;-lAD7tX^oMhJ2#1Zx-3bfCK3G8aMzo;G|1*tZj-_?vfdmU=S=)G*Vq1U zkRshUb8T*H=ZQ@nlpWoWtT>ksbv2T4#TIg_38xq8;$d61oGn8*vX>+rL)0&o<%OZQ z=y&<ds(_pWu!M%mWmOQ(kq`jT1A9IaIgV}w7@k-H<B0=qr)GSB$|H=&i5|Ljo^v?M zJj3(P)`OCgwJ3>wf}Xl0EsO8PGGVXb5ZhCSMzR**(cq5<<rz7%25PpKy{8;Zyf>~+ zi%}kHV{nlVK5{FE<oMHxdSORn`>b5MH_3*boi4L~uSF=pTT=_?PrC(Mf(dLfz`zh7 zV_B2e=_vrn8i24Q<5jLOoRqj1kP**S!@y=1vpJ(bS)~Prvr9J3Q`g!qm1qVhBbm}+ zG2(USFKd%QO7dmf0rlLmi7IP4Q$OXWTgMZi;|dsl0zjRzC#FJ&{`s5U_BT5_5C8n9 zKmFy;$rc?klY}}idzZz>VuE}^ubQ53;nNnh_ujPfzg_?%32b!TWtv3^7;V<u=t(m9 zT!}D}DBNS4D|S(lyZ{i(s2CTN3^&J^`+Psp3(iIhgS~*;Po3*LvADV>x9;Jy@4Ci< z{gd&aHT-@;U=G%>gF<3dDaw^p%gxbZDKq?#iDo-8>Uf-eH1_axTak|a$feLTc>{>C zdP6Lzp(zd@J}dzKXA6lxOIl;k5lGH}A5e-5OeHAFul~pDDB0M!9U26js%tHBb9UBl zc;QhrKmLjWSey7;(UB4q3Izn!basI%+`hDEJ#V<k`w|O02c8N&OQ1V*51jRz-{3Lq zB{uk|pKQiktg*yTxovT?(d6}#C{)K68SSm57m!*-5#W;iRuQqF<KY}^)q;i~pi10T zzmbT@!BS6V;2UF@K=Qf>dG#Zv7v$$h$WkR^0p|Bs$kyYmw{KN^=UoH2>S2d0#dQO; z5|2>p{L7u9m-k$<jII|EG2^&N9H!K}WalQ+vxNQB)x3gmx)3n`N<N3zh-^7!BuS4A zxhak0CQC;zxUTm<bM@#wjRqdoXUyaVp^-#lPo4Wgt2$OHT<8=!E&_#2sc+`?`Ll7o z7wIbn3gC$}*^`mZvRB(+u&X9#TN-UuZj;QkHN+`@4|6^0YtAJ?4*$RewG@032*d@2 zc-zlYI<zjG(|og@EzlXNHjv*c0GgS6dkwIShx<CgT(cMyVIktVA=Qm@|4qq!OH3<b zG6!T2BC>jwVK~&1HOJba?eT1Jnlz(b;2qwMRO$pkWJyKI!PgQ642Olgwob1pwF9e~ z3|5@8LQ-fPM)@1<)W!x<I<?Al-&+sl91I%7vliE&N!RYi0zB$h9gA~PMcJiZwT>%d zOLTdfH;zapu-!F5TVdV?A0==?m{zUMl!qUb3wWW(wqW{K<B8Pk_10xiLtahSoJ{ji zMK!PS%S-lVf{EIvr2!ECXx_9jHjSRXz`Q|EY-Mhj9IS>c<IHTZ4Bo7i_=!uR7nyEl zHwQSMV~lmMF>v89>>kuizZy}-Mi9Z-3xLF+u(^kDJN{=A|6kt3C+$k<kovquj#gFG zGZFJLX&a!^1USf@tpsP5Mm9lLg?Q8wwef*5)`JJKM!yTR^1}JvbV6*lfo1-~x3?@J zicJfvR73#nY6|->9FktbM%l+ugc2sniDxUeO1244V5F!Awgren=Ex~4+%4hBBDd38 zWTZ(`&ERq-zOKj%*f_HDB01ZII^nO{J6NT66mivQkQdps>{4c^zKm6@pS248wvLJN z6VELQo!FRF@*vqE{wg>v$=23^@k5pvNV5ykK9fDWTJU)t_gu7Ta&8a3PTSKtZEd|k zzc&=<S1^u&(kVhu^7uVaNSzh?H%qyE41rQqrQNa`0)(M97Gb$a#uY&gvQ{|SKiW-z z20^L50kg)^ZCDxW5L)Al;v9XHIU);c9UeRV^XdVUIiH0KB&_{M!{cRBs&qYP(pb_1 zFF)F~Cv=7Z4zM&TWh{0PSJG;d4T@Qj*Q?#ar}>~78xq%EN$-e?_JCqI9cGKu{Ba_E znQZ~`xwTCWixAZumO4E2old#bixaL?8F&Pj?a3ePs;~qgi2Envak5%ujj4fQTQa5J z4#NBs9)V+nfb1dWpYF?RGtf?RAN+&h0d(=U^>jVti0|$$=bm8m9sERU5FIbfFw?9g zjbyC-O)L5bVud9jF?L9dnL|L=Sapm<(T-6Azk%)z+hME`5BnZj0R%veyUE-AN&p;U z4|6LKj4_5Luz8s`vS)~X6KPM*BYXMpC5!b*^*}t1wPm1}mE@CKd9?o)j$+06h6n04 zG&spzP1L@dNJfd)e;yM9hr;ALVRY^#0^)B;JPb6;PiWdRn&#PX;Vc^^^W-uSY#S0= zTf0HuYVC3A9BBx(HzSgVoK!SVb_@0;(k{TV7uq?XV7x3^tpKnAX|xevOE!7=HqN7< zMu8(kf5H0x6+!7~K0tOR^J%YEA|U8OYyX2!J^+fF7i!-It)y>eSu(nh<TXng6Hbr7 zASerYyx#g+%RnLy^EcwwNcNPK*sU)Jy(HW!QKW+K6b0l3J3?NG@NXqbLTmbqQ4yw` zA#+_t1kuoyyD<Rk09foHz=`90bjHxuph$}kqr658Q+OamX7z)^=S({;k`6nR6pAfD zk!LYuLo)`!vaj9s)(ah*+)DK3x+CO?;7p7=$!waHqHLWNV@^IlKRaXA^rMJQ#vHtP zRAfwk0<01nIW0Rugg2~8R4*4pj8?V2{O$`8tbBt}T{D^F7#N-7qM7%~Y-lD1QD-Jt zk{915P`vGE7Iz#EiL|$_Q&bb4j0b-;P6(7Id1e;C>@bpnR&Nbw8H08)w>dDe-Y=&W z%nGn9WmY^Zt|VxCyDWhdveg#ejvK+*m(i_XoaikYVJAjX`t-?CYI3jw1+m&SR1~Kf zaU2h*2p0O|GIzo-k=Y*^=T}<_29h(5Yqm`EDEQ$8LI^mlr)<W9L<b2M&g2>wDj6PN zlVi?1kWD6|g%`P7pW;z9$c&>J0_NN(<Z2QD3@F^MfpBBxQ;*h9j`PvbE0)vlpiIUv zh`g3~g#ZRH<_~OtQKH$7WS0J^7|t%p$`>shc_?TIGbWUPHF_L}m}W*vN;wiSF01HY zaaKl9VV%7=sRXBwN4Ue?qf&<A_xvy`Mm@SnFUroa8qBfd-f1;l^whw*P80UBH*Tni zJP$k3>(TtZFfUEjk}bQpj-G1>y?o2xe!~{ny)l`;pc`psH({-&irFJy@Dvs7v`K+r z8X9djyUWt#R6w@v#kJ)c&>?`b<Z;r;tp5b6urm*QCBD+Gvz;c}KuIL(zh6n)xXbi8 zn$N)yS(R>+74Y=&0-9`?#%+t&|D0*}z<HTG9&}7-V|byWoBN?UqTeLg(6)Qu9*0bV zwJ(WKs7u_GvM%%4U}I{ZdCu^s@j|D8edHSlm(c}uTI3=m^rL?ef##6)`VC5Dl)hx= zxx|`g{DeVV&vPlwgVV*(%v(PORu6tcy=WkoB^lVl&?}riFEp*u{YUcoeNdpkDamZ+ zX`^tw&8h2LHcW?nco&Hx92!=v`OC%D6=6FKLknFclDrGC0G(slUkoHPMnLQDJV1R^ zjIG~fdJtHCnu0-kDC0{3U<2(W5m!OKMDRH_z#BlCR8wQbLzt*>6m>ue&k>;z6VoFF zd{wlt&@t3MR5~M}j&H#r$i|%I8*3evm0>G!JNjC8ZI}()7(F0&A-(wR2(w6MNyvET z9f{j@26IuK=f8LfxbhflrQ)l`uF$v1HXctksc)4_EsdQOdx5K-gOH6>)v<oOOy7Ph z>IvoiK#g=7SJ&SuMGA)dsu~MIEyd>-?l4l{KNk6A$50fc8B2Z%tk8odAN74pcwjE< zQ3N^zNEKxGXtU-u?N{nO>9CqBj>sGxLm@ZK<5d%OFy84*lg53~nBuqPT8$?rRf?*p z`KOY0wfR%Eqg)jxWZ=j0fh8mXS|jiZ#Y7#R=R_wSP>{$=v^UOi%#tu5V<RXk;^lH= zOR@M^{joItwcNL((+>fpSz-|uCi7}8hRT;1KxpZ#=Z0-!ugFY}FETicH^6zn6|Q1q zxUi>wBc?o@kR6~2>Q~jQI4hXlKqin13Zc1tb8jZ7Y#gTCI5<5cNfCAK2q}EJIoPRW z1Zy4dTAavW3@sfBpxX)kA5~P*khFY2muV+Jrry<FePmu#VK=5|&tkgadtSZwyuiJ8 zin`>zwOOY^1L4E$V_tK*8YSN|Qam;V>?Hs%%W9UQn5tIvfGKq*4iZ*MV<`l2Su~Ou z&rp=x2sZe$c@{m1aRx;r#;k6PkH%$vI~Fk3s6}Xa=sY>B+ZyEuDQuFp`C~U!XQc#7 zit;!uVxn*`<UvltPm=-OAF|qAVZ{2p5FTeHZ@d&>-nKodYoKFmOgdlH%7F^Wwoln; zo|AZhmXK{Nu4YWF4HFnfF-6{Dn4@DmEL?5vF$5)07bFQ}Id_tMsxUGOP@UpFIGbh? z1>MMm0u*C%;bf(Xz$0N4NGQoR;n>9-{?-`nVk#Ovq9n6g#_^=4nCxab1+B3<&rB*G z0>Z6e<s~M&NaqQ&qj$<_b_x?d%ZgEIbK>zwa!`^s9pgMCO`LAO&Cj@A5eaMPxaSi+ z$|1u~H{Nj6@cc9)h3GWtLf1h@)|VvcDD*MejP|5TQBRveS4<&Hb4w8~TbVHZxUynG zQNs%SfHTvd9nZ&};eL4@yqQ(AY-HpEA#}CI|0#DXe{Ae~1?)MP&ogqWWp{sNypv7y zc(gaX1mc4`%Fkwe=-8B?O!Dz$wn!QZUIXgY!22+vctkZA(;GaB$uy%202jaHJI8{1 zx^;9R(~wMZQH9iDwrSXsXPWWrtv8topYhgggjz(;e8|By2Mm2$RMiy4pX~92zTO%< ztei=a_dEP*K&PIG3Pf;gzK9W4KMA=XW1|3jusNv4lljabNCT{B|1noduCx-2D|F7~ zo>ibQ{11sKD~I6Ejhkk}3M^e%MddfQNlIMui#^A}nLyrxtNc6BzCQpoePXG7vl>NJ zQbm`gh#oKPcs-G&jABb&_tXFb{nDOpzBCkpA~_pn=e=cgY!K`pW0&b%j&@%G!ARma z3}`YOl3Gz^-Lt-CzIaZ|GA$wEzcItg1|QM)$6F1RIMr}dvLLn%U%ermXWX04urL;y zx2kQM-jS(LIjITKrWwPS#;U;yYqhj(h3tYzk`cF-RVi}<bJ#V2>EpfM$LP`6j2@Lp zJXJ*V`dJj}8Ir4&Qt~*RpKsZ>HnwISykgeAVjQ(Q)d@G2twe}62N9eJ|9yas(#!H8 zglad)Q2{878-VbGHVhp!W;|$}^5Et<!#}H?$-tB#c0^%g4qG*vG24sw;~OYkUBfL~ zG+1s2;ck(4CnDxQ15b4$Q9xQ8K|H(RVLq8%oQQW+egHt~><lAvB!P{0DrXzj?-b$) zlZuc?>=KXmVhjE!nb3RE!4oWZ0RRe%RB}l&9av<Vi$!LoVwH37Csu4hpO_gHgEI`P zymqNfj0H0?VMs}hF3}xaEHrL!slFMvR9|9Hc{_#qvJ*x@6|_OTn7&&J1$0l~>|sn$ zqVn3L73(ErrED4%UW@j@WOojY+@pr<VuL>L9iNxoG|#RjcCCI{_0rq`^M6rSk*qG8 z_b9SM*KzO=*m1@%uGgb>^8dmauo0_kvjr63d9{T&M}SzLnT=Bs%AC)@6UiVQWCEBu zj}ZxmvLMTV)7+V-VK^fP@{RUx5Z9f>5F#lU#$FwT7^Ch0Wy~MIQ={3r#fTmh(Ty8a zPwCm+SnI=b+(!9WlTQ!PxIWg(I0h0FWJfr-fpjW;)4?TJz}`B4oUOMnYCW${b8!1G zmf@9ezV4lvxDI!<gJ6$=uj&-P5Lst$&#Yca?@*%<FP&ul3cvcHDg4W0pt-W(G-A6q zxh2a79{;z#7F8qPiU^9Su~Bh6<;^ntq=UUF$ZUK6xI*tArT34^d;j=u1)qyw0*4D< zc;gLyncgI_!2$OXDMvke*~`OCcAB63Y5>HFks%$Np(r|)V4H$7$u)}4-<Hb@O3_Q# zZba8HCx@pI46e|F9+DDerRaqiLm2JN23TSlhtu#N0BBD>>o&!aVs35$&LfcA0dhT4 zlt_Comb-hkK*^{J*b;-t7L!N?ly8Q#E+m|H`EdnF{N{pKx2)xDtXk}fHswSAudb^` zN3fRjQpfT#d5aTu;%#~%a>EKB?$(yjSHORu$>T}2i}7ZBy#dg>D2Oa=+GLTT0S3E7 zb%wS;=Z?uh7{l^I`}RVeRN_}1#LuSi<<ogtV)JeaoG2dW&~3I;O`6SAlNDNl5>IB& z@v2f=3gED2hIDUP*)Sf=Y7Sj@PF9XwxV|uU%V;iIAU#+5V8C?vln(SC(PK7azOH#~ zG}LP{2X?>H#s;O~Qm5gnrHxtL%4$ewq4SJ<wA6pEK~%`_&~ii(6qIAwAD#`?;=fjw z0M}kkH4o%XZBDUZ8N6myouFNh8cH5Dme*wW2|w8m9I(3$q#Hz~;ED}zlUxfM9Ti&( z<Z=2cdu(*%P}_L7#g_dKI&-Z)LDq6la=;7U?ovUM`$0*Wd~@Z-AW{1UF6Xa}*q7Dh z2p<SDVpiMxL=D+ICm6rZC(Di66bU==YvEL`M!G{mmCHrkTrh5n7Nb13-!;5FVs?iT zrRe@Tg(k~6YM+Z0B_Vv0*`<UTGpbyh1{?V^@$t1NtOu>Fqr#fBx-hwn%odK=h`zJk z<-ok|%}y8BV}c<I@x)MY5@>))ON<_MIW4Tm5Zn5QMLzYk<pL1tphIeeEy`dbb;Gz) z(y}EWy^-6uL1|26NUiPp8z=Tcb}+a+%MFH9cd?E<i+V4qy0)bs<f9R$E~VyW-{loT z3i-KbzSaMF*8Ga<pRnLLcSPA_B<lugF-;<iUok1pbz^MK7#_>OEwy3R^;$qvDVu7z zExOX)b<e75I_yx1-jxjzw`eP}=<3`hUcwUdVOm{EvWT~fcj^~F>0hs{>Kj%86ChQW zZ?E3DA7p)PGqTRI@r0ZV$T5N*aYEYUUM<yIDu9jAP^l1hBPq?P9>X)X@4I=is0%NX zytKk!RPJ|Iajz9-(oJK7k;@F7LI8rJSB7i;|1TQ{)CK_4J(b_Qxmk@(RYvz5pb*=T ztK;<47=jR*RtjrE#!v>ZGiN-9w#3tqw;#i55AqHSYNxA$#!&0pU(bw{XXJ?_W2w{e z6YVs5_B8kJtV}6I0zh~bhc8WFS3lC!QtT+D>7~Y^qIHY(+5jVfuZ)p|+cYDl6m1uj zn>v<A?b`<<&ZL4LTNnGIS?rI_YI@DsegI@F+4V+d$y0gz@m*K3f>PS?WgpqijGV0V z(mq_r2@fx~j3>(YBQA#B9knsEQFIrF0DDbIA3!$_x4kQzlLMjl@xN?AhZur#Ha3yI z2Ma@=KEmG*=(pVt-h6jVw0u(b-q(L#89Co0{7tQWP@5YZ5~t|QIlY?ko&SP!v$j@| zjj<dOa|qUOS=G|uT6LDg2?c4L7=W626s-8?&!z}>^Qa#bz+@I??foorYbxW8-9Kz( zFZ`Mi$g!`lmkJt`J+w>MWbzsEvDC->N^ybs&G&P^LVFL74$(I4Mg4-pRCcIlH+d{g z>?T*XPhM~DV!`S@biEGoW=$UU@Z3y#SLVPD7yNobuNSIUsBj<ud4Of$*MdnaqKA`b z)nqY63n7wTJ>1@T$o|}OAb)|1AHi5mKy5UJAC1^W=Z7~hQ>1RUs_D8ek0}T9GYp6_ zz-rT3F&F{oUtz4-K{cIJQ&I_`S<tl1Mij$&cO8S7b1d@_tPU0dLh5{)jcW>N{`Yw? z_=p+J-*^6+eah;=w3y7gk26}IKCJevnlA3LJ7yoJu>JMU_RgQadHBtLt*^gEThkij zBOt4TtjFmBU~>ila+tDen3NRRlrpeZB-@<;Yk|hKrzjOeU(gIjI$2nUqq;hqU1pMX zC#&mfP|&=LgQ!VpfpZ7)HecU3mKqyf>SUP1<i#u3d@_O3iD#M?G`mz-6C8v2Oi|6n zH5WN7+&vOY%`v7sjuVYihXp3arGyJ`e&(mJlNaeaUYBVBYzMro@#P>du@-M7@G9u; zS51oCMjkSwOU0yieS!-*lO<yB+Y7Ndv@<~mTR3_YK2gGh)fM$fv=+4DA1A<9L(wg* zuVctv&c!sahqJ8UB;~@rLhBQ^tMaM7$jD@ST{t67Os=Lg#qK2;BIc5tdI6Tq(0kDT z_s^5#qZcPXJ$dsyIXF&Uzd8ExVE_4kvhm~?o;T9ur-PI4kA65wpv0ReuTFkWj$R~B zUj3Z>?cmjZy8iqhuirdBK2DC_BnOADUmiT)Pm_aJ&tCqpfAH$N<SEp9b##)vJUBc! zfksb`66{c#I(QECUaTKJfAj2nczp8o;N`)|&uQ}F;N%sy`2re!lDvNM=H%en4=<m* zNnZc(=JnC>bLf5_ntgTf>ct!A<@w?BS0}yogIDk_dHy3jB*))BdHIsMdh!E|{tb=q z+0pBt-yD4R{Ymou(aZhk@bc+%7}=AjFQ0Q)uYO*C_VUTWVVdkeIehZnbE<U&t-PUP zGP<9>e@?HUzbEkj&rS}GUg4TNJ9>5U1|HM(lcP5$w(3s@$IsK`$(w^?T#y%Uj-Yv5 zPN;E2jX=Fu&$$&`Y8>^t-4Q5)v-sioxf{#=^CvH%tz)dLw-0vnjd-%MY3y$DWw53i z4U1ua=g(h%^)>O~Vf>nxJ*tQq%Z2q@+q#dC*?JxP$`sReGMLPgOicCJk!YM}=m?>V zcTY38iA9<FEl6PV(~(z(EX%F*8coPCZqV$q+7vf=ZX^L{jLx)h-o>bqQ94<qdZDjh zQ6}1J63k+@&?^qkG89JF440~Hty55GW`aGe1=CDns7iPH>1UK4jNb0NBLmG%{Jl-T z**fggKlnSogW+wOvZ90)Y}SEd_o?}?l`dd7=)-(8O>lEMN>sQrW?f-HU&4a=tJk({ zW>uSd1KAhcTuD$t8yoGDO{_!+zN8<wJLVX%sUPPU5x<X;V~wI|D!r*i^RO^u#c13B z^Dt|=U?_2y!2{p38;Ut853AbjDiM9CyL>7O<O$m4U23MHV`^nr`^Ffak^sLp^mJ;x zpkDJh`@*S`-6S5Ip<<f~3X@Ka-y|QN%v@P38n$ekJE$ExoHBIHfeumD=;9!n0kXVe zGK)s@^vz1H{l;(&oSu#sWVmM^X+<V8Pspnd`>$A^hOkS&W@P%uW7>5;B}Fqi+S$|n z9oqscIALtW+1I=LlwZ-t%bDYI=#C<{;=b|uSayoTqiQlK$gw(|lSCH#ML4<YDH_-s z=KSgNVi}d24sE0lmkwdpGwaNLx}FgtTh|(py&)-UHtc0j1X9yUXb#mLlJJvpY8LK< zW)ZAW=dBqvfH5E(?J()V?mwGXt+_M|zxOCy$L`tyY+g1B!%{VS+|$8@l5n-lisMWz zUG3D1T4P^h{RwKHO!NSE$i2h{YEe~sgEVq`8eqA0*C_KYQOnI4nS1dYE)KDwv1{XB z7FbBiCd~dFiiGgf29Y}f1y|C~21K)WgDRt*ZJBK5Ah|RYfOc*vD5YOCQ34hTz87DH z1t^(u3=^mXNhn*OS)rIzXo+uwOh|gJ21c*hb>vE+2GJ~Qr1?j(RIYiqa;|x^EiKK< z4u#FbJ086=deeL0jh=RtE5%0N()=UYLT~hq=FNd=G*ADm`-_C(G5r-cN5HJio_9>l zcI-8xlj(Xmre;0+_S&Xd8e9+_F#s?Q`KaZTk?%W)I#MfgYN^J^nrf?RT}{ajE{xsT z-ug8MLk!F#w3e?G2n1FMhrWMfENv7GeiBe#lT<?5`<nT~m5jP3L2-$y<4k33heAm; zqSGh_s^?9WMZ$Gg=bGVQftUvf{_bpV|0h8^vP>~~@y?6c#rzcZcD(f=yZo?q^eLZ? zfSmy<oyT}QK{EKP$fuhxIXW9O{Qdl#g8G&piFU@CL?ag_9T5`w#Y{k~363~kBp<5N z1lXcQvb)(`wvFp+?;pNC*kzI7>jQxL4>2+ApqLIu`HQNW9p{K4*aq_9Hz{DpX+9#^ z66)EZ*nBMFH4<A<J=*|T89d>DpW7@=oD|b+6gHeZ{BzK<Np8vIlTLm$$)}iEadxL` zn|VoRK<t}#&~DKC@Pd*o?k3+*&oUzVetcQX1{bK{-cA03J!7OF)0c!eann&*y2Xv3 z0~1M7>z=)Ofbh1H&2NoY2Di88(l@$KvQF!3HShXjnSrSoyVd4^46RiGf<v!N5U(%p zBzudi$%v4GCUCwciC(5URZ)n7_(Kw#fMW(le0Q|do`C^kn;Qm9>%E_sW~n+V7ja~1 zbi`8^$$r<LaWx%c_|AnBBH(G}zy#~c^)!Gs-&$ji=wULz$6A{^by7)^9i~gUTC4-( zHrNQ1!>@Y_^cLOOrfj4(ZKfP1j1EwJlwh9yZ`lC}VFgZb2nRJe9nINAFO|%cHBA4E zZto1E0$}<}@|wmne5`Mp$}{Tv=Bc>tbTNy~cIwKhGu3yR_%e1$&~j-%pJm0UHa0+8 z$s?v_G1z5)LzUS0_KC6Rqq~fsa3DzNb4*v%Qi_N+h?S3m+LE|Zv*3@msGDzNm-OZf z*jR`k+{xCHYF+{Fl<TzH(M|DWU+e+QJMvm7MSTDskM3heXADaY*%u8EmE=$DMbQPy zy&fhH7*_K29_8mRP113{XQQM7T$CaQHqC~`T=L9#C9#<d5z6r_cYp}0K@$TL!vNM> z5fTMz3ZMops2&30JRpoZ_GOxU^$q9xJ(MVL8a|wpqci7+)d5X70UwbLwacnLuukC( z_j>vwDq8I9*{B+P<P5l@0`NB@j-H)s5`Z0xRbhDxSZBK+Le14==O8ZO;wLFv-$S*V zTZH?(2!pEbP$OM;ND$aGOV&jxCA+=%;%ym{PSd<@IhhRkRyvtWPTg&fY2)mzaH1Oo z1~pQ<(|wCp{CgpzaRkck2PF0Gt4pKL%68-q>@7K;a00*Q{5Zg^=T|AKomIMH#Eo9? z9xrHwInE6t90U7)EGAw&AZ{_WL3zYT)Z`a9gO$dC@Wp5P!2}J#&^yvB!)(ka%;Mr< zewM+Kc{dVhMzm}!C@m0%2bxkcNE|i;NC{m_X{aS4rn#Ih@#KHQRbtkZHxtmkI&)j9 z5x)7`z3uJoZ}$8H4wby~wPoO+XIr3eX<0?EQJkl{6$MBsD<ZxcsST%bdlGbP_(Fqm zqp8k9lTHpQ_9d+3xXDV|lpCST$-0YjFq!6t!ts6o{J80na-RENtb}h&PwoBl0B`OQ zSsZvB=?`K?D-s78C-3&l+>I{_TxoQfaBTLAZ-~!Z!y&>g`37{$y;R6qzNfn`!O7SJ z>eWka+?k_WZQ}<nqmB%NzDmy1fJs&v51V1FRV?c!McW9f79no`fcpdhK%!$V#gMRB zudC4lMX^UF*tWz6K})T3(dg7S-!TBhC({g9lT#Da0PiU98go}h8X+<D0N590nNNjX zIaINt2*pfrJI>|||6v?;FL{NbnZmGAo76h1m3gElq8<&1O#FFFGK^^fj8Iuo@U)yn zCsUY6tz$po2*wqZE=|Px_P9ugt#O`sG?w2rd@l05bldIj0|?=p)CyZ*CQl?iAS{K> zGr^1D5U5FLOhvPqcu-{CDyOy~_;i|IpisV;_2kef^v1`c^VW~x%JX_hr$fhIB~anA z4jJ&E!2-&>^K(0=SJkCWd&m>%NsR`O!)5d$`gktWG$NPc=oT<=XPf>bD*uo(iR3kT zcI9vz-AR1@<MTH^pL~Dt>N^KAb&{pAA4*6&EA+nVwqBk9YB7lX%>Xh;Cb0~M^VUWY ze#et(wq$HwDoXrqpwLfw_4@%vY=Jh-2Fvo!w^u}8;Hbb#HN^Bt{pp<W!)v7Jj(_~F z35#D^Y;m353NUw5;ttW!Pr2Y|+8IMzuxTA9y>Mxm1SF#E1hNh1N7i4)jm`MBga`os z!P%sVVvH41z#G?Sw%;duoZ^ofm%2vR(RAgF<PWXup<RTm!yl}_<2Mc@4iyKmwCO`c z{mShcK#0L&wmFhcF%tk#Yf$S%K;$i3_xznzE=b!As7-M@nb|l#R@saijp*bpo#^|| zpD`~B5d6)wEj*!3sCF-u7@`crVqXcA4`{(eh?TLoPbt{EJ)g8|rwE>?yoBU!X4l;0 z6;6|jVmQnxZxKasQHip8|3g+Z$ck1X;g<Bq|0Q&V0-(PqY4QAOGRn$K;=vfL+Xpx) z*%VgqG#d>``Sx&o=c_Ff3TP9DwK<$-X!N@YkYvlik&=&Q)=WnR+YDO_cLe4<%;B0& zS#FHQ@UEkgwUsD1;It+{m4^)k5B%OUAFO0b3LzhSf>9dzLkDmFc5jCylav57OX@M@ zKqB8zVPMf#9EBw4Da2;t$*`iGd;w&}S#{OZ1L@VX1&p+wO{<UjepX*(lIp~chq|Ne zggd4S%vWDl^K(E5g$qhOoTK{`F6i<e*dpHR!Vy;ty-oaVa~vgXWQl|$$${>nX^W)i zD@Y#u8;L*$lVt!CZXyT6$Pzk^QY?m&H8+3`f6P%VQ*-1E6e<^fR&dTA7ZRJAXU}zL zsIiwQ(@-(p7)RdB+$Zm&i8v`P=%-vSix1FyUno-fT^XfA7ZC<;02`Zf{ol-6tS<{7 z5{n*UkFv=iiEyyv2njsfCRI5~QO=FN+ouw`EdYcE?h9R(0+!|1aNFb<jFmiEMhZ~l zxM;^%qw}lK4ZC64YcI6Y7qLp1iwU41r&nyIX$=ps%eK0l!*VRv*cy_>IV_tYI(fLg zy)w7e&`<tbI2^uKs_*16U9$Ivn|YOAwrJo}U9I<vjre5Vh&ngfU0t33g%aK<M}=bF zW$cNO)?q5p8$?$(K|MkU^E&y&F&+u(olcE8y&rH8gAV|P{r5<macBhR&^MfuualQm zlAR%aX3~VZ!)_CCEE7lv$-KCuXOuafT+gZroKhRhm-;7dPU<w`7*oRf8`wOJUV0}c z79@8oM}w~i(~1pY5tKrIud%C+B~>wU-+bb?De<GHh?OcfCS6USzEqyh{e6#niFO=Q zqv6%vp5}^MAuOhkoKB5;Yb@Pp$|Xv@J*BZqV_p%{SVW%@!)O5`Ef?Uw6UnVgJ%0&p z+J@)0uj2&P7ho`x;+HsdijVWC&mnRM(omuVN$U%InZ8Y@Ii;v8Ritg?-@M3x#q5r; zFD1W$6O`gTYh;Q1B0v>~RBKC=OKY()NZK~*Zu0vM$ByStFrWl)yi09=n!^%nWz`MN zG`G!OyqrgA*VgGiqdWMm3QrNg!={PfsM=eR)`}_oehan50_pXr>`>VwqZMu*q@xvw z49sfow1b_3lJ<%jsl444EB`igGc7!KC3=*x*d&$}6El@Gz_vd<DxVC8Z4KhSRAuMh z0J!Ln_l%6#b@S5{`OztVa4Eu6Wf9-~60tq=yTB48&5U$|mTM9hOy{42m3=DGE9(*N zb%YjjS#nyOn=FqAe()?Lwzu`zI520l8AVhf5l;Bd%btv+H>>7@i^dEA@V_C;MwPw+ z$4{Bs5CdJ{LY78cGs({LQI!o-k_8hHMG3o9^7x^O6owJkPd{>QbU=v4a~CE!_=se~ z*{HfC8PmV!m^~V*Z~gh}Z@z(ZyagC;Q=}G~xQ3g<MVXBYv^rdD5+!HcJ8N!zzo-d) z6YYVCp^O00#4&T|cAVFkjf{!3Op1#Q;}DQBPJqHAl4Clyssr8XBg!#Cm!8tIv(=Aj zqvCB3U!=MuDv#C1^SHe7tq$DQ*7MTIn6<E&NFL65MDfLKd`Om={7|DfNo|mo%Vmgy z2Ok&F^y{KBzzyZZ?W-v3IEvI!$@|SgJ<(QbI21cpYWV^V!U(`&V03jp&nWCfZW2hs z0A@hQ5i_ADY{aEqhO(3n4X8MyfMT6Oa4KnKhLx9y$*_XMin1}4{u)8KVk(rQrMxlI zX7h~1t>y37Eobb0m@Sy7BGevDNJXycxK4n|%rZqR=9{o<<#Q<6LK`J+ux0)!D`r5A z0KQk|b9O^{i}1r74fQTCR9Io7TfqI_#G<&!BH=e7TD?7zWqaA%uf`NW2ikdthfrab z_i`B1<eoXS)B!YhuN!wS_#JNTyv-!Kv77>PVj&^7l1KG?4Ci?9t*Sr??Isz4OuVHA zX+PRBg=3?Lb-i>49e#E+hKH`)>t6e89hhFxLhm-+E`cj5s;6jFIn*)9YLUNlgcX}& zD)P#tCQ(ZcN4e%SL4=GHw*qt+IoIa1fw#6qpZcDq3*%owf!Xk}$zSjsTcbjABTkgg ztwhN9#s@9Mhea{kLCc1n6<08IK*3s+4+KL@O6d3A!Vg40`UZUNo;Bv!pzDRK4?mi% zHql7$uVbFcA<#-Y9HM7n5?=y*K795aQ4~A)po5j30Z%-_2tdfPX5~2=(?L6eLGH0N zt}$M~7N+^xG_NlNAQfV-%dvFuQNqRAfZ1r`J{VL})B?l0b_Oo(psVjEAm$9M!)%t> zln;i-K)Y$tA&YcLn+<n+>*(aX0>2>{NI9-=?ebqie-!4&L}TUzpNL0!UN*!J-zi?E z4w)fCa|fm51LEEft04wd8NvOTtB!)I;)0+Yx@o8DsKLc&3^cwl59He2G3C0SF&Bq> zq9$82({^}Mvr(7ga^buT+0a49BhG8YueunOsWxjs?b;P89SOpd9GXnKsBQgJP+HTe z#LcOBbv-Gpgu#*(ux{(I*<VY_QaOVrZf^tDC^&vczgUx%HDdcPU1iL_HOR*<Ewm?h zrh$gt@sHoFLw5w)I^w^#9eYb_ziC;*HsA8EciaFVdTe7i8KXXx^Pn$1)fT~Hrb7-X zU1OGU6{g#q0iDglJ1<n;=}8a7S^_;*<F|Lpb_Pl!UiUP@wzf|}bq}-2AdZ7FW<}MY zwLgxFhwPx%F?tYlu1CI50nClTDB?XO^>LPLP`1d8R?xF_3qp7i&nn!$KW*2Q0;mG8 z;MrK4q#9^DbdZ!2R@)=O+<tN-A$J)<*_g>>Bvx+bCDfiG<LngPWb)y`1?cAmj5l0J zL4UAvvS2AKH?Hj^^ba^iD(}z7r`R{9KxH<KH^-)an-ybX^C!8%kTnJDX1T7kLP?~V zq&hn*28ARsz__#vNm-3j<1sRdh;Z4I>Y|#?XiHcz3GG1lK=0QxBPubcJ4-GKSc~c4 zVxhw2VJsR<TRqAycclRlj(n)m9*U$QIGxQBj%&SHl$%sx(>AvCklam8{&`;6x5e<C zP32B>4B%2&iH?`>ea)nL$Au<IkIhtSRWhz+Q&_ip9Z4+yhVQG7*Gcy=mn0D0(LJeb zcJ`u)!AY$D2VIioFyW?)LhqE9V)I-x&9Aq_+FW@ChQRA1!nXP|12gC-%g584GMK|5 zJo*0MSk&1z<`IH8U_mvl?()~L-4o?H*_0&ec4tH#Nt{O$&h~tQ8X<}BNM@|OR`fx- z^^S#!`reFmAEN;oVj6O{(0bE*wWD-p+oX~msXHO21!R*XBsd%eO-p;l0k}XB%<$yl zspPb(;3AirR-<6!l)Jt-KSy~7dZa!3t{0%VqcdPCIof50po)@pbF@)S*tHQ|0ilJf zD;9oU2y<~kX&b*ftpoD9^pGXKqtp13HSe6)i(T9+Yfh+?^R&lA<{R8_jIeJopYhS6 zzFA7*f~X?nWAUO}kpHi`FHMf)SknAGJVgr9QxzV80tk>432sdSAjQ`pi3T95H2|BI zRTThI%*rg~f`ugh^a<t&WAmq{7qdRV{Cm1dpJe=V_lS&K3V^n5Ynh42ityMYd=C%n z8d{zFQ`vw{xCvV`^*{WJ`-Hs>J62NRt_7g!PvJ$X!EO!w-)Ie_7B){?`~VN|I!e-j z$K89vJzep>hDd8^)<?bBC(km_<}l=>m@{0q%sY5mzI5G8e9&E>2}>1U%;RJ(k(3%} zh?K$8Q-g<6-L(RuL~(f(sj)PKC_75yG&?L~-a(LP6)^$fX*CN~ycW#s^OQ)1)-1sg zs6`u&co80?3sf>m5LDr9njVdd8#kOeK-B@AC1ToSKO&IXM3Wl<VB!-g1UYl*&qr}O z4C7#nrB2U0Oq6wuAmcWM??T<d9x;~ZuyZ6f@7x1U;mM)@{ybxbu&<dH;`upGOLYua zBdCj2i)qjrXqyc)ew1BmUb?{_Tg{r~d5X@wf!-k@nBK}@d2p*Y3-G0!@-6<TZrKI; zUurQ(mBdlm2^g`h*Mj}kI}5?>JMR`+`A?J4F`~f)!Tzmp2xg@L!+tInX#dtiu(;X; z$&W)?kqTycA-L5IV>@$~AnrCGoM-=9&<kbsi%K6FJ)*N0oe|Vgd_FzK7#aZiG)h=u zOE8BaZUZzS*gu#-41jv=X`$3(>Omt%`m>IcLjVXI(oxiA6H`{0p34Rs<-p`32G2$d z>CZP-G4*cDNI>@rr;CZT!s%U&30v@T)PAnfZ-qmaM<)n-sRwHy1vkY2*Y8noZ@xa< zdiQ)9^x#H)UJl*x2KL$SW<^y0fbT4PyZ36VitQl1M|$5IAP;hO8^a^@G3shWd|Y6z zI^z4~PHp+91&;svi?vz@XME{odKUEPZ!_~;GkceIRh7;{c-e<0C#rO^5cDuPi>TOE z>utHl@NL-m=%jny{i&-~zH{Mu+u}GZ2+ptvh*n{4ZlT)Mor&CkO}yr2sO^P8&X0^N zFW5vm;Of<K^VYn)O;XFG37T7+>snwpl%Ogj{7`K@?3JMF6!)9-R;HuYnd1ZwV*Y~U zXFT`iC2MOm#5s_x<Y?xw{AFp?aNVA`W$SFE1CG0<$PAaRW&jLhI#0c>N^5x0?I7Oh z&FN&22dx@ru2!vTw-5PzKkAJH4|leK#q0%h9Zg*}je6qd9!6Yiqh+d+Y1pHl-=t4! z08;BuwX>=Ud4l|uYT0XW)ofxcj~^~YkLP9}f*PXni9j^LWh0`wT}Yw(EVl_jF7I@0 z4fv{>-9Y;ZU*5yk5Zd1hp4d;Y0li>NupR$+*Fji9W+*xcNvr0rT_>g6{Tle(N^?I; z>ijiv#mpvVSJfWO7g`G;hg@Gso7oNk288cPHh*^BUs31q%bS=S)$UR@SSuzqJfFBn z>C+uosAB=7L!AhOniKL$^^?4@1uxA<L?xw&qn*76R~Fq%r-5JedX$yj0cXr()xv2s zCZXNV=-D;;bZl6_)e`43x-y&n+T~sMJ1}4muFFZ-vvC#EAiciu;JQT+RWw}6u4?Ua zzp+Dv>DM_`$VC^*!`eY}d{s~2(|P);?*Q1@gxVRVag=<>*WjwwTWB*lU-f%mniDGV zo*jVRLs8tDAFwUf^gH+=?422fPQsV~A3yRcB?+vS+c6I_fiG)izI$Oh>-sMlORKU= z>bYtxnVHfSCvdz3H+vkcUD1v+;$N=ee5!A77@2rH$jTUvAFJPg{am_{NOiL(ud7*o zZ=gC!twwWoh-e+QIwT2y(-K1tiz4gyGV@azW$Y4MefyGJoBCWa+^bs_$B3u(_Wd^P z#MyJIe_LCj2#@kh77r-R#D%SxK7&Vg`X4kFWf1-to_Q*bGK+~pSV9YfA9IrNU7rTy zH1U=V&J6y_piz{1(A>dDr1pROyV7LmL}aF1)I%H%snjB~{pEMw)Kt5wHaV=}qrUO8 zemcP42Zs&Q@%aEQxvZL-1Z#E`apM|9fjwfmH11WjmI{TiJImoDD!NvQV7N-=*dCR| z;k|cVwbyu!s`_DB6tp^*7x<&*sH;X%g#Hc5l;ZcvK?*9HoW7%s7||J2#r&|AeVod^ zvw|mucKJym4PTw;b5^tr0}$ZDZ0~%U!cGK{4(}38k0V4x4wIk%DdekPup~!^(a-;E zEXDTTa9d}k=_>JdqtujH3J~@n)klu_WiGsVW?wK{W2GeAO6jb+$H6#4hdc=;;ZCR; zc966Y01J~%oYDHl>+gc62yB}MFF5{W9Bhj>)0R#{2#u~jLMAaESnrFDxHrR|LuDc% z8v_%u7pqlcu4+qAMB5k3U_KL-s+B0_`TiV2TDy{iuJKpHbb$np)2R(^QC+hyb8}e6 zkRM?6wQqjmoiF?D*8}IE540r)vWZwLPjS6J;aDhCLE}9ybpEOry#_(BYmAQi>KQ)d zrOFVSQSOgo<Ui2Ts<$+&oij5s(Fw;hsGhUC#`;lJAzKnFo0QHc^-?^C7J{65`%sng zr>Ccbqom{)we%?DOOLrvf5X4Wa(v{Ox8LFD1hq%G^vnZeXXeP9;h}Z@yPe{7#~XqE zB&@yE|A)`}2d6*(@1Otq=l}cjzx@19@8%EkKlk^)c(V53umA5)|M8Fi_SgUO?&f^| zApgAo4+p0QOYc5^HNSM^Rf0OXqW!=As}?>ueP>~Q1#VUr>$sT2j+)0I9Ds#KIm|pJ z#Y31Wo_7TEhR0u%BJa-=jgILwbh9G<W882P*yCrbse#w@W3adR_j~VOzuDNV$kKIc zTPA*Hzqd~1z;|r#@SokiAGS7o?*@^$R*E%P%wF6U5l{$(^S`XAFDxG=HPL9DKXngQ zo9&EP7>K`@0s1`WRj?Hk`pY`ncT@Z}j7x~21+g`<dFF#J>>H<_KVJ%oZB{{hJ($HL zwfIuviQ{l&zNa(XpP{vF?g{CJ7VO)z)cfkz!+aVhVp@4Lr?Wlx_^XwNOUQWq)oO3P zQ4Ia3qV0l|P9<;Ik}EZavCS3zr_uW^Y(m7aj8jiq?Gv9j#PtWe);Gi8PeFf3AUB6l zEYLrH3Wg7Yi(iWk#B=0q!M71959+7DO-~I+;P;vBA5*@5rWs@sd>s+dO>D0FF)g!c zY;5wh)E}de$O+e~tZKxs&n{Qu76&IFf_eqF4xE&wagJe3?V3v9g)L^8d-PAW@~HJN zDxQHQ$ou>Icb6A}#T7h(wZBTAtIO}+IoPd15yk3_-Lux;Px%EW4~VcQMDC3#_=W`0 zqfZ|%mOh=)|K}HjDPh$G?*stZf-~S(GJ0QwNInQ2hQV=W4j;|g%F}$pHM!?W=N`YI zW_G!mSK;*GQux>tE5h-3FYV)+jP0_W4IaJzkiaZ9I)nUMb!<d@W;o4pagw?5%WAJk zLL3F5-UGP|PssC7ZZA;*emk5br3b#)RLNLMlrSs)X+<#)2n5WR9=#?w7EQHz_vKvm zX?NYcS>Neut(o^kC3arb`$~hH<4pl|Qx6@5={@POCZZu)V-Poqf_@E!WTT1!zYd#m z9EnS0WUZo6xGmy(0_c$`{<8b#b)SlQ=NqzTy?0m!^$%;Pav9j-{@_V~pZ0S0TEKVR zmgk##KYLB6+Xi9X%(ko{(DM-Ke`*+~&op<3p9xr_^XJz(Uj<IuqQRzr$#r-OjUG*H z)S=pClfK>`S<vUw+8Wkse>OF#dOQD7w^p&=R@FKi|6$l$=ro2=$D}_4jXV|^)lnia zAQ1?I*F8E4*KGLSj|Skyd~*=)1th&+VB^Dln$bT2yQ12QdI!^FlaBv$8Cmz->xG}D z;V$U6=L5&BW0u&ZV_mq<E<L#pR9pjx5e(!AKyp=0&H1{xG3(dGd=0oB)J`uWd5$59 zg#jbaL!AqhAV9WUEVAvwJ8$#N!`WY=X7Yojr9olxqC!kSj?C0?KC7A(gz&&TGn+CI zgdUX6&Et+(Rvd4_5x6@)Ct>sWdy^O4r@cWqTNTWAqk~z>r<!ICRkL<(A^1{hX?P{o zPqXoY1fjGM=4yn-BQXpMF2<4%DA6GJ6j4!*iRoSl8aX78YSz2i90i<O-bUuMzt0Wu zGn(?n&sW~M``?+5s1s$G7E1H^sNaL+{#t_j%gAku*j`R*FK+xo63~tM)hEm0^&8C- z;m~sT2Ksd466Aa-dv;B}po1&8HtoKYa$lEj|2nGu3n}wubon<><!jO8i*8fqmGpQf zHLh1!qr|_C4*!l+_;;bf7c;2He9Ja+2?_pBwR3P-V2v>{z-w12t|tu*G;ADSql<*q zb!)XcoS8Aq#Ykb*MR^>J&3DuOOgegbch(RSVv%oK{vkcvNKcdgFP!+_mMs_zHcaad z`CIg&UnJp4bQBgT*qYRmhUUans-l|3avU8I=M<>UZjG<8xVfIi$5`qrksbOyqT<o` z(Og2r=#`mMivHzXKx|5E9?kv7zyGhf$H7B0aXPM$B=*IXGyE$I#Nr9@BXf@*E}02I zg2s1<?q5m+?M=YT>z`{*fX5g9Zph0_{q{-hoH%}JRbmU+)#>|7<*kCrvZiZJ&Mz?r zk~J9V?a7+&HLkHq_V(t^tCzdGFW<a=zp?rH<>tm(H)g7hT@1?oU&yvzh%<{n5MO0y z!`1p4Hm2yg$B;?_y#Ds#8E4B3Bz<7nQuxR%1f39;Jq5@+^`H}mttKNpxG{sps^(Hk zf!(qy)gET(5j1qY8Z#)|md-_;pR(Ccdj9FqRNl_}wgc}T&GAEmJOkAGuQ}H~&G+un z%JN(dtGSNb?m@!gh4@2ox_6?d;ZY<($b&%wnJsh{6L7<e*gu7_HshIR+|^k1MS^Aa zE9mz;fVOshh9+H%IPcZdLn52@(F^U%4EfC!kyCHccU~K7r)P$DEUHr>v)*+$n)41X ziM6~O;W{k#RoB$|*gyn9-$w$+2!K{M?AuYO|HWaNig$rIp>c6wurcgh1skpkV&0@W z?QLR}i8H#wupNp>cH{(*Gpu~-cGK~SE^uozC);<xx%lIF6>EHnlJi&Vn*-eCaC|a5 z77}}m$F3chE53u2dVASSTq?C$4#P|p#Wr=Ah5V{RBN=wZGCacFn8WP-^Bq@9Zek<P zIg1m=U~F=>zDC})7_~IMAMur#CHNv2`4WQkMS>9)$E#)--W%Tz@2%Xvb@%qI<rTBK za{t!-dn?P~^1a*NEH974<!|nraQV*dJFBDd?c3wkaOLj!?!Ei>%{Sw4Fv51Uem)5y z-ShV*AyUIb>1E-m%Oy7ReVJf#-|J1wH9l(93~)rZ_xaSs@#xr$KGgHsAM-uGB~j$> z!?H+m$m%dfn#Mf0`@H~{7}<(GC6>(upWz*WJB{?u=Kw1mL=&3XfCJPZQcDKyghYw` zEH-Sy3uPD&@f>L$2-a5=iX*5Yw4_G??H+{Y4`G&v|H21T9A|hM05_ybt`gHYq-y#4 z91Lmq<HllAPUPldS&VTh8!~$W0IKUK;drO~W#50qw_dx%C&K3A!5jXOq>1Ud3s!RX z4{Oht*=Y$*xFt*;&ww`#b^>I!rWpy9kov$2>7*P|f2s2b9#)$Rok41dBokcxg%P$s zcc(<E<dJa9Ywv1w=N(63>=s8v8_X5QaxyYCmgJ8UT6jj-ur|=E&K65vu5mk|!~MYh zW($+WcZam@RPlK5QyKC>qN<=Ln`siF@(;X(xK$U3tr&SK#v~A?WI#J~;u9#KWz<13 zEB<@|M}}Uf@tKftZeEheLU5PcVyw@>YzM;@(wB}8a%$uQ9wPyEx8G<m_r-jRbng&$ zy;48gUNI$jziqjWueDswsjHjdTC3CIn}6Fp;qno#E!Gq;jySD)w282An0?<x%Q(m0 zaQyQA`ud&C&3fi8VnGAzuUuP!V9zX(hL^YQ(cx1X_vyym4&mv!wP0@Npj=)y_py3W zHn(tN?z==Xo+iXS7*1L*3#6>4K(w4dXkSvMk)&(`t4UI<rFNNuBKio@_uwU#OJhi< z6-)%~H6cKYA^`b1El*5XR%rzD<^yu*Uo;LTJZ^OHEn~wVjK(?V5ar^4`X$ji1Au2l zK9KVw3v>K_$&>^s{Pk05bnqs_8Y5#jErIf-&paZZ>;U3fm}OpeMTd~Nc}5~pDE;5H zWQiLjMr6dzt;cxvMF<??*>kbOL)xm)c?J{sI}$Yj0K-2;e>g%n4-&r!l6$Zm9EBxe z@Cr=G8LtU_Win5aCCc`872_<83a;WWLi7M5pSsS^h(;NS-GaRBlK5p_#Bws^=d5fF zCCJQVX~C=zpf(I{Uhq3xV_ofyXo7Ip2=2}yx59`g>}Aq|d|Dn&ghJOr`RM=vJU28= z+{@>}#Bid1QtA(Il~gW>c9-GcfC#UGXfzVL0CC?q9!{!(+M?+&4YTne*p9h7r9RNK zUS#pjzdu-7KUjJjd@$z>C4p^-FOsNICL9mYg|{iqzSTdN5>kR~7V*iT`2r&q8SR7_ z1g}gsih^;kEFzjv9&#>`HtDb5_5cI>mRh2n$Hy$9w(=@5xaCsmvr1m6l2^Rs)hc<_ zOTJwt-}aL4RLOU|<hxb!U7JjsoBOw!EEc>kKq9<M>8GDtbr;zyt?U&)d$pCl>Sy0> zW#9I*@3gY-_}O<`**vW6Oj*;yFlO0SRIsS26=K+kPGqZ}XgL8F6hQo%;LWiSM4E-{ z^~^B#hoCU<dOww^BHE}rS1%Kbvo;Am;7B`oo^^cX4oyp(sZ)565?O>FDa1wSPzQnP zyK`{@2Gr09%Q{9(DGy$P#lm^INRJS7guPM46FEo^4|(fvfzw62=*4LWQjrHxK;pG9 zY6Z`u8+oxVIG97F1Ra|wIhY#+TP9cWs)T5erOeyLvCJwZAs{ee0h2^>I%L+_ou4@N zpUR%%G~%BLxd$gH)ic)8A<-XVygyPVt)6yzAebW&ys@3a4>z}I0d7;u2@7dv;AR|5 z8AMPJiGI8&d>@r3pYe=7kSQX7t|;;88G=p%8?^``O{-C8ki8uyd*AUU%F?N;ir+?M zaz^MO_lpJ5C}K)B1$WKcPTC-1q$nKQLU#qtOhpzvf*{D6RjJx*J9m^OSeM`B6Y9cW zywCHIZ1h~|=`JyE($V!Asodi5T~FibaVV|QM*u>Qk4mXaAYPC(^g+nB8Fc~dAlNVS zF)4Oc9ppQXUDj+R{ILnqs>BD8`=*1zKsXK}OZW!K3nxbSl?k6go^1M;zpdN3hRBB7 zINr@GIOMxrn&9{^h-iDR89ChEKt^$EFGQ>++}=afHQczy`{9|~K*&cVu;p^VdeqjK zs5Ze&h&+xYSR3yL)QabMO4{q32%bn1(NsDa@&}yG3w|Lt;t+3RQ=To#4-%RE7L|yK zFMXNhAzbO@wwDC%1~%aMT=+P}`Nj)rO87X4(Gwwvcthxf&L4Ut(S$~7z99jdkV0mT za7jTn3_9s(#v&hNJ~xL$42e#6#8HiiiozHE33|ChXa<)7IKuci3x#1qYDnE<4g$|) z5=H_;P|}GOM7ldQBRu2^VV#f!%(b%c>-?L0agSyq$fwdbf-cW=LlD215w;n57(K{2 zO>i{C_k*R)aikvnc{rKM5u!Y0mcWZG*#JwjjONS$4nrL&k=RnL74HCiJ5r*RYOgoX zm`k!nwV&b+u^o**2z$6&At7)l3{0E9WGuiKXa`>}c<C5}F!tb%@MAG)#ZbOrCbZ2@ z?yx?EAT9H{!C7tIb#sDi54b2TLjb_&J}2^;-%d=f<9KC?kR$FQzS)LK3&FOt;G*~| zE8dI=z1r;*7!LG0%_7aUL}gr;I`&}Fa?A`;{??pB)go2X(Oeu^f+QHzsR((9-cL+H zI!uMO=ogSnSrBp&?zYew-&FOUkaPN0V({FlhZrS;PzJgQvyfYOI<igc7dEA`q}(o| z8q<D^gu98SR#f7`<1r{TC-IjwO4A_^>55iWIFDg0=ZzBh#trAzz*SM$3EoS=*5);M zeT^c(LrZ=k=*<ivb-vIP#68`r^2e@|tA!bcGY;r~jSe_)D<jGg6{Q_sZQ&1%@5L+w zKT6O#uqAjdVr2SxgbuS~k&(jScDSTK&-01^d!l;a&+h6sEdoT)<65m;rmNQHcnp_o zt*H(>tKTs+sTuxn)?O>y)y%eNJSA!_O&hiOY58J)O%4Pqae4MoF+f21!uw95a^e)H zezB?MtqEcY;XRRN4wWSsdkV%WE-eNCF#_Ew5%(^jb{ut4!RaF>R{fTfBcC_}ggMS# zNWQ#wMx+iEQqnB?NSg%@MJS`a1wJV_b{RDsZ-C<+&*yKJgQXg7cbwi!=H13K5eN=h z+;iYUYE(&~1coGOli<={u5z{g#V8-nd*E$=_h`5l3>hXnQ3=z}1jd)kaE#Yw1d2kD z$SC6kx)^4Bp5oJ2m7ELeln-cVfRslxgZVU+u5a=eANv!{Y)p0+Xf@@c*1_x8OpoZR z%=~lQxd0v0t~<<qyXCODjI9V#(^#fI7hEpk=b>^3`%4@(A}k7W7r88e)^d@08%EMA zTc#7(gL@uFQ#T>;xg1!M{j;P!R}5RtNC$L%x;ASY^OfC--p-PdYd8s(J~UcQeFNet z4Laxmz^6zIoR|u&QK{pj%Uq|uB}29X2C-u#R7sD=cDricn+&0ZLwgeZpDbK~ok)~i zZIwhI;C<k2KjPn}LMWde;+B=FEfYEfxhgZ|+f*D;jQHkU<Ld|-$g>73^dg*0LSb_7 z!5a;WAzO?eYZqY(k92X<Fa%l=>scsLm#mJrO`$D6Sb|NbwO1wU*yz6As6lSjGi&_i z77?E|>UmY69;R3=lofXtn{*W0g9?Bs?l{VcSnz1~Sb$fCE<`lwV;T8(8KV&V!OG%6 zEU}9vdh*_sCmBoeLPy78ViCOh<^&R(Qj~m&$^scL4!<bG;#ew(IXPGgty;M%#!6+# z?T21@*@XOTp&j{Vf?eSHQVD>$6aN?iV1l*xTLh=w74-@(?BXtI=xP<EIHai}oHizs zxaIG5wpe0f?Iw}b+?YwOp|eTi$Ls1b%)8*q2E^&s#4EhLBu|t|ya{Mm;v!vBm(nL9 zC87zZ24T?)I$>pqslf>hkk!NjNru7&1_)^s#e?82PQpi#zrr8sn9DRxwH7={;@Va^ z0bMH4+LP;!ly*>-2$lVC^+@@$^}!MeOuuccvhAdCbG?C9O?M4-OKiV2>LD8{_YOY7 zO{JamiE<<%Z5`3hLJh9slHzPizWj)*-X3tQ8R8`&F3<_Hj_U}*Dzh6F3qBkE72CC^ zDTm+f3+15#^A>GGl7w*KIu!J=wn~WSs}sjT5NKVYj(`x1xZkI1?&N)>tsv-P%w#-K zN^vAUqroUzB+e_xdasELIuxenWd$jyjC-u-{*~*NRS2cYFf-u?d7!Aqxqv6ueF8J7 z^qfY^@H|0b$zu9c>8p$jZ|~8z^iT+Ec{tH1Kh4gRp88q*0wSeF+we1R3=T=WM2)Sw zf{sQ**sy{GH>e_lAW4x3pvMv#HsJ);HF*HFJinlC1k8K@9so_eKLTYV$12^u)*09> zMSsqcj)XMldaQ=ViZsS+!f8C9i$g?s*md<uVKb5-))E}j&QO}mBiwkAIRnvP!EtmP za;FSTH%|3)sQLpV>Ihs`XOB<SHBF&Vk>XY>%zZySPN@ObBd`Xr*84I6$H1&x%*wGM zXTKlVcSJ$OuhAG`Cbq&vZH1#W%S4MD;0l#SPEj@NOMWGoN624Ul~`MvsLFlL@4GR@ zr7x=?02<zixS22$9!C)*47QSySVmUS96JVd3C)}lvff~i9bl$4)y?({4UJc9L!Oy( zE$o(4+2X+09^AT-LE^8fb$5g>*s{hFI$z}^(US%?)RwzeuM96iRr@QG!R3b%#0Xg` zYs+h@aJrr`)PdT+jp#(IeYMJT9y2z^9NL9!(hOGI6S-51vsZ{;@4KvwQnq`!H>a7* zk7tc`b|sp+>raX+wO$ssQgI}x=faW9Wly6<wxGlM3@AplVAaqoU^ns>Y;DLoS0mm6 zm(B4=wnl4~wdCxHb_KhpdgQjAH`^m`7p8IUZA=wFPjk0_IfcDS1Sinm6A9y6WA(D% zhEBi8n>rU~l7?&zvs|_)TTeHr906jzW<V##->P`Kj<B86U?>&m^9cI7SXfQ!mg<3D zIL+^R-Cv;+=638LHk>+{dj%$&Q5Tr)alId-RPr_v(7mj@BCL~%*tx6%@!Ozb0ORp} z%W8|xELMZ>i9q|UTEt#O<FTNjR}ry#rKl&0BAtk<h;Nl2)e#agCC0Na+e5}LB8c@1 zCq{TkyWWDZx?o22ebSmIcdDc_P3yMwd#nyV*;Ey^sV>eo(acKoBCj3jp^nvj08ML4 z8&fb%E}XWdK@5lkm6H)$9n78<5UcC4<W6K*Hczz}wxp9x+r26)rs<grP~HL83p2%J z_cF6cjU<A+a#~02`Zm#GkU3(qWC%`J1yH-rX%k-M)e7=yIT9>UnO#IIbr2q93w<~t zoav!6+>41?I2b(UQn<n7?tl)RV}N%)b55>+qC~y+J!4p_$f#i!bA<#Y;YKs-$ka|c zRBM4+Kah{N6+~|fdrGio6}I#zaHbagu!WvSa>$-jFVrasDi7Yp^w)T*mF7MZM=@cS z-=>l0DpYw2xk+^ssT@kGSon=IUTnhxEz#U`2%v*ytPQfsRY$XfCmDHXJ|&KS5Nt!V z4xVo9Ek3_5q03BC){<{6OXM#xWB6H;ajfQ>|C!Rp5!DMCA@TL;bXwwmY))HGTVP*< z*k~&)0BTDhnii5atU|IfFeFjb)0P%BYnheOJXCRNDU{gsrXgGxx-f>q=QSO28*CHz zs;c^^<8mgx4>Q5ntSO~7ESi5yN04P3{t#@D2DsTS&$Hvg=Ylw_1iQ!4VR3WQlB8`8 zv!{Bhum(y!b-<Z-z-O;{wSoh;gkzQJf=pI%TdVda-J9{<b7FBO{BTU=tP<puYSAR` z?J$bv5v!8DK}7TG4xCIIWC^A}Cu!s<d8?CH)xvd%>4tOVZEIYi`gE&Rqu`Arp_hby z)x;zPRZB=Gq=<AkL9$0Rvs#qEr5#<bH)N|Cn_7$YYO7~L{Nc3b#De9bCTI)-Rhlzr z!&fuCc)r4nR=2bX2VzC7yi#tC&IS1;)>5s~)1HdGdzNhdU8%-`+;{)VRrEYI!1W`s z*5J3ANGVZ;z)gPKh9+Q((h}hm3ui-SK1sILWT>c4J_VOQ%`#;<pNnPh9()m5y^C$S zArA$4ntwbH&L}WeFUHU^pku^x!gH;{R%t7NBm-ci6VnDUkdJuc%Pd`-35Q&+2%JzW zmr~i4V3kSxC@VjjC`;R5ngO6gv~$d1NJlL|NyWcB@^1*Qp-dcQVGB0a)t$h-u9=C% z$UndkrQ3CIDzc|0H$^*Nk^ztrM`&94U=&57Kkb;EQ!%k1)OdbuelqQDChDL)(mnRU z#Imf=d$kso#0JXz5KUWol!mOLJj$XEt=uBzbgr40jN?grppwobIWk1N6B>Gw(01Vb z+LRnpMs%c;mUc}Uuk%q!3=QquX1=BaBrIV`ZO@9P1LQb6KS`o?e>I(Vof)@VL89!O zlZ+=IOHzLRuDOT&Y!t|;|Fn79<FXk%&n7u)Zw5|9c9e`GM8Ume%fJ~sGAfl8W%eP; zkAs=pJRk@~Jqg~@mY2}li&#oJ!zes0WmvS22U2BQgDvgoqpDWViJ&{Cl|iC}qqR;< z@Pn9L&dcx;m@@1DT7bjsF*f-J{KL<Ohta8c4mL_J1m6PYZ}E>Qf<1wgt{p7Z>%~Qw z2qq3SVA=8f08rbNtyFxGO~XBE-6wsy;_^;!sY(aRMAcPv1v%}mli6RBD(Ty$EoRQe ztx9Aar5SjPK9)DwUvqp7F``jwc@}(4h^$anj>JpR>273dGJ8$iJByG{fJ55ndFp(e zPNL%6dO4l=X5YOmJRyXIingKu&4trHXRqL|VSp*m*ape(TM9c*pDI}3`CCylgj1M* zdDd#OPs0na4iNN{RP_G&e3#2$-$*9AIF3>%<MVmP$F2pCKLUv+9&l`V_IHjrj5A9& z%-|C5L92Ect5@GK@gD)lzZCX3Ps<6-m9i`Fi7sQyQD{3PcyhdR>vDAnNx0rZ2zfMU z`C6fks!Gw1s{}00v|}rhi|46wc|WSXTdeH)DfHyxRm^^`o|Ro>d!UU}9VDtBFu+^q zH~5l>D|2bYlUdX)+Z@G{AtE|LVm=5@&I2DXNY%g~Cu;-9r@KuWtnbspkhMNE0AL*| zC-ufA>A7GW&1`nj1Bk{6dr8*HC#BqS`N6<vnD66+rC{JU9Me?XBSOXEJHmtQ5b+c> z8`t<E6BGRl+H#1?A)>FJ>c-b-r)vtD?RLTV{pg;hTA$n`=p1`l^}^3$b)$H#^85FA zKTBqdxG-j5B`OE8`Lx?uLh&xvPSiP<QHPl1o&T_rs|eE$&q{V$fWQ_Ik&M$L-)n)T zGA8>GoQ}EY@@dH#3$lzr^a~ti?b284rdQ}IE5n+yQf@>!*BJjNvo~Ob*p*WDDGlMA zumOS9&hs!5S}AVhf(!K<hdZx4ADrVur-SsB&e09e<PNuFhZ{VlS<Mxg%d`oQbNRi} z7}0d>ed#>IoZD07`Z>$LQ#3<F84KrBYHj`24Mem;xz!mUhP-Dtt{aV=b=Eh{T9ata z92#_4JsDA{fzmXLs^3=zMyFV7+7O)y@vRQj`QUfh57#S=zH^0csC9i?AZ&Y1UpvQ- z^!^UF!a4jAo*K`R=wrsABuSvgYUlhI$H+X((hnx#HN~Syz4`iE9FwELVR*vtnxawD z?{Q?FuC}^fwaN2Z)HYUhl3ZJy<4MzKOsBASMcnR==VSQo6#MW9e!RrDYiMlZXac3? z8eS1waH)JV2bux@kyS(;0AB&4()-pkFBU3I*7?T9jF&6*RyN+T_pZK|#=Du#@AkBA rwwI;~hPcofeYi29sOF>=Uwvs|seV1%yU>2cP3Qj)k3xp~>i!)7&b)$@ literal 0 HcmV?d00001 diff --git a/public/assets/application-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css b/public/assets/application-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css new file mode 100644 index 000000000..f27b1162c --- /dev/null +++ b/public/assets/application-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css @@ -0,0 +1,31 @@ +/*! + * jQuery UI CSS Framework 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/theming/ + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default !important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}/*! + * jQuery UI Autocomplete 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/autocomplete/#theming + */.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}/*! + * jQuery UI Menu 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/menu/#theming + */.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}div.tagsinput{border:1px solid #CCC;background:#FFF;padding:5px;width:300px;height:100px;overflow-y:auto}div.tagsinput span.tag{border:1px solid #a5d24a;-moz-border-radius:2px;-webkit-border-radius:2px;display:block;float:left;padding:5px;text-decoration:none;background:#cde69c;color:#638421;margin-right:5px;margin-bottom:5px;font-family:helvetica;font-size:13px}div.tagsinput span.tag a{font-weight:bold;color:#82ad2b;text-decoration:none;font-size:11px}div.tagsinput input{width:80px;margin:0px;font-family:helvetica;font-size:13px;border:1px solid transparent;padding:5px;background:transparent;color:#000;outline:0px;margin-right:5px;margin-bottom:5px}div.tagsinput div{display:block;float:left}.tags_clear{clear:both;width:100%;height:0px}.not_valid{background:#FBD8DB !important;color:#90111A !important}/*! + * Font Awesome Free 5.8.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;src:url("/assets/font-awesome/fa-solid-900-e153efe317e731e59eb8d6d1a568a811b8f7dd5df3823c327103be8e4a0047e4.eot");src:url("/assets/font-awesome/fa-solid-900-e153efe317e731e59eb8d6d1a568a811b8f7dd5df3823c327103be8e4a0047e4.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-solid-900-f18c486a80175cf02fee0e05c2b4acd86c04cdbaecec61c1ef91f920509b5efe.woff2") format("woff2"),url("/assets/font-awesome/fa-solid-900-20464aebbff54cc17776497ce4112c3374a54b38f7ba5f58eec12174149d6742.woff") format("woff"),url("/assets/font-awesome/fa-solid-900-7a58f741ff539af94798ff561c918e5841d7e6164e90cbe57befdec4a16f6a4e.ttf") format("truetype"),url("/assets/font-awesome/fa-solid-900-d5b212510d72b66bdb7feb22c611456621c3dd1a2e88cc42983d7d4c9ab79563.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;src:url("/assets/font-awesome/fa-regular-400-4aa44a07b71f47067872c8f177f31babc0c609af2b384511353c89b1ca804458.eot");src:url("/assets/font-awesome/fa-regular-400-4aa44a07b71f47067872c8f177f31babc0c609af2b384511353c89b1ca804458.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-regular-400-ccf4db1eeb68c96e05e74f8ebfa75cc60c3a0fed862dae6b0ad85d4e1b5b4e4f.woff2") format("woff2"),url("/assets/font-awesome/fa-regular-400-2835b63ffc892d01aac2cc346969b501c845d9184f738589779ec176937e1f33.woff") format("woff"),url("/assets/font-awesome/fa-regular-400-112491dccca97bf50ec7adff8d430dcba6d0b71e0a0b20386f814f3bf5bb94b5.ttf") format("truetype"),url("/assets/font-awesome/fa-regular-400-934530d864b6f03fad8e87b66daf829d17f0e7afbd74baead32a6a4157d584c2.svg#fontawesome") format("svg")}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:normal;src:url("/assets/font-awesome/fa-brands-400-bd4e21d8e25a889e979ac2367770c36863443b8e0f99feeaee09a62625b9cb13.eot");src:url("/assets/font-awesome/fa-brands-400-bd4e21d8e25a889e979ac2367770c36863443b8e0f99feeaee09a62625b9cb13.eot#iefix") format("embedded-opentype"),url("/assets/font-awesome/fa-brands-400-dc64d7192f84497cacad5c10aef682562c24aa6124270f85fe247e223607f3ed.woff2") format("woff2"),url("/assets/font-awesome/fa-brands-400-17ce8b9d612897d1fefd5cd2096dbd83b82d05dd5d1f60421aca15c4ce2445ac.woff") format("woff"),url("/assets/font-awesome/fa-brands-400-70726f98e0d98f543d5fde05a3a74bb131c5c67f5fbffcf4d41b7f68bca2b56b.ttf") format("truetype"),url("/assets/font-awesome/fa-brands-400-e281f2a25598bf8b40a77f3c5228b51900788224e91dade3f4a0f8c383505f43.svg#fontawesome") format("svg")}.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{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-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-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-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-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-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-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-nintendo-switch:before{content:"\f418"}.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-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.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-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-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.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-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-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-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:100%;box-sizing:border-box;margin-left:auto;margin-right:auto}html{height:100%;background-color:#9CC5EE}html.iframe{background-color:transparent}html.iframe body{border:none;margin:0;padding:0;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{border:1px solid #68A6E5;margin:0.2%;padding:1%;font-size:calc(6px + 0.8vw);min-height:99.1%;text-align:center;font-family:sans-serif;background-color:white}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{position:relative;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}header.top ul.regions{top:-3.3em;right:0;position:absolute;font-size:smaller}header.top:hover ul.regions{top:-0.8em}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 gray;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.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{padding:1em;max-width:60em;box-shadow:1px 1px 5px gray;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{border:1px solid #FFB578;max-width:60em;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 gray;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:60em;box-shadow:0 0 1em SteelBlue;transition:none;padding-left:4em;list-style-type:none}#map *{max-width:initial}#map.event,#map.orga{height:20em}#map li a{display:inline-block}#map li .awesome-marker{display:inline-block !important;position:relative !important}section.leaflet-control-layers-list label .awesome-marker{height:auto !important;display:inline-block !important;position:relative !important}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 (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{border:none;margin:0;padding:1%}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){body{padding:0}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{font-size:larger;margin-top:1em;margin-bottom:1em}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.7em;margin-right:-1.3em;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;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;margin-top:1em}header.top ul.regions{margin:0;list-style:none}header.top ul.regions>li{display:inline-block}header.top ul.regions li{margin:0;box-shadow:0 0 1em white;background-color:white}header.top ul.regions li.selected{box-shadow:0 0 0 6px lightgray}header.top ul.regions li a{padding:0.3em;display:block;white-space:nowrap}header.top ul.regions li:hover ul{box-shadow:0 4px 4px gray}header.top ul.regions li.selected{display:inline-block}header.top ul.regions li:hover li,header.top ul.regions li li.selected{display:block}header.top ul.regions ul{z-index:1500;position:absolute;text-align:left}header.top ul.regions ul li{display:none;border-top:solid thin #eee}.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-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css.gz b/public/assets/application-d3eba8d4a824164102e32919820a084700da079ea05453cd44d3a26d6899e7da.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..9a0f5fd507134396057256eaa69c4eb15848b957 GIT binary patch literal 48132 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%0Dquw9@Cz5et@( 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 Q)jNW`Re}pZCJxsB0UxGiSpWb4 literal 0 HcmV?d00001 -- GitLab