From a7b09a2a01efcb40a0df4150b7bbe9a6fb2395a5 Mon Sep 17 00:00:00 2001
From: Pan <panfree23@gmail.com>
Date: Sun, 23 Apr 2017 19:50:32 +0800
Subject: [PATCH] add && remove

---
 src/api/article.js                            |     8 +
 src/api/remoteSearch.js                       |     9 +
 src/components/Tinymce/index.vue              |     2 +-
 src/mock/article.js                           |    49 +
 src/mock/index.js                             |    21 +-
 src/mock/remoteSearch.js                      |    29 +
 src/router/index.js                           |     6 +-
 src/styles/element-ui.scss                    |    22 +
 src/views/example/form1.vue                   |   291 +
 src/views/example/form2.vue                   |     0
 .../tinymce1.3/plugins/powerpaste/License.txt |    15 -
 .../plugins/powerpaste/agpl-3.0.txt           |   661 -
 .../plugins/powerpaste/css/editorcss.css      |     4 -
 .../plugins/powerpaste/flash/textboxpaste.swf |   Bin 204658 -> 0 bytes
 .../plugins/powerpaste/img/spinner_96.gif     |   Bin 13707 -> 0 bytes
 .../plugins/powerpaste/js/wordimport.js       |   381 -
 .../tinymce1.3/plugins/powerpaste/plugin.js   | 19069 ----------------
 .../plugins/powerpaste/plugin.min.js          |    23 -
 18 files changed, 421 insertions(+), 20169 deletions(-)
 create mode 100644 src/api/remoteSearch.js
 create mode 100644 src/mock/article.js
 create mode 100644 src/mock/remoteSearch.js
 create mode 100644 src/views/example/form1.vue
 create mode 100644 src/views/example/form2.vue
 delete mode 100644 static/tinymce1.3/plugins/powerpaste/License.txt
 delete mode 100644 static/tinymce1.3/plugins/powerpaste/agpl-3.0.txt
 delete mode 100644 static/tinymce1.3/plugins/powerpaste/css/editorcss.css
 delete mode 100644 static/tinymce1.3/plugins/powerpaste/flash/textboxpaste.swf
 delete mode 100644 static/tinymce1.3/plugins/powerpaste/img/spinner_96.gif
 delete mode 100644 static/tinymce1.3/plugins/powerpaste/js/wordimport.js
 delete mode 100644 static/tinymce1.3/plugins/powerpaste/plugin.js
 delete mode 100644 static/tinymce1.3/plugins/powerpaste/plugin.min.js

diff --git a/src/api/article.js b/src/api/article.js
index 682cc3ab..1519cb9c 100644
--- a/src/api/article.js
+++ b/src/api/article.js
@@ -6,3 +6,11 @@ export function getList() {
     method: 'get'
   });
 }
+
+export function getArticle() {
+  return fetch({
+    url: '/article/detail',
+    method: 'get'
+  });
+}
+
diff --git a/src/api/remoteSearch.js b/src/api/remoteSearch.js
new file mode 100644
index 00000000..0e3c341d
--- /dev/null
+++ b/src/api/remoteSearch.js
@@ -0,0 +1,9 @@
+import { fetch } from 'utils/fetch';
+
+export function userSearch(name) {
+  return fetch({
+    url: '/search/user',
+    method: 'get',
+    params: { name }
+  });
+}
diff --git a/src/components/Tinymce/index.vue b/src/components/Tinymce/index.vue
index 3be1ea7d..7bacbde1 100644
--- a/src/components/Tinymce/index.vue
+++ b/src/components/Tinymce/index.vue
@@ -75,7 +75,7 @@
           //  language_url: '/static/tinymce/langs/zh_CN.js',
           toolbar: this.toolbar,
           menubar: this.menubar,
-          plugins: 'advlist,autolink,code,powerpaste,textcolor, colorpicker,fullscreen,link,lists,media,wordcount, imagetools,watermark',
+          plugins: 'advlist,autolink,code,paste,textcolor, colorpicker,fullscreen,link,lists,media,wordcount, imagetools,watermark',
           end_container_on_empty_block: true,
           powerpaste_word_import: 'clean',
           code_dialog_height: 450,
diff --git a/src/mock/article.js b/src/mock/article.js
new file mode 100644
index 00000000..029b1555
--- /dev/null
+++ b/src/mock/article.js
@@ -0,0 +1,49 @@
+import Mock from 'mockjs';
+
+
+const List = [];
+const count = 20;
+
+
+for (let i = 0; i < count; i++) {
+  List.push(Mock.mock({
+    id: '@id',
+    title: '@ctitle(10, 20)',
+    'status|1': ['published', 'draft'],
+    author: '@cname',
+    display_time: '@datetime',
+    pageviews: '@integer(300, 5000)'
+  }));
+}
+
+export default {
+  getList: () => new Promise(resolve => {
+    setTimeout(() => {
+      resolve([200, {
+        data: List
+      }]);
+    }, 100);
+  }),
+  getArticle: () => new Promise(resolve => {
+    setTimeout(() => {
+      resolve([200, {
+        data: {
+          id: 120000000001,
+          author: { key: 'mockPan' },
+          source_name: '原创作者',
+          category_item: [{ key: 'global', name: '全球' }],
+          comment_disabled: false,
+          content: '<p>我是测试数据我是测试数据</p><p><img class="wscnph" src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943" data-wscntype="image" data-wscnh="300" data-wscnw="400" data-mce-src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>"',
+          content_short: '我是测试数据',
+          display_time: +new Date(),
+          image_uri: 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3',
+          platforms: ['a-platform'],
+          source_uri: 'https://github.com/PanJiaChen/vue-element-admin',
+          status: 'published',
+          tags: [],
+          title: ''
+        }
+      }]);
+    }, 100);
+  })
+};
diff --git a/src/mock/index.js b/src/mock/index.js
index f1312f7b..b82820c3 100644
--- a/src/mock/index.js
+++ b/src/mock/index.js
@@ -1,26 +1,19 @@
 import axios from 'axios';
-import Mock from 'mockjs';
 import MockAdapter from 'axios-mock-adapter';
-import article_tableAPI from './article_table'
+import articleAPI from './article';
+import article_tableAPI from './article_table';
+import remoteSearchAPI from './remoteSearch';
 const mock = new MockAdapter(axios);
 
-const articleList = {
-  'data|20': [{
-    id: '@id',
-    title: '@ctitle(10, 20)',
-    'status|1': ['published', 'draft'],
-    author: '@cname',
-    display_time: '@datetime',
-    pageviews: '@integer(300, 5000)'
-  }]
-}
-const data = JSON.stringify(Mock.mock(articleList))
-mock.onGet('/article/list').reply(200, data);
 
+mock.onGet('/article/list').reply(articleAPI.getList);
+mock.onGet('/article/detail').reply(articleAPI.getArticle);
 
 mock.onGet('/article_table/list').reply(article_tableAPI.getList);
 mock.onGet('/article_table/pv').reply(article_tableAPI.getPv);
 
 
+mock.onGet('/search/user').reply(remoteSearchAPI.searchUser);
+
 
 export default mock;
diff --git a/src/mock/remoteSearch.js b/src/mock/remoteSearch.js
new file mode 100644
index 00000000..b5429562
--- /dev/null
+++ b/src/mock/remoteSearch.js
@@ -0,0 +1,29 @@
+import Mock from 'mockjs';
+
+const NameList = [];
+const count = 100;
+
+for (let i = 0; i < count; i++) {
+  NameList.push(Mock.mock({
+    name: '@first'
+  }));
+}
+NameList.push({ name: 'mockPan' })
+
+export default {
+  searchUser: config => {
+    const { name } = config.params;
+    const mockNameList = NameList.filter(item => {
+      const lowerCaseName = item.name.toLowerCase()
+      if (name && lowerCaseName.indexOf(name.toLowerCase()) < 0) return false;
+      return true;
+    });
+    return new Promise(resolve => {
+      setTimeout(() => {
+        resolve([200, {
+          items: mockNameList
+        }]);
+      }, 100);
+    })
+  }
+};
diff --git a/src/router/index.js b/src/router/index.js
index 1f7d593e..0550c5b9 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -51,6 +51,8 @@ const Theme = resolve => require(['../views/theme/index'], resolve);
 /* example*/
 const DynamicTable = resolve => require(['../views/example/dynamictable'], resolve);
 const Table = resolve => require(['../views/example/table'], resolve);
+const Form1 = resolve => require(['../views/example/form1'], resolve);
+const Form2 = resolve => require(['../views/example/form2'], resolve);
 
 
 /* admin*/
@@ -170,7 +172,9 @@ export default new Router({
       icon: 'zonghe',
       children: [
         { path: 'dynamictable', component: DynamicTable, name: '动态table' },
-        { path: 'table', component: Table, name: '综合table' }
+        { path: 'table', component: Table, name: '综合table' },
+        { path: 'form1', component: Form1, name: '综合form1' }
+        // { path: 'form2', component: Form2, name: '综合form2' }
       ]
     },
     // {
diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss
index a6670d59..382aff13 100644
--- a/src/styles/element-ui.scss
+++ b/src/styles/element-ui.scss
@@ -59,3 +59,25 @@
   margin: 0 auto;
 }
 
+
+//文章页textarea修改样式
+.article-textarea {
+  textarea {
+    padding-right: 40px;
+    resize: none;
+    border: none;
+    border-radius: 0px;
+    border-bottom: 1px solid #bfcbd9;
+  }
+}
+
+//element ui upload
+.upload-container {
+  .el-upload {
+    width: 100%;
+    .el-upload-dragger {
+      width: 100%;
+      height: 200px;
+    }
+  }
+}
diff --git a/src/views/example/form1.vue b/src/views/example/form1.vue
new file mode 100644
index 00000000..d41cf9f2
--- /dev/null
+++ b/src/views/example/form1.vue
@@ -0,0 +1,291 @@
+<template>
+  <div class="createPost-container">
+    <el-form class="form-container" :model="postForm" :rules="rules" ref="postForm">
+
+      <Sticky :className="'sub-navbar '+postForm.status">
+        <template v-if="fetchSuccess">
+          <div style="display:inline-block">
+
+            <el-dropdown trigger="click">
+              <el-button>{{!postForm.comment_disabled?'评论已打开':'评论已关闭'}}<i class="el-icon-caret-bottom el-icon--right"></i></el-button>
+              <el-dropdown-menu class="no-padding no-hover" slot="dropdown">
+                <el-dropdown-item>
+                  <el-radio-group style="padding: 10px;" v-model="postForm.comment_disabled">
+                    <el-radio :label="true">关闭评论</el-radio>
+                    <el-radio :label="false">打开评论</el-radio>
+                  </el-radio-group>
+                </el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </div>
+
+          <el-dropdown trigger="click">
+            <el-button>
+              平台<i class="el-icon-caret-bottom el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu class="no-border" slot="dropdown">
+              <el-checkbox-group v-model="postForm.platforms" style="padding: 5px 15px;">
+                <el-checkbox v-for="item in platformsOptions" :label="item.key" :key="item.key">
+                  {{item.name}}
+                </el-checkbox>
+              </el-checkbox-group>
+            </el-dropdown-menu>
+          </el-dropdown>
+
+          <el-dropdown trigger="click">
+            <el-button>
+              外链<i class="el-icon-caret-bottom el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu class="no-padding no-border" style="width:300px" slot="dropdown">
+              <el-form-item label-width="0px" style="margin-bottom: 0px" prop="source_uri">
+                <el-input placeholder="请输入内容" v-model="postForm.source_uri">
+                  <template slot="prepend">填写url</template>
+                </el-input>
+              </el-form-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+
+          <el-button v-loading="loading" style="margin-left: 10px;" type="success" @click="submitForm()">发布
+          </el-button>
+          <el-button v-loading="loading" type="warning" @click="draftForm">草稿</el-button>
+
+        </template>
+        <template v-else>
+          <el-tag>发送异常错误,刷新页面,或者联系程序员</el-tag>
+        </template>
+
+      </Sticky>
+
+      <div class="createPost-main-container">
+        <el-row>
+          <el-col :span="21">
+            <el-form-item style="margin-bottom: 40px;" prop="title">
+              <MDinput name="name" v-model="postForm.title" required :maxlength="100">
+                标题
+              </MDinput>
+              <span v-show="postForm.title.length>=26" class='title-prompt'>app可能会显示不全</span>
+            </el-form-item>
+
+            <div class="postInfo-container">
+              <el-row>
+                <el-col :span="8">
+                  <el-form-item label-width="45px" label="作者:" class="postInfo-container-item">
+                    <multiselect v-model="postForm.author" :options="userLIstOptions" @search-change="getRemoteUserList" placeholder="搜索用户" selectLabel="选择"
+                      deselectLabel="删除" track-by="key" :internalSearch="false" label="key">
+                      <span slot='noResult'>无结果</span>
+                    </multiselect>
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="8">
+                  <el-tooltip class="item" effect="dark" content="将替换作者" placement="top">
+                    <el-form-item label-width="50px" label="来源:" class="postInfo-container-item">
+                      <el-input placeholder="将替换作者" style='min-width:150px;' v-model="postForm.source_name">
+                      </el-input>
+                    </el-form-item>
+                  </el-tooltip>
+                </el-col>
+
+                <el-col :span="8">
+                  <el-form-item label-width="80px" label="发布时间:" class="postInfo-container-item">
+                    <el-date-picker v-model="postForm.display_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </div>
+          </el-col>
+        </el-row>
+
+        <el-form-item style="margin-bottom: 40px;" label-width="45px" label="摘要:">
+          <el-input type="textarea" class="article-textarea" :rows="1" autosize placeholder="请输入内容" v-model="postForm.content_short">
+          </el-input>
+          <span class="word-counter" v-show="contentShortLength">{{contentShortLength}}字</span>
+        </el-form-item>
+
+        <div class="editor-container">
+          <Tinymce :height=400 ref="editor" v-model="postForm.content"></Tinymce>
+        </div>
+
+        <div style="margin-bottom: 20px;">
+          <Upload v-model="postForm.image_uri"></Upload>
+        </div>
+      </div>
+    </el-form>
+
+  </div>
+</template>
+
+<script>
+    import Tinymce from 'components/Tinymce'
+    import Upload from 'components/Upload/singleImage3'
+    import MDinput from 'components/MDinput';
+    import { validateURL } from 'utils/validate';
+    import { getArticle } from 'api/article';
+    import { userSearch } from 'api/remoteSearch';
+
+    export default {
+      name: 'articleDetail',
+      components: { Tinymce, MDinput, Upload },
+      data() {
+        const validateRequire = (rule, value, callback) => {
+          if (value === '') {
+            this.$message({
+              message: rule.field + '为必传项',
+              type: 'error'
+            });
+            callback(null)
+          } else {
+            callback()
+          }
+        };
+        const validateSourceUri = (rule, value, callback) => {
+          if (value) {
+            if (validateURL(value)) {
+              callback()
+            } else {
+              this.$message({
+                message: '外链url填写不正确',
+                type: 'error'
+              });
+              callback(null)
+            }
+          } else {
+            callback()
+          }
+        };
+        return {
+          postForm: {
+            title: '', // 文章题目
+            content: '', // 文章内容
+            content_short: '', // 文章摘要
+            source_uri: '', // 文章外链
+            image_uri: '', // 文章图片
+            source_name: '', // 文章外部作者
+            display_time: undefined, // 前台展示时间
+            id: undefined,
+            platforms: ['a-platform']
+          },
+          fetchSuccess: true,
+          loading: false,
+          userLIstOptions: [],
+          platformsOptions: [
+            { key: 'a-platform', name: 'a-platform' },
+            { key: 'b-platform', name: 'b-platform' },
+            { key: 'c-platform', name: 'c-platform' }
+          ],
+          rules: {
+            image_uri: [{ validator: validateRequire }],
+            title: [{ validator: validateRequire }],
+            content: [{ validator: validateRequire }],
+            source_uri: [{ validator: validateSourceUri, trigger: 'blur' }]
+          }
+        }
+      },
+      computed: {
+        contentShortLength() {
+          return this.postForm.content_short.length
+        }
+      },
+      created() {
+        this.fetchData();
+      },
+      methods: {
+        fetchData() {
+          getArticle().then(response => {
+            this.postForm = response.data;
+          }).catch(err => {
+            this.fetchSuccess = false;
+            console.log(err);
+          });
+        },
+        submitForm() {
+          this.postForm.display_time = parseInt(this.display_time / 1000);
+          console.log(this.postForm)
+          this.$refs.postForm.validate(valid => {
+            if (valid) {
+              this.loading = true;
+              this.$notify({
+                title: '成功',
+                message: '发布文章成功',
+                type: 'success',
+                duration: 2000
+              });
+              this.postForm.status = 'published';
+              this.loading = false;
+            } else {
+              console.log('error submit!!');
+              return false;
+            }
+          });
+        },
+        draftForm() {
+          if (this.postForm.content.length === 0 || this.postForm.title.length === 0) {
+            this.$message({
+              message: '请填写必要的标题和内容',
+              type: 'warning'
+            });
+            return;
+          }
+          this.$message({
+            message: '保存成功',
+            type: 'success',
+            showClose: true,
+            duration: 1000
+          });
+          this.postForm.status = 'draft';
+        },
+        getRemoteUserList(query) {
+          userSearch(query).then(response => {
+            if (!response.items) return;
+            console.log(response)
+            this.userLIstOptions = response.items.map(v => ({
+              key: v.name
+            }));
+          })
+        }
+      }
+    }
+</script>
+<style rel="stylesheet/scss" lang="scss" scoped>
+  @import "src/styles/mixin.scss";
+  .title-prompt{
+    position: absolute;
+    right: 0px;
+    font-size: 12px;
+    top:10px;
+    color:#ff4949;
+  }
+  .createPost-container {
+    position: relative;
+    .createPost-main-container {
+      padding: 40px 45px 20px 50px;
+      .postInfo-container {
+        position: relative;
+        @include clearfix;
+        margin-bottom: 10px;
+        .postInfo-container-item {
+          float: left;
+        }
+      }
+      .editor-container {
+        min-height: 500px;
+        margin: 0 0 30px;
+        .editor-upload-btn-container {
+            text-align: right;
+            margin-right: 10px;
+            .editor-upload-btn {
+                display: inline-block;
+            }
+        }
+      }
+    }
+    .word-counter {
+      width: 40px;
+      position: absolute;
+      right: -10px;
+      top: 0px;
+    }
+  }
+</style>
+
diff --git a/src/views/example/form2.vue b/src/views/example/form2.vue
new file mode 100644
index 00000000..e69de29b
diff --git a/static/tinymce1.3/plugins/powerpaste/License.txt b/static/tinymce1.3/plugins/powerpaste/License.txt
deleted file mode 100644
index b639f891..00000000
--- a/static/tinymce1.3/plugins/powerpaste/License.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-TinyMCE PowerPaste
-Copyright (C) 2015 Ephox Corporation
-
-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/>.
\ No newline at end of file
diff --git a/static/tinymce1.3/plugins/powerpaste/agpl-3.0.txt b/static/tinymce1.3/plugins/powerpaste/agpl-3.0.txt
deleted file mode 100644
index 2def0e88..00000000
--- a/static/tinymce1.3/plugins/powerpaste/agpl-3.0.txt
+++ /dev/null
@@ -1,661 +0,0 @@
-                    GNU AFFERO GENERAL PUBLIC LICENSE
-                       Version 3, 19 November 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU Affero General Public License is a free, copyleft license for
-software and other kinds of works, specifically designed to ensure
-cooperation with the community in the case of network server software.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-our General Public Licenses are intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  Developers that use our General Public Licenses protect your rights
-with two steps: (1) assert copyright on the software, and (2) offer
-you this License which gives you legal permission to copy, distribute
-and/or modify the software.
-
-  A secondary benefit of defending all users' freedom is that
-improvements made in alternate versions of the program, if they
-receive widespread use, become available for other developers to
-incorporate.  Many developers of free software are heartened and
-encouraged by the resulting cooperation.  However, in the case of
-software used on network servers, this result may fail to come about.
-The GNU General Public License permits making a modified version and
-letting the public access it on a server without ever releasing its
-source code to the public.
-
-  The GNU Affero General Public License is designed specifically to
-ensure that, in such cases, the modified source code becomes available
-to the community.  It requires the operator of a network server to
-provide the source code of the modified version running there to the
-users of that server.  Therefore, public use of a modified version, on
-a publicly accessible server, gives the public access to the source
-code of the modified version.
-
-  An older license, called the Affero General Public License and
-published by Affero, was designed to accomplish similar goals.  This is
-a different license, not a version of the Affero GPL, but Affero has
-released a new version of the Affero GPL which permits relicensing under
-this license.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU Affero General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Remote Network Interaction; Use with the GNU General Public License.
-
-  Notwithstanding any other provision of this License, if you modify the
-Program, your modified version must prominently offer all users
-interacting with it remotely through a computer network (if your version
-supports such interaction) an opportunity to receive the Corresponding
-Source of your version by providing access to the Corresponding Source
-from a network server at no charge, through some standard or customary
-means of facilitating copying of software.  This Corresponding Source
-shall include the Corresponding Source for any work covered by version 3
-of the GNU General Public License that is incorporated pursuant to the
-following paragraph.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the work with which it is combined will remain governed by version
-3 of the GNU General Public License.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU Affero General Public License from time to time.  Such new versions
-will be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU Affero General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU Affero General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU Affero General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If your software can interact with users remotely through a computer
-network, you should also make sure that it provides a way for users to
-get its source.  For example, if your program is a web application, its
-interface could display a "Source" link that leads users to an archive
-of the code.  There are many ways you could offer source, and different
-solutions will be better for different programs; see section 13 for the
-specific requirements.
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU AGPL, see
-<http://www.gnu.org/licenses/>.
\ No newline at end of file
diff --git a/static/tinymce1.3/plugins/powerpaste/css/editorcss.css b/static/tinymce1.3/plugins/powerpaste/css/editorcss.css
deleted file mode 100644
index 73a95afa..00000000
--- a/static/tinymce1.3/plugins/powerpaste/css/editorcss.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.ephox-salmon-upload-image-container img
-{
-  opacity: 0.5
-}
diff --git a/static/tinymce1.3/plugins/powerpaste/flash/textboxpaste.swf b/static/tinymce1.3/plugins/powerpaste/flash/textboxpaste.swf
deleted file mode 100644
index 6a2a35a0387683578c30890c77ca72f6958ac87f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 204658
zcmV(?K-a%RS5pkrhXw$6oRqywj3h~x7}oiT|NoQUs_M?}nc3-{nXazt-kI4+^>%M$
zL}X=5#V0o+vZ`yRXB?gpo|)bi5gr@vQI)wn3-#_&5+o3$020!QT7jR#f|Nvv2LYr`
zy8?8O4!Y>Xi$H2tq<EqPhzA}Bjo!!1+}y)6yQhH4aC`R5+}ytJZ`W_cj5ppW{GB)6
z*j;<0QA)n?#vAqZU;gr!f4-H0$F(;GBWq?IJbvSiKd;XJqc{NIU-6BHZyW+n;@@n*
z-(MEq7_Y7GRX1Z_{%?QdA8vg4<(EbHpZxO6zmoi|FTY%W?>m3>%k{tZ<$7Xc_uyY8
z9u<>c{-cdw{^N}=|H;NL{~U^M{MrBdw_;!Z#l|20#l}DS+w1?!-&_AL|MvQq|8)IN
z{*U$l^Ixq0yMMj@KmWh$fAin2|F?g*@jv}18~^EF-}w7~vhi>JbmK4n?#5sJvyFfH
zUvK=yKUx2G|NCE0{D1$=Ka0JQe&db5fY$u8+8gxm|M`@E|Lwmo(!cy${{{a02Lk@j
z|Hn7fzkd$p{%=w4Uw!&F58j9myoEix+<fKO<Nb??>0Vtw^sH;IZQeLb@8Nvm%&moY
zlROm<@!t6t*2qg7InKl~XBoq&4L&lAhp((r{2638i_N7y^ETjryt|y9TZ>q2u`q99
zb*S4d$ZAf^*?3|tBHn0Ctf@8g+`YOp^GthYEsmYV)bu=S+~ll#tA$1qx1vhn!@`-s
zOZKAhr*p@(vO@qJPn_3nD3NImo*!c=fNe*#YixU^)&QC}@@!|;F=ytbwI~rH;XSlw
zmrzX->%{sBRIz1Vh-Rl5_0n>tsXkO<&Mqg6jfgqU9oz1F0=+f3GUrxA!!M{W+)`_(
zVB9^07XS7w*O|Ps7CHEm3;S}pFtN3zR@-*Hj=6X#yR)Fagwx66<&2VviwV83)KXn3
zzBN9WFKo|B`=6Yq)>HXnxIsnyswWF)ITzobZv~o^9@`fe*20>NtoxAz3LoJDUXDJs
z1>?2w;Ik;zyyjGqU)8YO(ZZg?+{<#?tXDXLVom(XJ+*Gm9dj|JRQlK%EnRv{QBC-i
zY;~HP+i{kzMUO=>6FSyx$@L8E>3m|<dFDh7jfu1WrZikYPtqs$=J?mmwXiEh!9`Yd
zM<2%DDxR7P^KxO%uLN}C7hnEauECRlS6aMd!V10K4gl5A#7-SpX&KR)<!tPvTRm7|
z^nUun!3e6SCwgNB+agD#?TpNcHLyGnwg7kIvrhZ|V0o_Eq>tW_=~~cF^z3BBFHWk=
zU~bL?QnfXkK&zf$VS6OsqAd}7YVC1H*x10D2cLGn^ek#x99}%KCYyuF@-ofO_=1Ag
z;@0fK*>63A9mIx~|9I(o_Jz%zjZ3ZysHUgApkaDu#O!ip54kz4Ty<EixmY-hyjmIq
z&xH9-K$-(<X==<fbF#EfoXHqwV2d(va7=G>Wi8SJ?*_W`%CfvvZDL<i6H2fRjG>Eb
z<1e7e_#s&_9q0|EBXjif5;}V}7E3MP8k*+=&zbWC&koziwA5^CGT!1HTW&MQJnd5E
z1bS;~du~Sb6|VLScA!WX@VVt#Q@I~C>{sFu&}J_scvycS9(Qk>4B4ZFW%>oobMd&1
zv&7#B<f1J?^XWSzAk{Ue7WCN2+G7we=)nGvfZ2#G4%I1_e!Op8!t<VLU-*>BG-1P*
zyL1cI@&Y=_er53jO7f&!+8J$~!}DZ06{9|cxw`N-ild1$db!(D6*)7?6X#flmLWGG
zPc_bDw`cW^%ZXpc%p3z|$AaM;xf$AxIJX$ytaE|cu!&jO))_2zIbGC@t(!0jGvebs
zd*Z?<Q--;?*-}&J#G6j!Sj5|o2@|=Bnc*FOe^~Fx11dD%V59m6*_PJFTf<Jo*}EHY
zkkaOSUt87wuIrzwykDqueH*4wMD+#PD$$Euk+tq>I|4pVERQoPXY(<PbpTe-<{GBU
zfgOTC`BT&NECu`St;h7?$}ye1v^?4&Vk2kbEDGmp<<~Kt!R>Q+1%S(|6xLUp%&$xh
zi_*yp=zxL!dsglo)&>?CT-g_1)`OY(61Il6b>Zb?qHkYbd1*vCvGB2Yj%&9!$I)NT
zZ0{yDwl8h34mG9e>A5}ju8L!4YR^pG_pxvSCgTjM%fX&zddr2?hH;#fOx)t+`G9!w
z37shg?`G~?@;N|NW0Q}~sXe*L<99Wzkt65;%y~{tOVM{>@04F(0i`j(9Rm7gV$NMF
z2c!bbQ)oiR8C&Vm#l;CMIY?3kZO3`JoM*A>zT<Jlm}o&6IG5&fmw>gs5WunmHfQ4%
zJbd+$1><N{g237ZZeTn%@a;ME)P_ls!4w}$H>EH1<Eg)duL?luL!t8*ymB+Ioy8d6
z0H2ifc)h#X2_GEz$&=KGwx=iNJTo`PV=>Ta@jP_qS@B3io)d{9$Mc+NhRfDr4te64
z#<_A~FI+Wvy^9Oi@^Y`l`AVNvJjb06==RHn<sw0rLQFaUU@o{kUc;NYRZ^)_vDOL*
zsVzO{l$(+n!RIXKjCNBlV&XYag!*1~adk`t<%ob9ZPtQTMZk&kN^Xb6Noark#_f#D
zq2xGX#tdGTG{)A2xtw@u!=Ax$4YO>VF<?NfOJ`wQ?w)aFx^);PXDUw`vBhs2Gh$~#
z9L!cX3Yvmy=)v8@w`RpliEv1%7bnGgZ_<7PGSF3`5;t>U&txJ619M_c;3Ye-DFS|r
zYw67<Hw@1*oD&)AcbDcwJbMnDrA##xrsnmj1*FxC8&iN)uBVfb77yk%J?tZ|1SA>^
z2-GOQld`^jD`RySAbB$j$B}1S9=@aRCo5xf3Oj!79Jm&E2`$g+l6K|VWa4l1Zkd5Y
z$A=}MDkA3-;;kj|J9Oj>tSE?IEDz(TRh)wk*AA3Gs^%3J))Xe54=RTNHLuE`V0#O&
z(d$U%KpMB3>jyZzAz00mP2a&>JlaC=vV{Af6x7X-Bzzk_xhdOiP|uE2+y%H%y00$;
zwX<jYbc{H2>sLsFk8|A5ZD3}-D>u%=^S#^I^ura}HD%xifn-MlIukiv>|$Of*tRTu
z02~{?XJO)dSDrUN{NRI``_LRa=N3+&5B%4BK<xzd4?cYK=r{22Y(jV4WXB8hHS{-D
z?pC<_i8fg{Q=)*1&MbJef9H-b2y@Q%>=m?6Ou@9Df)j`^7`-G?XRh3ZwxD^k5`c8A
z*SHAYyX(yXiZ?czIM6*)>PDdWfN{-pqKUnLN!$Z3pwd%kVvlYr*33Mgz{(uq&U|i9
z;56S6TTMH(scvg<Z7bE$^)1(j2Y1>nPmqHxARTN~`2{XRYaEg(>@H`~89Oio=w%^z
z0r+@W3k^7L8x}CTML&INUt1Hm%79bo6R~T-(>?=<-g^#=*Q5gtx91a^2uXh%A_>&a
z0$vHn9Zr`z9Ac77d|>OWs~Scj6#3R2JDo2z%E6gAY0cys6GZIciXbI7Vh(``vXmln
zbFiWL5|u5KIN`zHbu_M{>{>d5i&Wqa?SohZ{=$?MTdSK{Sn~-`ELdeyR#uR!1t?f}
zrJEk94JZrCRKd4wm!t=DYSd<9!Lf*z6NPE&oA$OO8U{Q<qJ5j#0|}Pqcxh1@NR=Fr
zmN0#6(?!yO$SER#(-v$KW8{n6-77c{e-Ha6RA+JIe?Jj1=_|(-JrL*ZD=Xea*=4ak
z(nflOJC&O@=W`$@@e4~@Z9E`EIPwOVl+!(TsSi!WZsH594g&(KtW6I?2WyF2C`xd%
z9#HtNdovO&?7*z8PwY9#sA{vBpk7^^B>vv;YtaJ9!_WfC7z^CRnU~;a<{<d_XaXON
zvmj&4kzo~h^eph`S>dTPY!7|piv8--e(m{S<!Qg}v|n{TSW`auqBzkjZu$8N-5+uG
zNbYJCIrmH_T_fldSu}uGM)69JU%BJ0tH`BxnDV`YC0xNR{W#1g+);W3H+Q77fOmXx
z052b;_}~5NVvLw-NOmQH<d#JgPT?rX-9{XR{%Zo5$-1D7-?_brM9H=_9w}m-sE*gr
zNZKO!w1~Z34YiMz;RQx??;RyHto$&*=ibrBLBw2J=c?`)(EwhmExEEgMn>Tjk3vjc
z#EzzhCWM-)`&`@|J)vQd0F74K9c@!M85$ubN56TS_~=kW%0HPn=Ws{}G4@>qR}eFg
zdoq*B*o6@zBoFx@Vo_&qaDhag2YyK%HBQvAn=<6dQZ*u2pp4<u>M<%%u$kZzbhEps
zQ_(I7CB$nIbd1j|5`c;cAF+(+_|Q;LY$;AK{KkkqNIT+!xH%y^#53Mn+<iC(P(Qe(
zS+|N=F;_h2Us^W}=k-h^vyeQSOQswW#2NAg5zrzFgn*fq+DCiJ-K`N+BI|+cTzFD*
zM1--49VKg;BCV;todF#ntYqs5pc=Fz3M_$Khr@pKGElDfN=X?C3{XwX69L_l?<r8y
z&n}qUH2K=n*a|_)7c2cxg0-+@!a+e4?JO&94dCJ2xgIP@QW!lQm~1@^;g-&=OM6D-
zc-@?%tgt|*yq_+L-WfPk>-Ckju*$0c6zGoqGN>F$%ArdsVdU1>8rf5Ex=)GXd}+<3
zQWv#khrX690}ohp-x@pe8D;Cgeh1Bes|ITAdhI4|y2zO%#uoj?uZXIQ+REg%q_lGd
z!<>zP?o|>rgZU(x&W<MLbUt)gmB+L$J?Dev^1)&mNvbzz<9(RyQ&_hV;{JCe$8tML
z+EBxuF?`k`W58Mfb_taWm5`<YcfI#-RhJ${V3!SzCTD^@ZwQK>lUW1U6V|g@;~is_
zQ$Y53%Lwx%2rV04SV3F$Kgt)!lvdhM6e1keilQ3=lvb+FXzkpNZe}&Am6eDVZ6SM!
zs(|OVcO|>ct&APZ6<hz9H9X!Pw6qJ4zA9Qtk4DJzTKcJUPYC!>ehu8C^V;&oPCN63
zgTjRndFDp!@hbvXDK{OFG*w9;<-P<H#!uC+tkKJeNunJbVO4*^;O(Gjj3oCY^lyeO
zcrRl3^M-Y;CF5MG5Gs@ll*t8(d<||-X(hQ}1ewFft)}|V8v*_~YiMgUZID<VjYm=j
zR7Fn(1}cSTo^n(&rHUkFiF~j?E`VQ9Gfc={=0QzrVRU8U5iIj}Y4+p3P`@oBq>I%`
z1YZ@!-^kq{ynrhHl7bnDJFT<Wi-3u-M_P%L9Ha}c8WEWLQ9$v{MzDOOfLoq=nz9(C
z9Fi5{m>rjlu+9V~DPb$t2$*iAw#gd-RZZ5=v^zON*Xfjuu;?SORkHY^j0<CA4Q#Y8
z;zpLZeRW^&Q_vw#%y|HVIv{IkY9g7SoV1}7QE?~+o1n}lORt>aYOl`FB%n+$%Lf*b
zU~XP)JDll0ypx1pG3rPN_FL$(XtPRPAR-c^F%u;Y@hMr(6y?H_dthvA&AqGK%NdLj
zkW%!4ahUzEGQWQ-zj2qkI%Qnh-q3PAcW1RcY2h;`j8KE!w_uExi-m6>P%;!XDXj#I
znPrXLy0@4B37RuT{6JH!K&#$wf|zR>!CdJ*?>76!Nv+#xHwQ-ZS+hGV4^LWyAZUj`
z?bcw}><*0MUZ25(f<a%b1cCH%Bxq-<ja4bM1hRTF^E|lXL*1N<yP8a8;Ru+^L=k3m
zQ-6n$;0Iu^Jx!28mBP&2SeV!l*0$(yc(2YMlty@t)V1!~6^MR^NdjNi7dfzH(qcFC
zSE6th%hs0**I7i^Akq$xvhtK6XX<W%;?xW_lB5ZR)3%CPwb>YnPqfXUZ6`4@XNa7f
zTh>c_NX(r%1D5U;KBTBT7D8P7C0qgkE&~7;A2#t7n+te4xTVp`Oe}58Cor;@&cf%O
z$^=j`>iMnPcs5}Zb}OstTP39pq<jUVYva;|jnkf`d?@O;q%n-7bYKqNz-LGEm%LMi
zQL{Qp70KSq&0I&!_X1j$yW|N$%-Ha?J$E16vIiVeZk698tj5G?5JCBfZ6^vlMjK+p
zI4B_$=I7KgeFkrj5Y%v^0$6D_2*k&TVdMfn%7Op*&~(4~_@f^j1`P_!#)=6<#aOk0
z$QinoL&*r6o}^lxCNAcsdx!W);Z#E+aoPqVD2^!cIpMN2Lz0J4Y@1v&3hB*2icen8
znKfs05-&aqWMf}__`^qscbCa`%~xn?18u_&j*x5ea0Jm%3iy(~;x2YmAyuVu7cLqc
zJFMr9lQ;@}Kg#Blha&1URjSWhODUsl6i(enN$WT{B~Q9l78ep+3Dkta`k0)dD`a+!
zTQo8;+H_H?h8By6nna2hn{eBvDD%@Tn4eH5eB@rx9QM%9DJ_-CT5)Tr16oWqkW@r5
z!?~qVf6BD!x}rgaZPRsGa+yQb#HuT2e~p9(gr@;Xgh0Ry1DS6T4QS0+V$lkkc19>p
zbY>}t90T&$^5XD!Iq?e2g7s$BtwudO<uzJr-J7g?i}mx#`uQSe;QqK_Tu(QQn`xXS
z5@}y-nh>M_TG;&d(i|^fi+MLR7`NIc=N8t)B#kwlPcj9)o8-PBLkpf;<A`%st{^sR
zj=d(Ldg5H-hy*BX>Tlp}ZLc=Fk<`6r(Gr8r^1|C}jxVjau^|1iF*UELj+~(na#d)$
zp`N}aEbZO+Iq?`VDjDaupj@NPO%V!Eb3UKkkN`gmC@6j;ct$8v(Lg&X$>%&1Z%;)s
zXS>3=VL34uWURuH2y-Sh!e}pE;(oxb@JEjh5wdv$n?C$8uQO<!fZDv)>_rfdKl&Pt
z9#aO8W-}xfH!+DaZ>%NFjloAWg~4AJS4_vehDn9Vh<!0QHdtrQ(Cr2?h6h`~q=8&R
zhU~*w=7WqHmLRStgXUpegDW{8PF5tn&q*5Kd=R#UY?M8=q=hyRNtZV8h&a^zoaM3R
zL<L0}KycWeQs}riHe6ZFE3dw=yjr3%h1r3IoZ2j`24PYku09_vd4?*Lf)u~wK0Nhi
znpG4`Sk;?Zk_U_4ESO{ikE21PP1^s)JW{M}mCOMl>!&i>_ZNt?_0xGIdHv)rX15|b
zbO-RF;MJ(!XK5d``Lnv?EXEq(1px{^fNf^|G<RIw^iZf4Gd<WRHfLlZqK`}x78lWK
zZ{9vBajoTE!!hZ~6?XRy8*-LN^Gs$zn0iFB%LL9|7nxTn>`JNpTmUo9h)Id}gS)r*
z+YI_E7r~}scULtSy$^x;5k3tae0Rs3<1A}6u|#}AR=#Qe!R#DA9^Fvk>=VnGTHfLY
zNuh{^&c}z2R0;|5twp4wgNI@TcTed7e8&zpxqQ5WOIz4ShqsnM8$Oo*><Ga~#~uTt
z>f;q?SN7A}p){G8n4T=omHFAb0xtB~;d)lUnc<P~?8n@=Z`}4d8cv!unhO|}4Ors^
z^*y}{(nexh5cEJ!_|N_JSHDKXDXol8$){+Z@f=*G91d4-ies`hU)b~75(u<bBR*JO
zT-etUXSZZA7$Jf@zDq=uHMA+7Hyqf;P;pCn87(Up$cf-p#Y_ATA;c)lOh$}wZFqbu
z@@)<h0f8ftJ^_Iv8%Y(zIHeVoDE`auw4iszhT+WD4OEn)he1mDYQ>0Hj}g>&c%dQ@
za$3nh2k;7pqHbAk8%&m%0bwaF6^Jq$6%~h3lZN1J5{6588Rjl1Ga>TgoR#)-GHg~r
z&$nAUXh=C>FTfp})e{k1h^gC#lGRIXG=eR9QenzBkbf^=Ns3t1=-ZrJ0%Z@iy2&R(
zNeK&M%QHt;N}z~4fdOUv&cw=!XX<{Lfg8KbAWNF8r3voRE|8@o(tq7ywBj!lW+re@
zZYCCzW>@CI8k69`&A(pQ9-7c{G9{gJT(q|5C-zz3=k&-~2-GyJZvl;S&3Rem=mtNa
z>?fr{EGa>oBWHdSXLJ41iZy?X_G3X-cToNa#H2{#F^9=0b3n;iYugZ=@igzn<}b8e
zRRQk@m>Sx^c_w9iwrQL+&s}sT@=B^xTEZ&3KvsKasw*m#=4W_Q$68#%W`AW)h?<_?
zB*&ID$A^SqA`321rJireUN{GS0S82Uz}^(A0Ag}sy|Q6XZCwB+Ou30wWkqJt*KSL&
zJVEH5OQbP8k)T!k<OjFr;6O-oT<(%eM3-%=@&Rxuhzi6Xs={i>e|gRVwYUD_K(c*7
z1{>6E1vi*px5r8EW=@VW1!0pt6zM!VB-_g2aaT^}@Z8Vwq7cfdDot137aeK!U%Zg^
z!*$agnPV#-oG^Q1r_O+I<t0<{$x{1;=C*1|Ja^D`Jnb){?9?~h8o$YAxKhRsHImu4
zHRi)>k5+;J2_(+hK~I2-3yZBBe0AAw1e`d7?TCz_GvA8<Gu4um{&PFjh*eWlr1k?g
zThu0@;0>%RX*vvxAj@2u(7;~G*>iM*V_K%Uz!QA{a~zkwP~?kb2{{bdzx)NWB_MU^
zRn2#V+ANLNhmP!Etd12|HXcA#;AL6LqXDU>W}^wYjQ9*)1xC%{^+ppHzbHQ=2Lsq7
zNJg^%yGwiYvW`v+;aRfFqAlDLfV4Yvr5k+|xveC+Vc&!72(^#aqK`tOqDZu6un`ae
zbxz)TV(BM@xk%Pz%Q#BJU83M}#IVa<IfB$urVIhZj4?&y^aT!8+J7vN&WSKF=@wq$
zk%gWpZ0}I24+cR86Xh7Nl2b-82Cfn%d;%)MRSxB8|1pX{lm|e7>&h9rKS{v|I+PTQ
zphrp7h;S*{HE!{l*fnl(HVI?|+)9jSHx#WvaLl)ron*k_WXFhhEZH+|b2-^HZt*!O
z8X>2Xk`eYg*)pQsPVO1E`<;{n0wiKi-!$&@Few=Jbh@Pdn^q7m^;Q6qIWpC{xx*ht
z!^#K&6?SUcf6SopNov=$XFj_$0NZ?%zM2Htl8F&%ak|JP`|e?i)B~DIrw{^eu}w<|
zs~Cp*fCgLAZ5u&X+`73~!1<@yd1=tRVS36$LsB>F=3CG#*YMQHYiT$Xids^cT}S|*
z4qMV3O$f@G*O=ImP_%lnDHg#kaF!3<H(tZ>D7M*fWm}=lXs9&#5Kvz>SCJr12)G-B
ziPymw?;@$aoGvG5rq%)4Z@Qd{*)R{GsyT(O$Kn}XkHsUq9*cyuXVKh0fdliLxtO1D
zTonzM4RDo_n*>M<I?(QEBk;^70+1CTpADbin)hP({H@#aNMJX7esEhp_v`R^nvH2%
z?I$kVTRm}{F?9{QIiAwWR?|`(kFKbTT`>uf<ah>4CfO=JW01Wn;iSbP8i~cikMy3j
z!7^EN3zzE%DiU-8reK`}BYPB?Hufd3C9#2PK~=)t?i2h-1d5GIy3djefE+=ok`Vjy
z19SY!1k!fs_#sUeJ|*JU8?co8=Ex@}rAARqJb$ijk$R}EtvxI%8z7mG9gz-)(m~Sb
z7!BZf(Ib@vtva{`yG7w_U?}q3dD4_1MIA+*Zc}fIp-ouqg`1)_;!_^R<dn@Nak}gZ
z(@7re8Y@nSX^6-G7D1X?vSQSS-&3EvsxZxpJgTY+oi?H+OiAvneFenoXx2A{CIHD#
zTCM|oY&|jONF3s-7Rk2)C6y&LFiOE;=!%XiT(ELMO8&Js^LCCsJ_QnT;g&97q}?kq
zU#RbhU?mX(z6j?XY?N)W{gZT{GIjz^TQtPv1R>NOerz4Cp22TY%_}8ww&K}PlueOy
ztVpbi=Ez-9^BcdED=qT=c4A7N=RkdIJ$gUcmoD0>mB*-X#UVWibo42DY*I%n%)Q(6
z88FA96&mh+jS3*!jPL*GP(>rkdfK8R4@a8F6FEUL6Mq(D7upQ@W<;$kk&QMNwreGX
zMMqIM+$a~>Z$wlP#;IsgQ>3Q&(O28x1`F)lC>I+zOBg6YYe`Zo*E$(?+7j_Atb29T
z${ZK_;uVbP_(ldWkT67)VX$Dr&c<k4tPz2Cm{mlf2WS+e-=y4ic3EM8nus?*+!)MK
zZv|Gpfc4W4g)7(*^IHjM`=oq#cUFuKC<L9Go-gEhY5Fc+kxJU)!wP7lKD<)=-2*%`
zk4}~CQqYsPAl>@~dJ(u`eys>zu)~}2N{oRh_J@qn!twc1Ea8QI$pW*ha*MW0EUN+_
zxg8AqMbfSSq`0syV6d+gG$B}x>}z{Ac3v~1vn^D7Vb5I4ceUESn81oYg%bn-O8D(o
zXAY`hU_rxf)k9GT?3Q=<{{_5Y(uVSW*)}5GUm_;D9|tWchfkt(6Ss<@LAu)~D7dAZ
zJTQo3KbaXjs!$<>nhRi}c+^k1F%s-WurWciEb8|xJ0bITzU7PX#Sp6oun<|pee-VA
zJ>u7*yj<Rv9Qv&o8N>HE-)G~kC^Y3!b34kW;f<y{BEVZX^MSBeI#DmvBbmG-a#bmk
zmb*j8N00EZlcx5OVdORp?;=L@Y>X@{3c|}m9(2SiX+azjN0{ErQ$@ND1js0NCzO`d
zTXyXDHvc(K`pS@a$p|F(g>Axc)p{REy;WbA9Z6h<zA-`#raL1=l-LV2gtlqninDLr
znpJ6{MM%&YCgKoK!lnrHIJ@n~=x@XksLI|Fgh&SSArm2bN&v5bK>}H7)plOv=>h;w
zpUvkYy~U##s`0KSL>3@-F*dkU=244n5j!@78!;@Z^5_zkGg#`sLJvovi(rbs!god%
zD7RK>j<D%fb*y4<3%Sy-&?nI)cF%y@0ixC#hcZ68t7C2{b5F!0qbU)}i?9Om`{?#!
zMI#h(s%V5lQl)7s(&JX0g}hSO@ztXfS)eSS*p#m^I;+@uDW2qYmJ6iHEoB=o-M}Jt
zU7e;}!S_Sa4J>>_A14=W6B@P)`zCH?=Hlk$W`1SO+>GW&ApK3q!9atj5CDhV=w%8G
z|LJMVi1IZk!)wUhwJ-796p7=|Z1pyW0fj&^Nn!YZUqOkm|G}>xYMCXbX7Hn>pTG+G
z3JR$$r$C}Q4he;&u;|L3jD;B;&=`KQq|7S_22@ziMYjf-%8GzE?8W5Qy(15!0cs<U
zpESk$-(6|qEr<yN+68A&hPrqto@dr;p|?pH?n|3IIMO~aOO=Qk9<01d&&{Ih!IA-Y
ze+(4Pt$nU#rldu}WA*f5&iDcllsBlsYGu|!krPI#HkPWkTL)?dB`dz4MuELMh7Mqr
z(W5(v`i+&^R&fec14m!P+&rZz#sMZ1hD&T+R{YXix0un9nl4e(udTc-5>53F8g0N6
z_eX}O8&#i0^G;ccTvCXC5ar)qc}*DOHm?{hkn$$7`5A4XgYjDBUh&~qhF4fAl3~le
zA%+3W^RrwMX-<;ao&SitLyD6P`&EITl*CMxnY|Q9!}<#W9GpIB?ukb&c(4o=EOLNo
z6m4oDn<t*hELGNMo{MVei-@*RO0lg_gM=c-ubcrD24FBLRW$9xgp;pm+Wu;zWgnH)
zek}z7k-WSbgBA3IAexJ8;qL1OBhF;4p6Fo88^+8nE3KFcr0gro0_s2M3@xnQ_Bkcb
zWO8B<XIxbeR8==;7=`wA&Tlcyoh%uGinDcn=H}_7R!t~Swy(O}@=1Q;3%HVPC7c$6
z$KVo!Y4jK(T-9k-1d(ux3doiZ!AUEiLI4hvNEW1~(U*xqeV`zEd}cM|TtSNsEU;1g
z;b!|^l%c9Pu5^{-exA)<&U}B)?Ep}9P~JBfK<n1z6N_zNvxYG2z?W?YTB2T`#5k4M
z*docFwd^v9bONAXWtz!7BS~7Dp?O&nE5^4f+C`?1HaI>`+2Y~Sx<+e?!D=3K(OZ!#
z)(_S#@<V>&S}<>I*UE~O%EniyXYCG37lG&i7z{+Y)!atJD1@wG`C+WHbcBmU8AigY
z1tM#t5hQ}c8Ny1UsN@XN#s&y1tlh*|E>h;eK(-rHz#N-ZKn8YN8Ton?c429%%B^a)
zl(lo1M-GtbC|bd~*tz`fxC!Cd>%fwcdG*a44$!gRVKHOjPP~-Lta23GVBrXUM0c)=
zD6y|R+tj?5SwFn9vfImLjF;BU&>_>feQjQbBJmeO>4;UZYPcIJlPA@hMPWFAW-Ok%
zOCXbd>)!9G8S6`Bhy?i2_YcFk()ORp!#Gn+(VT*cFtAd2-rwdi&S{x_$8~3P=}5%B
zj6!+Hg8jTqv34`7l-SmVmyrn!&M2QnsX(|&WFtmexDj3pB|}rikeVxLT(ht@Y25I`
z7P5ZI475f9Yt-J;%>^Oot`PIBWZX0SSVb~Z=2fF=%A>{S90g7k$F*qq!PH6AoE2sq
z6z@MqfAi?%!)-=irYwi-YR#V6)@#@wNKj7SSdji%V^-#o*@uY^Q)=jPfvQAf<S~=?
z1J58IvS&$Cv~bKd8G1&cW_A0LT;K~c+W2Sn;m-v|zq}d(xEeLG#qhwE0%nnDD4Eq`
z2A3~Q?@DRENY+=nuqTs&{^9JX&;7y*vbTgn_~e$LpASU7)Z_(oWel4Ex*v}Ph0@{A
zEhyVFF0-Th+#eUR9gKjp?O;R(+73p5+2SE5W)z2MDw6aL67tTU0`T`!EnO69ZZ&FU
zKjyIb6t`e_=t0MZrAJRb3#DIFf@yZ<3c`5U-)2S8P|H#40lMhK_6m%lrrRE;wFnb3
zKKUMVj}bY-=3CWKR_ZA~z${QOot34$E6ko(GD?1{EWWLy<VWI`5X~l-A!TiCONpPk
z^c)_s)<xGsmAkpPc@PPe?0!X>5@@rUqRN^95E67;N5h(UCVb29F71WIpQ#0T3ub6x
z<jP2Mbpny&Dr`EdM{9H6yh2Oy&JCSg*CT6A4N;w4RkdgV>9+M9#6M5AWmAp=aprac
zU_ahm8YLGmsXH_D$W(8I7-fp>il#{vA)}0jK0#2)FD<2k=m~^C>S>ttWsK}im#HWn
z5E(@(g%Is@RjpGLu%zSBMk5!l8w8ih6)A8C-~f~Dlx9m@4Z&zHD2IS(r4j=19#GU=
zP3YRJazMjKpnG?$MG;O#*n7BnI#^oLu&AP0WWuP?aUoVC3HT`dh0?X`%jqj2zQ_!n
zp(RxK7|0~{d#IbX7$Xb~biABnVkNI;?4UnigfYv$+)Y-qQqoAl-R5o)-JrHmc{-4H
zt1$5Lu4Lz-Wj5JWs81CpEEMdY4?ME)8EFZ(tZB*xC^cJ7`J_){m*Nvg_7{(eNq~w4
zD5u?dQS&P34^0V<>W?C=oe<3HEeO6v0=4kgn$aSH-0m-=A;reH7u^;AK6Is3)|j&c
z0xEzr+H>CbRiLCBNZuyl(r!lDFzhiAQ__|!V|XKJNRiRtX&)TrIi@#U=iY&a#feR}
z*jX8cidaUJ-YF^Y^m?iU#2GCkN4E5GWu#@Q=9PpMKE_mIFT^d)RNsdt>1qZ@?$XT;
zsw#hCWaUaktc*B8@L60dp&QzjZ88K1*xms#si%WZFg2GtV@rw#XcoyMtTZxbz1K61
z)hS46xD*Adav0x$j#f<NwC9?a6%IS}U0*e+w95~39HvU7V#LL4A(<`7bVV0rIsOzo
zBb4=0&1=A+i#7B<DEd+qVH-|v2rb>7k!0x^Z4?Wk@!J-rE$s24F6F9<Z6#2Dz?B5I
z1tzS>I%Y87?d!<7uIgx5Cx+^;2nh-AKRq)3tca*+on~$9EM_cW7FVDsz-}1O6LpjV
zyEJZy+sd8{g^VxdbyB+ujM~11AJh8|FS@WbK05BUJI5q?DGKuwR|*p&R;p5|g>mn=
zIVNz;Vn!G&lck#R>I>S1i?6;oLQ@kJrLyws3t-vF_36rXnN^9u`hrCq6udw(smfSW
z(jQ?!%6)Cl=`Bg=ar_|ABIfRY<51?th&fCc9ON~^FHe4#ZY7nIhP>4LA_knH$t}Kg
zTbLb)D<37B7oqo*b_>x3c2!K(konXPqVXv*(W75KyscO<Y+V)QcN?(Z5qRWxtA$uf
zDKCwbVG9?eG)J(d_+ad)fsYmYa^@_^$dnYObZZ;=6DkoJc^U2)Dw48#IR=RF!`W!B
z-_cFGH25A}z!H_?I||crhDRUAGbXyWD$UpiTD|aQ*lu1A0tN50B-j@U;pXHMx*pAI
zjEnl*S&ZS(C@?;fqj0J@uX93@Jf~EVQ$&~&K%gT>p`)KTQ|qa9ljT%%Hb&1MPM}N6
z*&Na(KaIsPpdUkIh`o}9A4&fGl8q6P5Y^v;9&}?<7&$l1hZ7B`bY@*dMW<(Jtag=P
zMiaqi*p*G(K0>q<+ZPcW_ihmdnk|UyFH)QV!~{k#Mel4OVsD7_KwdnS=d^UE6drCk
z)l^Wl9frxHLc#MsE{;?=h=!o_SZT8>e2@nS+sf1#ldYcyOEVr8$)Rf$`g2kRRr;im
z@SK4miFsA)E#>xC)w-=GbrN|x$W@(uu1j*8N3LPNO8e@StfB&dRuI-)EBAwDM@woy
zMH9@=@tQ=H+|k0o*xL1pTd2cdfo8|(i^bla?l!G>;Rxy*OqQgnmI6g6=0Y}(0rVYZ
zFc7pj+>Qq4P=l`u-)&DBKusGer@Z>95i(${qE-BiUz?luAMyGgU$21X9AC4k0n~SN
zj|@H#e(3M#By>)oQD|#?oj~gg_|;flBFx-4=f^p_jC$=s0HY8pQ1)*JI}?_tzZTVw
zRkVT(-6L$*eM=f;a!j`rsw*B#=iyVW<ku<=zHi<AZh=)cRxUh5XG@=2DjO^B%If*s
zv@Tap**j<my<O|Z^}2CWG9cetuuee)0Xrwc5YLR^^Sns)*_|n4m`FjAG9zxli!R-S
z!QtwYhKN@$jXBsC!0-u0er}Q<+P3a7)>hz(xFnH08APWf@OmnEQ{s|;lUKsGsvK_m
z@OhHkGJKx%bTD}=NSCav-y)IVcMqS#8RiBB2Pl2_2d=!@xU^sM#`W;|#tn2CRQ%Zs
zILsKFoQOb&xqvTH+HXZl%{dfj1@G~2{d+{yuDU+782<8%_PHDh2nP+x?Pn+mw!NF=
zEAdcW&O``J7H9AcSbjHbMGnl)Ee?Ksq_VYrVT7yO7mr})`Ki2=!7v+^#dxz)oFZM^
ziJj4&CG!bncF_DcBhC*}z-Z4egy!DobMnG*M);ZRillY}Q;nufj@d76@AWp{UPg|0
z%X8?)-UYH<_X9FGqE%=|YvQGXK7-_MRwBqEH!xW6d+0vpOwE~s^L&Acvl`>6GBsaX
z!9CDTA&egPg=s7{o|Ox}EcXgsuo=xKEg2XTlfEf<)gV+!$PUz&``pG$>d+4h(wb_@
zcjm`n&pRBat*N3jz@Bvk6EF?*y5~&k(ceo-D<+L!(?mw1?;E$;J61HWUuhkgmljQI
zM^j!kleyaja~1!dal6CNJ7nOYd+CTi@oim-iewT-A#dJ7A%!ed>Mz2kEi-BCA}me<
zB%;WA8=8-VXoPK)D=&!^?U9#%i;~~=2|AszU%}IQ^y?Y5uHxSlJ;2dmpjyp3<4qnv
z)*jSczc4rF0B==8KNyM``N|r$kAqePzZtM|Q)XFkRDbmN@!?mM-ji18(qDq?;IS0$
zHrf?l_px@iYVaN2Wi3CtvkiBZEc@f8rt6)Rt>R}<q9haV-C0=2{1uD`Wf7n!pkt%}
zt7=5}z?FrO8QC0)p!Q<$PoFf!jH<A~m2QmZ#^`3^9Q~DN#V+1wLTA&^ysS@v?2+<H
z|IS8YL*8AvB>ph^lK8ZLH%&+-dbIRBU^Q64!-*IidLK2mqVPV8gud91f(jkG$rd}B
zSKVF|Hl5)S_YEm&>aB)T5jHfc(8}H;%Amnl&bZVd=;SxD#uy<stHZOzcXch2OtFi|
zF<xv-=_1DensYE>B5(>mfT*0if>hyY>|4jVs+~h?fx*9Fi?3+6mntDP2OKqhtg13#
z)__shirp1=I%x<}qGHf1uSgFfaB|W%SQx{I6c2D-mSnT8UFYS{VV+eH1AM)N@j76D
zGZvR{$fSrD%H|_g>58cbv3gr?1uD0Mr!Txg=pEk)v@8-OjZS#n;PUF1X7yL(0<~3G
zRPsds*j(USGA7**&fi5J+j6BuJtyU39O+mPDjYLa6P<AfO8~z(r{Yjy&lC)0Aw%hW
zFo~8a%>X1u9hwhzbC#RRi6V0&T4SXl3c*WS`$Shjjbj-kQ7Ywto0bZ?ZRqNT2xbGA
zAzO)voH$#t3p14(+9AM3>u#d{oOIA(Qui@!fgw*pVpBi-;o-0ou><D#b{A>p<3*H*
zZTBovwOa05Q`~vSzR>dFT@6@8kF!Q6O@B{ewOjWvNHp;xOaZiJGM3=P!Vrm<)@S_l
zLMlRVKjE7>Y*+LlO50E-ImW;XWVXlfUF^8lbZU)lG}v7@bCUz)7cfIh|KQGktal{0
zEtwYSBI%8$dypM1L;wC)RQk0=``W1%QDc@gXu?aHBa<lN_&(9nvrF+RWq-{<w1m@y
z)I(@m2{e1-Dak^5RL_z92OG!==jDQ7pIhdXCEu_r@a7<;q$Xw{qrD-kzaST=KPduP
zqIMSVk?C7#`;idVWf|9xnpP6AWBm{TMUo|I+VMQfn*8LJZ$YJbMeY00kdWWK?`LV%
zh;rK@22cu)7_14dbC<e^Aa4Zh3GgdwwDWYAQ-W;Gow*1aq2b+^#e^9Ld>0unP-aDD
zo-W-hQQ$3Ejc@u9sIcIlCp3lL6k4ORAXv(F@4*HpZ@d(7Q#Ix6$TzOa%lq&+`KGWx
zxus}TSemf>N&t6!lal~^TSegrG_54)_Msz7JXnEnctu`T!bGffq$cc}ILCaE8>%cU
zjS1c(`addu*gjcfL`D$1hXD_72|JdjJT(LFx`$QHp*hC|;4lD{meL6*5pCJm#K;cI
z8M?T9$B34f=NGiZWT6b2vI`sX9eh@pt(mkvMPZoMe!kkX)oJ=(|7?ox%k4*e#b+DC
z^rqz{wGF2v;C^e;V@J|;Ic}J|%2g`4@ME@wuVv76zbbV3sA=J-k#HFAYD)b;Muw?v
z@@|aKQfs2{Q`A^!VtY^NGT4FySeV*)YyltPt9KN7rLhWwp$O=1<kdJO0r!n#sx@DA
zql#}wmrkj6MI0R3=R{1NEz$CzW+Mqefb{0o=v;?Ctr%`}w!ZYMj<_gE*JEgy2}9gB
zMednH2lDRzkcgg5N}tFK&vsG+=MAxXL{JPrXKSD-xKt$({IK@c$RZgb9!K#B`FKiE
zGlL~Z<!9V)t*ZZ2Z9n=N;}=~rP4X(Hz3EYis||-QPK>)2nn!O1!w!lzB?QtAG&71L
zD%YeE^=oRWR`D~&)xx@9`P`Oap%i*N#1LCANvditZZ;928kLiWX0?5Du&s`!di<JW
z7g>ZHUOZ$HAyLv3;+h-ZpERRo7Q={@x{{))y6>LA5d})5KVnx?mc?ZVBIz_zTZs<9
z8|9#6a9O5(Z0<0HU#?4O<kwX)uHYAqvHdF8H~`4G4zFvdRH-IZ?_X05yMmr3NjT{Y
z>9I+A!>llgBe+O#PLUI+x8z(6z!-5fEbPr<^cPzTuM@33s7DKCRcn6pYxLCZrAvl8
zzqIs@%MwJq{T}*%-y)ZZaIOmXTIhJlp`irYK#<8}8B?leAEd}A0;MO)W+I27xWA^7
zIDm?7=V9xGueqh&RWj*J#^exOt!owwGWYK8i7HXmMD<^@ny3;fprJjYXD}2xi6-Ol
z05dI%b^<j4ON#`+`7T~GbeHy$j3E+;fiZOnn7}81pdI5-KSHYNrksYap5Io$fPukX
zvcp@QD(^C_UGdx|QizrJ@F*p1D8|zw{ZM{U*rqE$R$f_#iJa6MQtG}nqmVwTLSpoV
z@2HT24Fhj03d&D4u&Pmg3P=XH5=#0iak5n9g;Y8)fQ^*n3bqa`$YzOe2*e!M1KQr#
zGa8{w4Ik*4fotUPn#4D6%_VipU6NJp+)NwGh0P~$PEakJN|O;b2Q>pGKftJEUfYw&
z5T-JQ5m9I*-@yJQ&!cZznhmUcV_1=c0!LKRktE;>jT=REWUW`9*rS(%=#L5oCO^sF
zynP+5(hv(XSTQK|7kzPEUzEG&S4qZq26Jm<WB3qZ=Oy3~q=qKRjx6$)jQn*=WUrk;
z!2as4l^mu>R|`F;MVNi5+{3SXuB;a2fF`WM+aXM4P4_ihd`qDOSzfgoaipMIjTrrX
zpd(AOykF%rZY!GOxGVykGUSa459$$?abNR=cNQ)B5!hHC`<4_>kSOp+hvEEPbwdYm
z-kyUE^yLoq=&UGHO0{If>ng^oo2Reo=bPtMvTXs`X9Yc=GsdNg+9!j-$=KyPe&w%3
z`~wmIR-{%$gYAX_49{F|u|zS{c61$k_H5LO&KX;`<dj!my9L!eS%pFstI#qlIrJ!;
z`Q;47{nC+Wd%i#+tMbZ%FF{GZ7Rce~rq$T?lkU-tGB@1{fR)uLvD7T<khvJvb}a3P
z)M~%4L&L5wte0}7_GyoGrM;Qvy1+SwY48GuiU>R0(XQo4`$L`!gl*gx$Wlo`#2WU1
zHBPBnRMJ8tipecag0z!?x}_TM#FNuAILWHMWVSXDM&#~Yo+mOEh*TRBBgIBwC$@hN
z+Bj?j@uvEME{dat1BvSX5?LN`)m+=%r?6tiD(dLu!q^k{BVcrppjB7i7B*|##=A~N
zp9zaH#g|wVLPg-+dCr>WlJ*RpUZgxv;N*uMOpYBk4#;VH1MK0nts-HI>W2}DKAXPY
zpe$pk`Nj-sB9p1^vgX#`q$?=KXwTY}@1_WbB!AnHE>xIm&D8kB&w)m>776zFJ;@k&
zLkBtYxFz4sUV1XvF6Q7OfY!s?%EsJu-PcfsI>?iznB{x;Zk7>0W9Kd9c;ef!vOWU+
z#u$d5AlmY*Fvn{oI;xVqG%se6&9)~tYlHKZudP}cyHPDbc{Sc@L8~LYymCNl+O>&o
zQY??W5lEI)v*qo;S$!ZAFc9vr-Z@b1x(Hm-Hj}E$O&oA_aUB~X0+lNon#A6G4ntEG
zHhc7@-UW7Wj<2B=m=$yK+PrZGSB~#4Q8glfDZIRE4(ynl5n?S2oRdQRADeebCk9=L
zyNCXanwy0-RHO``X`_dQs7>ZqW`?Je{#<t^&LRg>X$)M8MK=PGAeI%`S_Onyg<kC2
zd{LRYO*-M6e}NmzmT~1x>6YFnTF0lR7;Y9ntF*FKQpWiu86JLE8nf=O=AMcvEAQn+
z?3|nt8lA1Ls-#?=DQ|Lt+uw3t9hoyY5l}hlEF|HO(WYGHa$%2;ZKA8*z7#g8x-BxA
z`0#Q>$(hy@rIl3$+d#PaSwrjVl<FA?rru1-<)5)#l0PFx9%%|+-<FvR=WSrh;uG@t
zO8c`!#;cdA`^tEUaqwk;Dt01~?@oDeyuZYWChbp!N1&Jr;>u>NU$za^pZbuNv~DC*
z({XwP1cbP!+kI^Vkp*P8zfEQh?E}-Q@Cjb9p}ww+K}FcTRc>rP>NCDN2DUkM?Q_~t
zGb_Ig+zTmhloHIXZMjJ~(bE1G$)TXnmWDaJpx6kx%C0M@ds7>-n-HZa%89>bvby)x
z{h$Ics4}eR8wWbk+UQ7%t6dTxTSn9>%hG-;dSgc$0ePVSZk_K$?{2g^i2Y6M+iFM4
ziT1GBcN$h&pHIX+O}82Rgp?sqkrXo^1Iycom3D?(EFSvAkJo16p0%=mKNveLre^*b
zD0kF~7&X0Pc0${n+}eqUCr(>7UtIBL_y<)rYEc)lgU+36^5Q{XfounjcI_$2FH#-n
zm5m(y{6QG+P{+&a<}$Gh{Ep;Q@SB_1^I3Op&t%Nx991GydCMJP&={FXw`R%|-jp}c
ziWccEKCLua0|hETlxCogm)6bLd98vH@#|$Oet|01$5~5@l2;KMvmQB5+5sSl$Fm|Y
znZ$(jmSdQ>=n;cGOM@ZKP%(IAtpaSTFt$~Oh*-!1_<(`o^FNpyCUs@Fk*@VR6j`~1
zE{lN(#|41sfs?l&jja!2RlBH2@_GwBiuIN#8ie92g7K;k6r{Hhk${6m_E!;P){d5?
z7pVX|>~)N|QK5-}%M*Q1R=@YKXsACWD&~cIQ|6_*J)_;~w1$J^%%K;!nRf4av(M1<
zL`B=qoSmL3@KOccPS@IPQG=Xkb-Eo?TzxEHF7QDN$<uwCDp|7FEW8Da!m}=&#Z5)K
ze6uw>wkICXHwo)Ho&=MG&y@F@wjF0)m@OxKnI|*J8SQq@lIL)*w=Tqh6z57hA%dp!
zvf#3GGDw7Ez1MEnP6y58NL;3vJnc6J&Hl4yQkoZU411>=FnIB!-f-CK#5=7<quq>8
z=~C>(kIx3f*71u3d&1l#8qMR{S$mieJ+wpJUat+B#;|7$I@qsucwv=>V1&YHX8^q3
zqz*4nDdd#OE+clZYyox>S1(3mNX2Lbu~@v-9kd$FI6I{!dS^pSCSVp}I^C=dhDL4B
zs&!KqY&133HfOQHX|3Ljk#A6Da0XQl>iyQ~Fyk(vQZ|@R4bF}jnsS%t4BM=o4SSn-
zxWsFNdb2ysv|HV#anfu(IT>!Why9I-x7g?p+ZzjSk{R}EU3gI+@ihD66o6_^`nA)O
zlsa`%^<H;agSz@DMO>unCxBQVB1{r;o9)(MxQS~aF{~X8V7L-uy~PH@7wu+@CQ7p3
z>(si&*=b^dzA|U?GIU6fUfHTc2cJS#5&A}2I1Zip*?ddK!Eb}La&}tL(CTCYb2hJr
zYisnLcgw;0(4BcFqDDmBTB#GUOWdPIqshN#rv>&)6Zg=a&9`f(r~Te%txjzSQ>^*f
z&^T^2+YNNTT{zeFR8p0A+-)57KHGrvG2MU;>$i^1hRrn4z%n3hiyHI1*Kedq5{9aV
zM5}w!?6-yqn@@|)Zm-+ioH=mpo^>0|J`Od8_~tMUVmGO^Pfu#Rn=seHdk=$YW;2+v
zX<QhayqE+wg9)3!o6zX`CNy^xuebVjSb-yZF`8KM!Ec|zbc(yMB`mC1{iIoc8Y2Vo
zM59&f^tz42*fys?_r*_MoSrnh@hkG?$-+E3f-z`y8?AZ<rqa1RqH7!yN6qe&TDz4v
z2kHb!5m?f7=-zfh++|V~X`|h&HCo*##_u%yy|Ty@T9@Ck7EZd+d{*n$p49rS^w@fZ
z>^_jS$tPz&hBpse$;;&zXeEh|e&_7z2|^ar<;yEO@wC?M)*7|MOLI0e$7TZ8BCOQ}
zu0vR<o5Pb@Yty?j?ai}(<7{)e7%$89A3rskwf^v={lYkcMOHs4j=p%=G#B30<mPCB
zF%3$HbJDCmYjy!?Fl=@TfO2A)KqyXb2A(yIpVYcf&f0O5zAYyOP8qNc2g6!-m}fAF
zOo5G0p0r@i!Y3xLY*@1Jfq4lrTK(QhEhpivg>z*lpVo%8r-=U2^vsutE+GP4!U<hW
zgD3rF^C?e*CkxAZDbF$JK`}ep(1$ZIml&Jo5@U<wjj;K6L+m*0r^l^f%yWQeN;W?`
zZMW*JVbT)!k*)XJ>x;?y@MzsT-)uLJhnsj0RjiL28f+=h$uSBuw$bc1Hmuor6HbPc
z&2z`Qit~z&k7xzwn(bx>mu;=lXf~u#JDF`2WLCe~={>8p^CFXif}4|~%<l9WEm+Wv
zg2*SOwQY^}aH+RzFJNOgj(dGr{YD)}tJ%oWCIH)ivp<BFdgQc#ERi+NQdR@%hMWwU
z?UFUqc$@Y~V*okzVXrT%DxX0m2ImP-QQbB!?^wRTAT=oDRTqd>j8#~cZ*v{cjp;c<
zPwg#)kDG({PCCHk$wK?aty$Zc!?wL-U@X8pMl?Jt!RTK0K%C9}NYpeQY@Y4Gj<_w_
zDa^Sg5w{fyg`E<{vDHWjsYmijv)5@3`!AB0mNNyO{boyuT7w3}sXlBYMh{kG5~!4P
zy#-L5OSc6YLU0T2?(Xgc8{C4sJA=D>@WI_JxVsZzf=h6Bg1f`xocsT;?yXm^s_Uz+
zuBn-+-Q8=gy}N6Dtdezd=!d+v9pf1NIVKOGh!CC;Gq7fFbiw?*wqgU=rQ;krI^@o&
zFO{=Yn%iD{q~!trTsR)0X=$98ik{jK@#P~kR`?2fj%i=jjhMP9pq!;W1CKOr#9V$7
z&n!T^EhVqpinK<=j>ZE;zRXC#RYjx5k&cGY8_5Vp#RJ(2Me=_yqQ(q{dAUhGPW*W|
z`z0c6ZlQcVgCi8P(qQCK$T$!x2xJ(MD37PX!xk0!u3rZ^D-M8Uqp0y63|yWnBGHr$
zJy8p;MLWS2g~dDjVLzQLgb||SL8JOb5j9eGWC%`8#SI5|H#W7<EjA|{Z+N?oYfCCV
zq@m#TI)6?g_=hXw)a}@13eVO(<CR)G)y<K|TW<$rq~Ba?)g=z?d_5XRYrHn7l9D(c
zDJ<R~FPZzIu7O+@_RdYiNn&V%@nWW5TV;yk2W&(=ZFIQQwt&TSxIp`byrP57Y@7Qm
z3iiq&A+ZAwHuiDXSv$M8>T0swJwSH8Ebs(V3Niq_x6IXG_c9fZfy5HJ4M9gqLu9TM
zK;r&UmY%nQct=DOkXO*j<y<LOIAw>#deLJ46ZlI^@i-@u#As(~sq+(^v$N?Ey330r
z7Hd%HtFp8~`9(e0qV{{s-zGPebt2u`HT35z>)J1pZ)mTiwuZs_6{eR>?T|U1cw1N(
z0$(PUnF4vJx&yZ$fwN|#dTxI#(N8{3H>N?Ye;)v|$#njtAssk)0mRqXDctSWqwTX*
z$a0--NU^a=f=xVEJP=!(1UX1wNAz{H)<-jt3Jtt-977Rn9J-k*5J?1brdicNOWQfD
zHo7NwVPX2;{PsN{dqAfm-9O8I8kM&P6a-h@T3tgCWR}(z8p&q%?quNPl!d;@Q1mMh
z-2c7MLdx^`rCR?7O1}tdte|s-zn0z2`nA-e6!$1AAl0kZn~t#{x}r~l!ZYMx_ZB9J
zZ&S^oo=g)J*32_*Pz*q*+$lNpjjf@u%XO#@R#qi2GI{zgL3G94(b3nldWn{m+~AKW
zo0^0l)mREnDNQ1q0VY~qA*{3}-=;jHkLz&(=W*1mA|Aan7d(mvyR318Ka#;{49zGo
zPlzVmK~2}#iU>J7DT(p--_vA$ciV0NPiqei0sJR!@{Sr=;vbP1f7_U8%DyCozhseH
z4&X8ZU>KZC+i7Ng9F3#5%bb<15kmgBr2S!#MkGIW<P&jY!x<ga6;FvQog=!+f|{QC
z9fNiS^RQO7Rt>jBWwW?Lky}{_pZ};26sc$QQpz)V#WQ(%^Qr8wpL2k0pI$-QVAD|D
zjyiE0kVlj&Ar0K@U0b4HqzLtwBDg@qan$rP`==BU96h1Ar|c3j7o$?t2v!OY{lWOT
zwn)zBSAF3DCI}7(`sD_v#gekrUi4O+eUQ(?;zvIHwBN6_|LlYPLZi_LLbJT&uk4ZD
zX2y#s4w1=w6AMB5W|$zG|LHub@{9&V*M4rv_0%CP-v3FKA6~N}`bC7~dQaGBC31Tt
zi?xnvs=-CLR63~$DKCR?r5_6y<=g8%MW+^RfTn0fJ9nB9Zx|SJ&qR9GZlg}z4JfG(
z@wp*;z-_DfTXb)8k}j8~A8i>uD!v>Ouc%Oa3ijvkf0{<|oRzV1-0>_kBhYV=XvPMp
zdH@h6KIa$=0YAAa@s>VosG3_gorY#<zhp7~WYI<Gk%TMkU-Iq~vD9|uug1F84lYgj
zVF<uQ#hBEI*#dwKwc7lpyke7C$wGhPQlL<k)ni`<A6xihl;ch+sZ1T457u1fUrGxK
zBMS&m5M?(7;2!3<#%8>pgcJLET%4iwycbIKycOPWGYBs}Tx=DZo>oHaDpx2!wQ{*l
zRLvjtkw4rY_gn@mPQ88C-6yx@<rn0^0AwU*{Px%eK<8vrl@Q458bU0rm@?eNN#A;(
zHV5J>pt+N+rh^dq@Tp+yZ;V|xXL5%m%S3*l{7oaYfUg0%EsI=gbS>~otT+Ea=@PYx
zFrW*>Jbgkdhx$p>;yoEd^wpKKU(i~}%5}6tyVVI6g{#7N5zUA?gnXj|QzXfOiOotZ
zVo>WjaKyuW)xk9~EVV$aB<IVOes5wJn3f64VUDkfdK^B1WoQ!$-ZPrX$?~-76C$_9
zYH16k(x#D4@Vs(I8`4@uUc}5#ax>MrKG;Pop#iG}{wG$SnCU9ljMe_NPg!Lq69GG}
z+cdtT3L|QwM{*a};;ov+RibBsU&2v~AuqN=BTx(Ggb(`XJ%MHhG>ibu?-<My(XOF%
zff%K7Vx#DodKy7)lhY~X+)~>%aBB72EHWm~Gj}XuQFQWORkSK*cH%LcRh+s)vei{B
z?E2`qlkp2f&dTXi2KKJy_9~dJd~#n!5^JMkKRgMPPuI-@r$)BY@p^rT9&XTXnL{%Z
ztyy!)%Mm1gJOw~Gs`QtM{NZbF6~X5@l|7PR*t?X11*;iJR$XWoan7qb+`qQUUF8S}
zI~$n&obpE9dpWd}>BAbM@DG^M4Pm`FhzTLdF5YJqTe8-_y<W#Q!uS3&!>oRC+ytNu
zg8lhZ8H(8@!g|}ARM5n=z!RdZ{Xsj0y5#S{@6{e#5!Y+oHTpd3Oq+X@GL+ooRHQPz
zM?%waydbFgK0&t5#Kg35T(xl!A+pQOndhM--mMnK86I|Vvzxf4cv3+5n*m%(85Y8R
zo@h9%$~O0ETvpBczKo6bAC{tw4%0T=xgixvdGU>Tb~l!tFK{QxpQpXnqTOWYn?>2;
zSu|QP;l|n6Y~;|JSHxefWR^wSukf@a{i4K_WdY6$>2PZ(8K{Pjc8ozecd<o`V~AHX
zW!Z_}9mBIo=y6-4+zIpb+*?yx3g|WPR_rKi3HS!MU_PCvUE4W0kqVr%Dh5T7<*6Y&
zEO1%#-A`@G!so0mZ_n^HTY9_RL-Gc<3AQI_J<_AoJnS99FMb&nqaM57Gb2n%iZ{Sy
zrk-fyy)<iwN}-<VEMCkbOUaXy9j1U9afaB%hDqEr%NRJ{-03!ydR<K5Y`g8jMwC}V
z50qsg+dx`xlUf_sccS^q^W9N8m>Uc8<LZi%N_bR=z}IEQ+rRnOGgt0ptmvNSs1$E>
zhdJg_a0r4xUQ@v0<YT-qp*PmZGMi807h>(0&+4YS<n;pB(<&OGl!P(lAEyRO={sZ0
zA+dQsxM!Y+@DG1Cr=3CtP}rmL@(<AfaT`AgcSF5xRflxse{L~b)!r`rIYz>#E^^7|
zjc#|r1ham%z0GJ;IX&+#%T}~o@ci?NbUg=(^2A12^$*LXCStG9D)ud_TE)mK3;cWG
z%B8Ru|HWSsNQtB18p}={mXRBjCE97zgn4g@;MJO&@9cky`*Bah^z#Ga3A$Px)$sme
zJHF08Y71gv_0Nb5)spy8B6J;SG3m6zeXrXV8l~`KVP>wXa{-S$V#^im?)pr(Fl8=e
z9ztcXFS4%{JTo=yBOW4TKD<j9`3RAMBz$z?%7U245u^jfbf4<C2qXp*soZI0j5-2T
z(l+Koj*yt#Q?I99S>+X7)~P=3R86!E*8QY*p<6@^#)w7I!eUhwI&L)kG~Vg&&eUwN
z(sRweX<D#0f}jO%6C@8V*F&{cv4dix7^``_PYfYbfjfs^FI>Mny>{s1d7uj^;8|2#
z{29$-uk1nbxpn(x?#2629UB{2lPBJC-P~1L%Tg47LJdvkO6|heIw@*Y{qPPY>}>SB
zR6=y2{`cwgxJU{bG(8?~JYx$s05z73Zk2FN<<C4X>S8`0e4$cyqeMvj6_W#QeKc#j
zzNNB2OJQ)NJ)CTPFYj&v3|+C+ku9$6N~DS^wx9~EHky*Q)EC-#*0#8W{L`H4yVp)t
z;WR=sJ9cfHPE5K!Y@%ci(=fFV2I-!L9T9z28cOJ*@Hu<0N~Ju@3WT}9y&uOfXKO03
z?xCRQQX1nxt(_|A6Yk_mo2aqhJ{jVxSJ;Rp3UqA*w7+x)uq8{mJhTG_6PdKQ5EZnC
z2Rd_0Y_TL0HX&y*Nne%bzkV9UA$x1IYr_FbC{f^W%l`b?PT$ug+W;JMLA{%o>Z*~5
z(uZ@=fcv%9{|m`Cq&m1nFfjpCm#b`Eo+2dWYL-GEAGBzn1?s{bmSSR{vJ=dvCatl?
zY&Uo=cT00_BObAbBA+_{!uGl{vH{=w=do~PpkVaP?1vtce%L3Pi5r`X*Zm-eo2~CI
zO|aprOq;tQry{oV)i*~s%nMD!S8YWEW|XF*I1;Ou-f?n=kR1hMPEoto)pmH8pF`-=
z9)x!D;bjQYv?}s#7ZXQG=7oX^Mxz?8Zvd(UX}8!{y&;LBf=3KRD1RP@e+F5P?WFKI
z-V(+;h}~yj|4u^w(nS;Hx6n=R+a17|7!gB;du{3Yz4<Kga_-)s8<9tMvKtyXx%FUp
zMxR!_Sd>RgGmtSSfFM;2(%~|%vN7B~t~wuC5%Qqy^sNYFKt_sL)rHoK{saxTf#e@x
zP-WX?P_^L#w=(1zbPI)`(HQpZ7$<LcAxpLg<Ghaf^)$zIqAVUJu`&#|u#zl<Bq6Dx
zP#Q&h&NL?tM=RYviUNiBN_9{~QU_#MYWWMKCR<+n8!9);G>%ny$#e{Ru0>$6M9K_x
zRJQ|{L6O9jei4O+)`S`r=TOs^GVje|uVLfuxA8gbFzFiMpJb+QMZ?bElpnMqMHc!q
z-{8wEgt|wWr^C_Iugc*y5J|kTzI->36h~*mBfaWmp!L*r`rH_U@k5eLdTdn0lEF!U
zoYSUa1+Uq9z??i><~x-XYk=)};}Yl7xL3n%<<iLKqY$ZNs5O=eW#00_5w5L8I~-UW
zF1Fq3-`#VMk~YBQ>aMRrFIg99==+pw4Q@JgG;Edy%x+0(r*31@XWvCEPw>}II_D_^
zgnax_K{wVC(nR&}8=>9$OuEq_9!)n&8x$Gw^+ngST)F5XSYIe0?;!&%DalDAg1y~$
zPrry|JZ=5GzhQ$UETt$C{0%qZn<v4l_gc1^=RRLk*oUZnhba!<#8_rbSL;+^MX)fX
zel4L~^2?#eMdg@ldHk*S@Gi{MGh>!ytt8jroExC=UFqxmwT4=Ti|eFf#`s+<1Os;Z
z_!q{7m*@NolOMmEv|$Sn{4yZfo~>|oNlgulWXPub7}$V<%^ecU-yoD5e<Lr`!$PHU
zgh()A3_Lo!JaF}a8%1HTqqTY=-C*?KNBpQGG>G6<EF>b^%$%q#^TMPu;^Da&x)X!j
zv^P4lcm4fTcAwqOlFq3mrU*y_(EDe<n>bG_YKT`g)k;ZWJW0<f%`mJ=WcPPxt4eH$
z>u~^<ODibwOQZVxIrNG`jM}Fl3(eX+#AjXnIuD#T?`$KnB+Ba1neVedf9Z86nqnRC
z&>5ckq(T>ird4IgY5OJawSy2E-l8p@Q=q^;)Ns3F5se77{)MLc9aek9#E%o!xU;e`
zntH27E+PS5bDUg^@)Ihjw29|WQ7UmHh;Lp$Nk2^=5Tt{jont{yS-01(MX<$|3QUBW
z4;rf8yUZ}VjliqN_@9x5j>v;O&|@I9Fb^*pa=B8ZVvI@I5#^c<%ew})$jr?ySofD4
zLpwIKx_SHIt@v=<I*SO#5>z)+ji#CEGMSwGhVRGj89MCI8VBA82u}dcy<b)h4Cpaf
z7p0b(tRwk8inuLmk{^Gq$9?bzGk7g~{Du-KLQRMJ;R<N-C6HS?bS>_04g#u0O~`i`
zx@`}HyNG_(q#6x<-A-goCBo2Hu_0%k*BwhZj{5rb-TrvdzpB3zSmmj-cR|_$+{0I`
z<nug7kuk@o^plyyeiwm}TvQ(5MVO{ODPo_8!)X*D9)o3c&0V-m6Rtd_l6&n0SbV((
zd}2|l`OYSXI%&|23+)~x>>%u>?Y3u~BWvAEHwDS~ll1O<Vo<%4s%^EMA{77;9N-Dp
zI1k-BKj)?gN;iorzV7u~;5GcQ`Dw8X^2h>s@f`QInRD@Fio%y}c}j{i@36#~M*&3=
z&23YcAc71=I~~&9Q$en;Il8pB?zsqYGm}vn`Z1v#>eYW!G&4w=f9f`SlFtr+xqy{w
z>i=*tLO=|=f#xH8htvG}DP}p}Q7O?6z^OiqqCYPO$|t@_QS%8j@fG<NDluTZ5}qHG
z6SW;h6C-vW*G{K-+BcR@CvT6QMN9Njw-%hh%g@t-yy)<i<!X+~m3o)x^;b(nZ_eK~
z5n6G|MgO^rmh-;?$T6S(p!f)X&lvAmw7Jqj;b5MpBa>x6Rh`u*xoEjSQTPfo5f3TS
zy?O3LN!GclZz#X4M}g9$y(j+n`96Nc(N$Q5n1pnB>gd)gHSGi(JEbGjb;YQKe;Xhb
zqi^@OhSuFGi?#+xN&ND*Bg_-f=h*0}6e3{)5t<*JyKcw2`B4{(lW(jJ47&H2C{Htg
z9!)ReGMf0EX2<@L<&aa(!0AwTV#5=W2a{hOpmsT0I2IA|vqQTt{fqJRi_@JGbXG7T
z$Ylu7bypyw{1kOwM(xF`P{-@!fisH+qmu0V0;5GTr_^g46TWX&PL2-Kt7g0u^c#y*
z$tRi?0w=PC2>e6MXf|PTF|zTzi(I(I6Ukz7w}e|~x<J_eHxbZ$K9CpxI%!ZG2eaq%
zI)Sp4=AesIv5}gxl_#%rswt0IOeoY=_e1enh-Z<JTBC&-7g}1N=*#V-zyIsCux5u`
z1g=4nik@enkqp$=y~8roX+cy7-ufUd@?wW*g?0+L$8QYRaQc6JKXnWyvk%$9h7-Dx
zAvUArM)6~k5Gt9%WyJB|CoBgN_SbiYL*?F(NO(nuEMy+^ZkNU-C;Zu0u31|Y2hT0v
z8#f~EaKY*Aa7D_qMZk{|Gk#chk#f}Lc>LxvX^RYX`fP;J7}-3hl^32oFElN9%<)|H
zRDwX*RHrM)W-2?tw#LJ*Y_+ivTl^WxC6`AimOEoo`__Dw6g`_K^UMBbMA3RN4-w{{
z8b3qwB-lcmfC!WVvCtEQ2Vj$QtZfb}I(T9{_DBydQ+an;W&6@LO*|ZlgDYldV96?L
z_iygyWE2K(>W+-|ef2`1QrdDuB_lJw_&xCoWycZD8W^)sR-db6-_>}RkxH>D^M+S1
zB9tu@2BZ9hG!kQVK%E^YRf&Y`IWxFC0G06}EF4EqAaT0-AeJ~ADO`|5lc&dZuF{pO
z=A^Fa=yO{$oLa#5yu#laN&9xG)if9#vl-ccx-#agv^+U!Y_@J}fyRyPL$m7cQ{G-F
z#rjx32XJ`RYy6E;Gz6y?{Lkrj9^I#YfiazwfeyNhHObz9AND4FR?*ny+a!Cf!9yv}
zXqxv){R~blHIc{{(!4eON^QE|h<4_A;ImvpQ)hg;U0;(5UoXut#2K~#8oP1^aoGiR
z!;C#L*X08%B}o^_nGKGxNqZ^R*h4Tk!9tfb%K?Sd-%x{EX`$i>wqG1BYs}5RI5mBF
zD+5;hI7DEHqI?xD=9RgMjk{NmP)AjdMxMjC7yOhcW_nI};Y8}e@S`c1+W_?4QsMJM
zz1rW9{Ogct5M3XXG+)V&=7%CzGj&CZXTf@Szearh61Eh@mzE3~N;#IM=S-Uoh0HfS
zug0TaDeRSive7k8hf^QB`evG^1N_7d&qi<R7-HO>!l$Q})Y|F%Q`|@4ZD6&aTo&`>
zGz&e_^VtZQLGno`>|JPyW~OCd9bCuuV{AFTSY&YjP+8sdh3=;uCnFxq&?tmlpTRUU
z%_xcJ=D>&NIATGsn<|{wHJ_KQLI=z^vAbUU-eCK=c4ieMD-?q8Nn6+4BEw*dn!hgJ
zaG@;}pSx!DiPJZ<@pm+{nrvP}BA%5#=p2?o4_OvubL`fC=~Xj(<cdz{VRTTLC~(Y1
zvi?#D^L&T3a`er<ik~Cay4QW+)1WniVWP9|n!Y<^^Bcztc5^$_cnpSJ@2qiwz*~&e
z)#U)OkWAz-v0%IVvV&+OY5PMX@1Zm#c}X4@w^Rql6F8sH3&QJ4XM_Ji=*<(+zvZIa
zbdDcJ4#k~=Jve2BLJLwM6#jV<9^&sb(nR_$Z&qenI#DFA%C#|*)6e7g^}eTj<ay*-
z)%FzRDt-1B>69uUS)2o!2x&WzVo+(;=oIbU>%!ibg(okCU=tsCU3k&s{K9a2c@UgC
zC=9zU{+HRFs9=WLhzJDpeMZ2PQeK94in{ox(<%OOTs68_qe3cvTrwut8r^I6@ZSWq
zH3d!}lK@XHPq*e;Rwjp|ksp@8h9qiwc?gT2F26LPJTNhkNt#=GczE2eLC1k=>gTk8
zdrPqflOB!8Z@UjSmgew;O|`_%u#Q`7+F5jUbxcS4dGXm+2a)mnu@!kV)@66#)^wA^
z2r#vMoSGADwYhz`Y}uoZo^1cpb#Ueox;g*$`mvpV{Nh&6)LlbFOktHEylSI%cmd$F
z5VGvVDfnPoKkuO)9BXNsRzkw-9{Q?^o#UozF4<vC2dR25*S>X)0+;D`^|*b#q`1Qr
z$`LSka{Ws&ksNi6UUELW4#D|zW-s|u%j4ri$A;HK!{pj|XO!Z37lPtO@cX&r)hrN?
zs3(26L*=5|mg?e4)zP<EE@MI42^~tgj&_D-qjv$ekig@K;2291nC63W?DwufU<*D7
zKBqfzuwFc~`|bziMw@?}7&z}Nyzswix*Qnye5S|GO={hEz+(o#j5*BBPZsDuyw%Lj
zVN3urYT%TqNP$sguhr5$*w8)>r(H!pabwPA`%m}lTHXiaxsNqr>OS|cibnmN_s?<N
z_YWwR6E6%?^+g^6i)sAVF$O-5_X|S$@0;i(PZLV*QQ>OQrt)=haZjJ9r36#{PzVjd
zq7wUjegW)AY@56wz!I#b1C5FAN%-$BabN9PgdQk((aaVUxbdniGKm-R9soU_1jO@(
zD7Zs0*O9#5xbGgC;q7R|C<-=uy}h}+h+Gw=wSmLJ_O3ZT7vP~hgE-W{uNLlYI9kYi
zLR3vSw3Z*=7*nUsr{r3ZnQzGWLg3(v4_v1Z@60KJMdMt2c|cshb3}M2*m{oJG7KJc
ztXf|chr3uV)a+U~yLCR@|5|1e9Tyr~p_u6_Ftk84JR>|=EIeK|eX3V^FcX>k!jL>c
z_`-3S7@Yg|7QXQuyr@X>IEyqXu%X+EUL&p(NYuz&T!flQJehx7HhVz@m^8^$&>X`T
z(H@enOnLF>%u;X=dI$+Z8wKHjRVa;#bD1}tl~NG$c-XwVv<N`GpBx(b#=lG*y6ih1
z>hN7V+4jd`D-D!j7IyKpOgRjV#ZYX?a-WrBEW5Yk7Zzg|#)t0JHH1{9_6xvYKa7X&
zc+jo~Z?#Txd09x|C_}G3f{F?tjq}I6Sxo9GG*KV<2;;Hx?Gz@%jwDr6Rx9rn3~c8n
z!&u=BP%8#_?oGZuO!;LIAPVo~Vtbmk1Jr5_i$civ)%4J`q1C@SaG272MiaFyx;3$D
z=+pCbtj;3J9S6QeOjCN4JA0m(w|Sk#5g722&Py(TcYiCsP%9`;NW9XL!3-0nu7>{=
zQsIiPt<>6xMSR9%S(n&$K?x1;8M0D_O~1YH-C<W0Pi3?c-B_eAEfa-4G*(wa-NYfS
znMopS2q11tNxg@+p}?e#j!OFOMN_z1G9r(1RLJwF&+qu#4Mca<C5uHKM4_@r2f?C|
z3(8#Eap-(TcW3#jGw!%kn%jMUrs#Kf9h~cT-{tQAmY7TUa>EZ?Bzk$tJh$^he&-T;
ze=#KVd%I0F=zkYp6~Elg=-|@Eukr1Ed+b}DL>Jpl@c6|cX&Vp}Toe@>%JS`tFd&d`
ztx8?`lT2aT*%<mnRter48I8R{EpWToHQ2>kMWN}oVOBl~Xq$7xH$G=|3g^8*b$E2b
zK?}FSQw!HLYpyIWW^|M>ZTx_t=nd&|I!J;|G5<q36Cu$s{^`ZCO{4<zDB%o3mS?*2
zFWa)2;iL0`_NYvQG|}nInL%HPF_{0?*8;t9kcNBP*Pcu>d~B)<?mPspOZ_sW%^-TG
zF-7@yfHOS4`DeoLKp2^?qdX^2z?>BfUXrC#S6Vv!BOnX;`S19<L0ifYyPF(0XE`Mm
z-0)BYSt?oMNG=nHf>^_~c4;}!7*k4zC>!o7Q(1eJ<+{poZe_f#NWEsEI_}Qt@r*Xs
zW&^v$*-;1B<b^TcLz^z2rB8G{e&mljK_PLz4;Rw|Qgy>9#Ipt-`p;l(>(kQ9xGmkl
z*=fD#d7T(VVZZ0sdt$$X+53(6-2-C(x1$b`AfKm+$sQ#C9wheHME7na=QsZN+dD?y
z<1@3J9e3gPPwFEFHAbGD&qt(RF)pN0HXh|E)P)5RlU`qL4^Z+?yg%kT`#vHiv_H3Z
z*1Zk7N7tqNw(w0GX`+ZaQ(D({8zSpY@usPvX?}Tn+3>ZpYu%=%MW?o90XkS-&DcD4
zx$8+)XeqIIDyu~Kb1-&Xo4U1mq<7f8k=LIBq}>^orC$LDk~qA9Y|3yXwyFsgyjT;1
zybwE)841lNBB0CkYW%ccQy5QVp~P=*lfv(3-ZsRQujZAG^GBVU&!(?CDD|Bx+Dz6Q
zpjL_P6uB#Mjw13Nre?<4uKc}vDF9xWc9=rA2E)m593KAN?iJ%Ju)va&b92!Pd)M)E
zD1sO=lY~Ch`yEPw_74hEqNhOOdLglKdTG|++CF{vRgYl;!W-!0xb9@1v9YlhCm((|
z$-Yn9WW=5QtSf(~nWS{|0h-T=zDu8jsf%8R<vBEEWhxp?D=d^&<1ie4vX9E<-mdt5
z`0`$8(b{kYRh?IEEDvg=9`!%>64LS-vikZt(r>aepWj3%9`2Qw-~5r8JWUvOSi+Il
z%?k@W?<D?k2-xi@FVude{iP7&Y}v&Fvk{db?Fv~Yj~rrZq7l(y@z~Aj4nPDZl!6?5
zleTK}hF`Tyaj&ZxEOLqwZdZ##xvR{!q*dXra;A8;J5>rUi$p2WCguFHVyd$wa!yb}
zHy5>&GTERjKPLkx5u{T_rS%)zZ|`uSx&}p<wZ0H$Bhe=C9y>9tsy8HDujS-dSKf3>
zeJh@8OVS2eeghDM>S^*TWc#FLrq?LtK~W1MN`72Z=C1Lv2YZoF+x62zjg4)rJpA&1
zv%v3pn0!NidGGk>%=SPWy#sf!{U3&HCg+88Y-;{2;Mrt1Y1qs*-S7DPg0EC{-XAh*
zVmgUJ#7$3RTp=^k<-_q5Ciml?7z5z+0>9nwMfbcEzP~ZQ9}>Us5x-v=yiNP3vb@#!
zKM=o1y>AIi<Gf!fzAg8>%)b8&z$lCgEJ7Ixs3^)(F)Mo*Ll@Tcj}D5g@}(}Vm3Er-
z_&C(kzO{3F1P=(Euqjn_I_ahFdQDW)nVvHU@ez#Gy>1|W#&2ILaYFZ`k7#sCobKYM
z0~eH4Nl?j?(;vw*MIioQ?3~ymTQ8Nirp)Le5NPxdGio(9jY%u*!I<%Yb&<0Vpvr1?
z9~exqsq)6ITTq=ViC_6V1CkaiWtn3=?K&bRe^iL8Q$SFc3Hm`qROxPmI~wPkQ)tOp
zztBS4Wc)?VoI;N&>B`ic!1}l~6{_Frr;aYDpVTG+E5AKYi8qA3mL&rvps{blW429g
z#eBH7M>dMsuTMmx&!4Tc9@(_@E%-gR>;6;XZrS-;X}fnxv&FsJy^D8;GrK$A5wy<G
z5L-$#;|&psQE(6ni(xHGKS@X}D@kp<T`yO6mh%MfL6-CC=s(Yi_sJIOlasS-ikI%m
z>nGngq6eR2jr@v^ii!@u?`z(_pP0O+%iUug1aDP+3!ih=8%wK|rvN`)8!g5=JPqE5
z4uYAmkW1uqRe$x}WAwNd^95SinCj*jLf=+ed-GpcsXjHt$zUG%Az#>b3D>AJs+^ry
zunD5&$oS@8Lty&KNc80T8a>QSu6zH@zVVJkS^WKOyl+rdYw+ApudP41P%(dAvYy{v
z#Mkg%{Y%O|$M&PD;?Ru^kXIcrn9APmeDu4a#thcIdj=U`l)xk!lyoQkd<<<wUG*2<
zZ6o-wb;CouR<+*}{y6&0eIa`dIt}mZiF=FEF4wgF{Z?pDIuxz8thn*m7spn!gTtKr
z+UG4Se|~;&R2*V^V=;F(;eAx!;~`tou(Zg3{ucBo>$Uoek+$N6X5<YUTc8SP?V0qv
zm2KgF)zHKII@D4AeihSQ_W0}hTmVyGBA4-P*~b6P`mBdWJL4xy$B&DX4q@-Ru6utR
z!0VsvQQrf!TbIOLGor7L<?ks1D1V5%bm(hu9n2E$73dfVd;+UDEAnX5MGkY(#^0z3
zZWJT`;`s=s6|UdP$d_wmXlUy`iCY1zw5+mc+KX>xbD5sIW`t>8cV-lm{hDw70LyM_
zM&DX*<oh@1?QCJ&rJpip-l!ZxA_=Ke?xzNy_&vX6btWjRdr&(>Cbo=$`S%AWc(#;I
zs?j^n2Z{LVsO&4#@olz-wA<>q>?^bJk2i<-+Ul6>D>Lzrw}!mh>V)hobMf&vhoIZ)
zNbPOY@bR~XB-_;3f5pf<o3O8TrrWRcaXU0*wyce>><uB)To>W<m)4eJ+iW?C5O!%=
z^e=t|TY|}$n=@)%s<8RX(Mr1(<wM=O76qB-IS6csVw(_$wZl#92I}s%G>3te&OGy!
zV<lbvbwXR3!s(Fxb)s8~@jzQm9xgHhe9YJw<*Qxb`W$e*A81={jNe~Z6{2Y|P!}cB
zMvIFUi4^rUHg3>d+_-_|dSBdFHn|axRu4V0Dr%5R(l|4zQ4nn<A6ROdyPLL~v<v!S
z5R;@IH)t<u9K#4$i|;(;YBoqH1SNuCK(n58QJ!@bo}LTWSN40q&i0fWyNHi>5*G~E
z#Ml(rl-cC#<?3bXCF`~7*WylZOgdf{^?%*TB0tp)z$-q~sfKtSyev}wa*(!vtmB8z
zlt^d>A%pBe`XC69(exrPw6L&FVtP>}T`Hlzeo<oSo<jaQVIMRPa(k?ch4;oBe8TvO
zoP?Ol5O14!!Vqyv2V32*ETM=oI6)(z@wG!Kk4S}_s|ort9mER?1xbLe@amA@TL58L
zWQ7#76b%&D@FocGCQ%;^Q-^#>9cQH)*s~i^WRfuPolS|Yh=xmTiwlek<^=13ApzIM
zO`xL8q8if((`eHI(^%6$Q!Pi^(0(T{9=LjY(LVHmvW4>ghY89@Gvg}9wNX#3EiTF~
zQXS8;YacmdO4ng;E;F~)8ehE1sKewmp$E|Gy^Gt<qMIG(DowZA*RH<*a+pEd`D-L9
zht0$?N9AazzrVLujxKD!jar<FIsAOh6M<5gQ4eZ8J9>!D`~3i*^yOm7bW%(aL|tIi
znO_*x@b+xkk=ci)(>eadAGVV{P%Mac>9;jQ3dbgyfVv=vlgprm7keBQwSjon^YCCe
zd5Oz6rIqk7Bkki_bV65GU%Jz7xBXAE_-_;5Zs*-@$N!%O>-JmSKQ1@EY&f+GuV;67
zMRKP_MM4s0{Hq2^Y{mP~AO9Ws>z%)~j<@rzUN*X2oYm`i8V)h%Nm=n(^fZDRaY|i{
zC*u!Uc$aT}x`M3L3OKpyI2zat#}3<n-5p)qAKv<B5ERjfXroaWe{3X_e_Z@m#n7OR
zt0?{Tr)T@Gfa7getCxb0yQ5Dgol<FJ#q8i8z3pu4p#_ZLj)mxRI^+p+CJpv(n)s*7
zU$;B5e}_}&nY)w?(u-S;Q`gH4yjuK@x}J*fk5h%p44!KJtaeIeG6lXb-;_U;P;Zat
zSR2bxn_R_Mkd;hns?K7hX;az$C{Ro<VxP|5Rd732bS!Ou{Jvf7STMT^ZQg!7PQu8W
z$f3%;JSv}|RbDhXPDT6V$-b1mBe~xWPCcMqU*QDzgC2MNjRLn3)|k_GP2Cf8)N3^_
zYbfL|Q&U@IX{V&VV?B@RHmtff?(}Hqqix7!T*$a%UUL6-HFU`MW532J-nHAZ@KeOV
zwn1p|fFECN*!{(?dg;*50v%U)y^`#8jau%j{F`Z%j6i~Lulzdq5SD`5#&fBij2AOs
z#J9Dr<>#zEW_N4F9<DQ{mfDaizb2g~#FE||wLt%sija4?4Bzs#7jxlDf!VP}iiS|$
zJgkP~0`Y<>c?v7-^x!jHF5aR+(4i5xmeU|7fwZ@?S~8Id^RQ}@8w+)k)6D7M-V7Hw
zc0b8&kduP#&#85L+AQYuSxF}EP6p9XG~44&H1ENF?t;3>I255$qqd4m5FjI}{Fr-P
zcLt!Su9q0?oNklbx&3!psua&T8G&nQJkz+E)~LOD%XOi4i^KUFExSA|HTM8wVM!Zb
z!^{iR5QW3vdO5d)Or7fXZ+*rlSsxWJP1Cc(va5>H^ySCBp(M(s9X<Etwu7G)yEXaU
z#;%FQXTI)Do_UR~B|KItRw!#tB_A%?=#w0`LC8s~<{6%U#UGzt)W?%ER&BJ4X2Lp(
znh<C1GSx-3Z}M2HR9A>t?1CuXBUtUaGEO_eXGXK@vrue9J2#UV>?Oeq2^h{}7%o>X
z1o{Arnv0U7?ed=8jcEm0kX~2+ig^+~#hU7eW~`;~TyQ~=ksx-`cB@|*=x`uP%lUcM
zeVNIVbS%*}q~HL0F^@gkDW~Uhefo<dM_*bsI|N7VYH%|vS(WvI9Bc7ZYCm~5@ktSz
zrzg>5TtrciYiSxcN#=Mvtxx}_u7yPew(gyMEWk@I8+@k376xSnC75N}jeB;~@8T}`
zWu^TwPI`>ED#b<8D{(bvf`<8zl^ij(f3&Rs`FZr+9L$i%K#;d-9(zhN!EW?*kj01y
zHJ>=O_s8Zuk-MP!ix#_YN#)r@tqM$H|CNcCb!FP3;Pj*LZC6e;|0i5^xhl&5?T63m
zkuCRH`c^Ssmmvd6dAjKFxQn@Gx%p(~PMTKMnXN^0DHao~vFciXs6xGIAp69h=Au1j
zw=sg6bzQ~m+4KV_JH47AHtHi>cfY9!*=#8NpO^^hJb-WD&?07cEYBl1-QsImQ1hV9
z5rcf`ekPEu4m^Fka>#I<Qn4=nhBd7DG!I|BXl`LPg#)!hpqknEecjZdLiMZ)Iit`p
zTxG$-y5MwTS?;e;aW#U<J>M~V`GMsGQu)5XvF%uqzROsNn(<Xo18<^NdcBScI5n&4
zXs#cBf@`v<eazLOqlMhJ-#%v86k}ZlQr^uS)U?=fbaKUJr?wNjZ0TMLwzE*=>e__h
zUq3#gb>3JyDAp;el%yvLe^woyoe|t593w!zH?(Q#s<2*e3-26Q(#xE;-$G?>m58fP
zMLw&`8Y{T8zw&qr;BTjPa$4;lHpg^#PDG#kh0xwk-Bo`<d*0|i#E(y~b)IuS#(N&L
zuyzV|!|s|kufQif$JD!e8C}P8sB{0*v9EV;@4?-5Y9FKRS@*zL6YjmzvGaXy=Fwyx
znAtuLr-NQMq`gpsZREnHY;#pbTU!#w89Gl}uP={ZZARW?S2VYrHXfzJZ1n0i?>!@#
zTmOhuncBEMZ2NYu`P?xtV1giIU)bYd<I}(Yo`0Luv`)O#e_*?H-F%^FJDs~+Alx9q
zyjY;PQh;qY{a!DDWVg%S{NT)W1!`i}Iltz5!k&K*it(F%s#(ma(RyybeVg%$IYBq5
z-yfZS{?X)bcB)Zz&w1>-Hva?-^XiHJSQ7IR6VquV+igbfZ$rM(+|*+-zM=K3r*k8C
z?7M;0WoPr!o6>C}>u*W!@6hF6`zTy*_HG&FZ+og(bzgn!XWo^obDmpypL6SH)OBBV
zKiRx%V7t|$eJ!i=KyTw`C;K*@;oq|EulbCR|Eh>@V{F@6UMDdgJ#M3b&>WDmSe3`w
z7}z{D@!`ci75EZ6G=E}hn>{f!)Ul1=!p^mv?d64&c?j@x=ocEAKegat-I&KWw2cWI
zgy}QH`TWf&t*$8?|9Mv$2ddBrF*?+dg@~$GJnc)O5xiWe6$_zxuUr~bgAwvrs3!|C
zR<D@mmnb7RhETIw0`*=QO{l$Ey!l>jO_*aNNZSzkTHNMd^+o6vBbbvAy;}UcUj0Rw
z=dDi!A>V*FvAxPX<|nGun-p0=vq0zxyyGnP<~PqKV!?;cf=^_+L8CyZ>VD2vWbRF>
z)u0t1%vrx+D+)@qZ+o3duKj2Ed|ZxjtSK~YQ5#E0yL`gNaO5de9E996M7=zEm*BH0
zNG~zwLnPlk<{M|*U<f>6qpyf=woWu#EI7#I1kZKKEO<k`nm7lG8|k0WjnL%6Xjw2z
z`drc=*p0Bp!gyJ*_xpS_KOq>QGPs?bGr69yj~YP%yK=U)g&NSjF_Rz{&eQ*d*aWzF
zgk5`@Ggb!Q)<U#aPXc3dmm<30T8AcWsa6a40*_x27v9tD7FUeIo0WO@`iPSMaMfaa
z6Q9654YS`QS|A$||0fp1Z|jac5Y$^3Ss%Zb8|n-sV(OJ>{gP@mOAo}X?sIL0;NHSo
zb+dgVY=uF|tFyVz6mzzOtIB6=43C|{Z5MMtgzL&@z6lRxy05kA%CC+=3{R+jeX(5V
z7Jwe==UKhK6nST9EZy=!^gY{y+m)xtelt2G4)ZfPlnv`PrAknE?@Mn8RW)k2>ES^z
zA0S9WxHc4G2nel(#Tr1<gda8Jtqe%6h5v2DS?Or!QDtMGg@SKLZtHYfA>gjRCf17C
z+;+!F#aeUfa(dhm`1t$S+lctY-Hv>sW?GczOE~X3IS?Zj;<b;!-L4PL_Gvj)0d-~)
z@%1;btH&jSXJLJ60r7PVc#7mZ417g;-IcW%DMi6~ipkH#eG1I~=-FIqE%@yT=mJku
znbGwBT^vEn&v?4j@6cQFtxzpn$X4!KM62O2)$&3iLpkzXmucpr&Xaysl#N02Q(=wG
zQ^?ETU?%;#(5J9_6bxSYd@u3!1fFB6r;ysep&Y_BCLI0Z>dHsC3H6&IhW5BB^(5*w
z#DO0$Y_)hd{}LUdobx)5gM+YRC?FRQ$pS|;fRP42Ysfbikk0a-aFu0xF903z&IH+W
zo%KH<01Oai4QYW@NDIph1NzAHhLn{-PLti>CLiY*i=GB#Z$aCDm|8fl0jx#%6+`}$
zfNa|iS=RxgyS7vy@zKXFxeOjeF(M8l2PQR|gbc$edfauCj+7esokv^rxMNN9dA5GS
z-a^w2`_KB=S~_<|>h_O1^-Q61P~9M$?3Q0&*`+)mfV?6S+o_G=fLj4J)ZS``oVsg=
z+O2UJWo{sMK)S%MxOa$gA0i6^>u}JKObUz$IHJ2A1qY&Ur?_o5jwiVw%WYV0ktqoj
zo<?dJ2?(2ei2ezJ>r@=#D-AEHZ6bQ)Z0<=>Z51b_?Yl3YTsSTZx_O^%8l<xk(OBsO
zl+iPBlp!kv+{(Ky^v4#e4Ee5vTw#RttTpO4Z&X9Q3Y%%jZX0OV`)b!5Zl^jBvpjba
z-=tbEThDKsnJ!p=Cvyk5t6(jA__X!0jE-G*(Ad(rIHg!(`&oIa8^RL#ba<-ZCk?ZL
zuYsh|!>#})-m!p5+_eA11hu(pj1g=HCj3Z;1i`*wNbonn4(yEhjM|J`0l9r_)aqw#
zNn4v)nVAete9H>5MoXJn1$A!_A59OrB=zC{7fOQPSUy4bli(nJBX7>eWx^%JrNxza
zvc!QjG13i*h4=uHOE3#mNq=L+>%>h&%vkiIg1OtE8<#WXHN`b00tEtP6h+i`d%$2W
zA!~Dm7M5s=DiVG==8wvxN-{~LWx3=sWV`I;RsrJ<n}M_C+Hft|r>BVVjjwgSW9DEi
zmFE8Dh|`+x*$v=55=RHwh<zkcgf~qsw=qoSD+m%4OhFhl0HiQJCW=|i-{(m{7gvxx
z0Xl0tNjjzM{(~s-zO2SlKi3n?D|gwz8f0!sZCG`M<1rD0CiVc1lXa?d<ke7bpaCw*
z9JCAc8SOR8HaGBuXLgWGo^rfWp6df|XJ*p#IU7mW)uEPAtxyoNOCXJ;4!>mQBe+26
zdIr-w0QZopJNuHkTd$xs);E9S|KGt&XzumRA^cU3V0;JQ&bWYJJH-DUK(g=bi{Wnl
zzn}VN(3QLO%seVgw|9?yh4bWdb!MLgck3ZE_S$9vzOGAfls#}7iK)F$BG<58Cq&e#
z^N6&fv<RDec?C2VUUDQ`L~P{W55e*ky6?l$w^s=Vdcf$P9laYzMevO$1xOGb4mU{M
zPjT|^)N!OCvyWr~{sqBpXSjp^(m)vHE;FUBWb6OoIjOb}+~@ksaOni{um#Ig*oHCI
zVm52>PoKn}B%OdxQce<1n&y|n`7Mx@4n%X#_v4Mjs~CBVUn#hu*1P+jxjo*)(tFjM
z$H<2NU=(H5z7e;%wey-K%!1fK4IpRGH3$I|1(F4gg6KgNAREvz2p^OQ(gCf2_|bAU
zXUFv>_H#0H{b*RuS;lw~oskAQ2maGV9>^MCIrw+<e|0hc{XoQOi(8ndbaBizONMlY
zOa>rBR$E$oe<{5rxu~hYj>3-el;V_<kfQY)yPT9(wpwdLQB+YyQ6^ivte3Qxj2FO5
z_DT9l<_Yj53oQ*T0}X(d4U-O&@n{}Xqo17eU>`tKT?T?-!O~zF@L?Vh=mT;DU4r01
zkstsF%r`<?Um{ZiD3LXnHkUC6n9J_(PPen|TU9&`VvT6hXeCL7r__l<Ssvq>msgsB
z_CT1RWYBkz6WIErY@rS21ABp?!IEIA@9kRk67}Ef<?Hp@_$l})J19Dm>!jxO!9rj^
zFa%f>Op3|Na2&B)RxnI4Oi7*OrsDKtmLJk$iy$i;0SL!*urx#O=~v#VHjJe|dYy}~
z(zY*|!`PW_aR5%Uu$MjCT^d;vc&GH?um1Dd+2AUGE-e|~{54F=|BBRZVex=hAq%(L
zD6FTKgEY{p+bF{!Z6BY}lYN|9?mAH(Y!kLdpe;gdH#OFBE$^JW1)(iQpF1}X;u>78
zm$zxQJ9uW48)TXzX;exq49y^9<Y;w3kcT1W{dvd=kdojB@X5AIx65c-HrUty6ZAA;
zhPf}s`Q~2{<Q0p@Roa$5%0v1x$EVN2PAA5}#9fOww+Vg(cnty#<F^L0?8_~(<04>^
z$grcnq+Ug?hh=DkB}7soj5HLy{ZOz`)+TU+iJP3Va0FNWH%{*?6VCB7aVa=;R%Ndi
zx%q>TiXw?lfG58V6=6)HOM}*m*iN}C3?VB+?P_!3sUMnG<*w|OOmS5yRDC;!<Wk4t
z$CAcCV<pwI$YC$5yyE-)0()Zz7a!tK0t<j8oAS`?QSPun>tAK$mZn?12*1Hc@7vLr
z)bMJ(Vb5kmc}#H(SpI|`cvRB>ZqXUTYNErp3nr{ZxO;FbZC)uqb+hKT$aQe1w`u{o
z!2n=3;~nnP$w7r66AHrc#BM=L1=VZZ4Xm8o*Mot(c;0hzY#*KLf^&Dac_P--kJrcT
z{`~FqD~%M_TsjOFWaMU=M){v^m}we-kafYwrsnxBt?g)Kr=4JU%x>eoB0|vW>}lj*
zzJOz2L*LJj<A`;lmY`kduvX062VsFyK<cK=>gJhcf;P*54Ekju>&eVmkOF7|#Ps_R
zuL=A6Zov`LQGR2NvbUC1YO>qXP0CHeP4bOu!ke=9AH*a?5Mm0V^3YUSSN>}TDx0LF
z-4+em*h->F0T(aUP@hNIr~h9?`n8D?q3|w6YYaJ-A4j&}E>??5i>Rq3*>9yX{)0qR
zB-<(}L4QD;w(aUee9`}aQ$N)rqK+ZGZSZL=q+34|vSAC?D)|!q67^C|HUY^s2|>_+
zj38Rmy$jF%7%N=3$3k=hLFz~KD=7;Uofw^(WiDl5nzg4k3FaYgx*reya1J<G3Ex-2
zXk%z2YoqIX^tY_8+j9M7FKsVl53o<1n44#5;&e{}rheIP4dbmginU4G`MYJgAN~rp
zRcp7s8b^jgfkL~?vtjLIo_2;;(m^SIWyfxo#4*~!n1zLA?5eZBQlS3GwFI3eoc4P2
z2$^HI*J$>9H$}Q(a4c!3Q>rS|Z#X@l@89AIG+W^-)h%-Fw%fT;YK;0Jr+$V3(2(c=
z{BN9MDo+^&b^o|ayh%ljN8BCxAOVRFw1SobIqVEH9iaY*Ns0zVr$pz!XyWcrFuJnr
zm{~mu26jefEmHJ@LsVf)`#CJhHe!I#V<B2BI`|WPAJP~jomopHy3_?k?dC+vrFcm(
zxw(s!JxrFY$)H81MW;2?oieIPss*O1kfzlzZ8DVy27p|5t6;(=ccJ@ZmXq1IWShUP
z{Hyzv$WI0rC0skc8>1w2)y9Rq)+SlpLiC$OliL`QerP~!bfOvP@W@JP6UdK@iZ7h}
zuSgP)OlwGd9jB+9lw9E6V4O(}iGXM;sPQ`s{(i4+8VrJ=P-U3b&zmAQcNr(`a9_!J
zEv*Bd^=lvmQ$J-ZqQ)kjZtyYio6hQBYjKsm$)*9tIn8bLZq9D^6_GTN3?4R#JjDm&
zQ;btGQZOO_0j7;ihN|)zzyE+&;#aYjMZFI{5$2=2gfUHFwu`zSDjOc(F&KJj81nP@
zQsQYoC(IB-V=O96kbn)rUqNC0wVzjh{f|<b`By0s+{T8(E&k6EFOvUnQYo=+yJ=*;
z|8*kNlclHE%@s=q3v<za!uSVMLLG()E<-qGk`7!&Ue<%PCZvrKVP!Z{tunqn$d;-Z
zsu}B{XJ?UU!mZiVtrVPH;+nBxWsWU(;)b!PKVhGpW8=;54IkeH@&$dUB)UNUjnQ=S
zbm}E)+SJYXdpG32b85CRAYff$IOagY*$x5i#ru52YnBPrh$H-2@#v|uo&SL;M7>76
zqLWO&-;<5-Yg6vqgvtlch<-4QHJA;I42K@FJqzU)5KPTK#j9g@`uJHGtL__tdEB?G
ze`q@jYQzlA?{iyywG0pfhQE+<0Y3g%rlT)#yZ?7^vMPP9I`Yp>jkY=`!$fYYZ5^Nv
z{_1pz`x1PdM})H?0KFf!1*v0SVGv1yEsNs3;TNQta1uv#AV&g6GDjjuYGZt3QX{Cb
zTJ+Y=TGMmzTUN7-wMOt83ZeAr=}NvrDW0?i02`nI;0Cw@PymVmW`F~L7+?Sp2Ka+N
zfj@ZSpLqf+fmy)+C2dPE4p<Y+1NH!a0T1TU5mG2TDjkG<(eNp2_{IikOQalAwpJ`R
z3g@4tK(rXhu8#JewOL$dw_Z$`V2EDgJh8N3q83EiPpr)gBdo}}oG=EXfmN<j`kXW&
z=mU?HEikwKokTq(9SdJ1e((~_62+3-71pBmfP%|KN$DX^iKS-twrx$|N&Hk|DG$Hd
z>4%is98q*su!$lxGL4)0H!YAwmPVFA1|Z9(^(s2Xj_}d(4si-1|Gx!=eqJ6FY@VU0
zkkm~!T~fc~3%o7Y)<ECH3#`?lZb<jKb1Uk5R-)c-X!zJ{-D0YS>d7Zyj~T=cVk75%
ztkC&J3R{WA_V}2UuT}`B7*=u95PV|Phn0g&pz6VP@L}xqH_4As8vm0r{;|*NVf$AJ
zC2+J(VIkArOg<U$kK?LGAX>c3;c<AU{f#E^HqG~EWVW^7DFhqA3$FEHW^YB4a{X_(
z4{bKJ&d)yDWS?+R_^oR0&z|I@OZyPskd+?l7R#PF;|w1;o;;Syz;NSGKe-DM>ri^u
zJ7h>^D5SV{m*2qVX&pi!&^2l3{0iCQn$IpeFAjzW>nAUgYf)>JH~uT2=yY@}vH6eT
z?OeK|kw7sZdC)kB5yWX^YLl;5MCzR05RASA*J0>R3g^vo*WWGHu{yoHA1Kz*&nx|#
zlt<T6gLh0yoma|?F!8?>k%i0#AJ1MtAu|D(Pz6J^mW@zG|5Lc3+rm3=)Jv62_>Woz
zbtH9C?+6V+dPpA)Nyv@oS)t<o2Vf|xD5^ee)aKPCJIHcEr}9Ut=d7yT_!9oKjiii1
z(4(v-F#Xt)Ng9QqO@&lpf+^BPmTn`6cj6`4a}xReC*$LZrWbXhUCN()8;~=F;Ps98
z5aBgX7?Gy_n6Tu*Tq!{wabL5R8;tVtx+w2Nf^&JiJ#OBCAMsnDOFA|&ET#u4-kr?d
zAO{e8H(>pq%5&rY;q0rU;%K@)LkRBf?(Xi+ph>Xc?gV#t2oT&EAOs8U?hu^d4hin=
z&TQv-zHh&G&+cD)&fL><-P_eQMfH{6z0;KicET(Y%>pMd3M+8xaLRIOa<cx2`>hiA
zWw`^B7A~y*1{>9hQ7Po0TfPHix<?x!v@}L;PCFL7v}~c0@OytOWlYUg6o)l1EQ&di
zIh8qq**wd9n?=hk%#5Z+gL8zYjK)@8hsl&=z?%TeHHygWYkYq}x83Y3F9<LT@{J1H
z(k@epdUe!k%)>Z}&OM2GRn%!r!*dFa%;!E?k-s<X*lHU*u#Nva!eF0T**s2Zi0iZX
zsdTy*nBGH!hE5tPH6qL`Kq;WWF;L7h&e0!>l~r!ZMFIWI_?ZhiAbe_q{hnYzbjEOt
z<9be$ZcZ)oT5TH}16HFi-3H$RCBNLbofml_d}^6}j8Im)kK7jD6eZ+`F)|PGW;n+x
zduUe9C6xM-HKVB=4|2r{xK3tBVAyN?H8>_3Q!nfDI87oelY5wQCGHZ*xZ5y_$@L%!
zV?EXR7YD|N)a}MlwJN{jp;PBm(2vDcwpt%>MB+fdJl3$=@6!H8_d1g{Rku?Yogr`f
zGV>Z90M2~)9CZS<LpBM$7dWFbbqge10dEWY1X-W{Ps1XqbE{&eTmotBkE{4q*O?^A
zj&FQ0PuMF|rI(R2s=>vvh4rtPEZ>p8ZHwbeAN2I!rgN!Fj&oS1mv1CuVB;g?({r~j
z<~R;0(7Q_3&0>x7%V<~$!_Z={sEtz(n+;<Rs}FMzyCMvFk7Q6Nszqhk@kgUr;;nFv
z>mj7%e7La$dqtJ*KJ?#$+Z$ajo5qLN1oxQLmnnx$6qpn8Mr)ISAJeZy3tmLqjQ-bW
zTmb<^$48^4qa2Z~tar5Zyq2;3-#;bH%c4&-EGx{i%{t6N%<|2W%<9ad&C1Mlt7R4q
zoEq_{fH)_*1<%i?Z%HlYn5Gf!whxLQKAPA^1V027LtyNHI4Iu{IkpdhzobI-!#X!O
zsLru+F+gbTk25Pa6&_6*y*EK6_DWXijGo3J&xk>q6Z96Xm1IQ;C)RNR?MmjSHO9uK
zkiKR$yEA@|=o9_^_NV^aAlOwnLOU|6YQJwzw?VSNiHR*=r8Q7CXPwoo*G6maV!~px
zY+=s?I?9}{rzrfaywdxb?LfTTRCz_AP`AX@w#h|#MRTgrUMtF@%zCA*saGCNyUy?3
zT3yGA+LS@!pG48b&P4yj*F-3u&(7q?!9DEn!h8SXv_{lVe_?1P<(2U{fjAmd;utL!
zEOy#n>U5<NhEO$QLM5#r0(>qgHi0ifV6aTy5_?3w7tiO2ZzB)VxZS;(ji&L{=|h;G
zbY|Q?N?L-_$jgY+oN=^wcs}!axGAs9&9yJ+=kM#B$PakOpm6e<*d^9v_}K?lR4XH_
zG#sFs2;r=R)#wh8#&lHwooX7=f>bGKR3>L>B2pT6rJ5~#x*<`7;&tu|t`UC4ZQ_J~
zJ*;U~EQ1e0Wzv<y&8#hXIu0YPGC}|1*ED|yJ;}H73NEnVq1&x5->Is|WEul7w(5Ij
z#Td;=!e#oViUN|FTTVfFLD8V9ir#FTBgzBD1KE<(?Z3(`+7m$SC$(T6699~|TO7YY
zS~%AJ)JR*3S_(uq0NaN{AYoPz^C5BSCxC6A_z;^9U;!K7{u6dnD^u8Vr+JrR0+Dx;
zV90DnXdV2WAoaNBIPu5bk#xCB-%sMbk|#zO3H>903#(v9pgoG9MejqCpfSQgXU>zr
z6IGs4?$hh;!6$5-PXzk&pFzbUijNW7amb6~I>O3~NTd@yY9Gd}6LxHm)4z~5Ed&|-
zKalnYqF$J-;|s#mEJ|;dBa(feK7i}zIk7y#a)((=66?&?sy3AO6C=0%1)5T;0cigp
zgqv?4s^c5lbqEwYe0VoIK2*LDa!d%qzfdeJml5t*kXQ8^+#bwNuuMic<>3w0q`bWr
z0JdsOcO2ePO@`WQ%#S#@K@ASC1CX#@^Jc__4cgW4Hb*kj($5N3cvesq-%#p9P$v;u
z#s6Qo3cFy(pzTu!&>>^qe{a>hiMcYWA6%n8z!|f{scBT6T%+*OKyok?n5zCya<|@#
zksTS1NOmEAgV}CT{x=cyF7IMZ$U?Rp->USMV6Lo)e072y2mBO6lP+f{*4n8;%$30o
z<`&6g#=j1FNFv{c=9ia&&%Hv9Y1clXXbN_QcX<U)pEFx{Wz}LVCfj)pc#RdUzW)BN
zNkR~m!rMpu{Y~ilUqfiPj|OeC;(rRbcqSpXE3c>jhnE-iHM|B$?(~`gK(_H;>qWe(
z*XtE}g@A|78Y)wbpE}zJy;_)P-f$xB(el@Jg=r1b4}L<iHDb{P@*N|K<V*60{|1*W
zEAUNysEdH>z;_(<@3W%e_}*FG`IED>v%0gAGuVV~9UGi?=n{&zPWd;rgHze3+^n1-
z)Nn$6_fO;@triKlEfzXZsHbG5GZKT4UQeBc1*Eek5p|@9tQ1?^CrJgx<-XY>y9*h+
zvi9%)eJp4XRJ;M`9#Ht#L7kImk9}|OKiTMJNhJ0pQXJdT?;|A`n~_lytMI>-?WMnz
z?fZ0m5sHOC*Mpt@KkKE}1W0Ze(<Jw0eiZtt&jk2NY)j<-IHY<u5v^3|@D6#;n*Ub{
zD=?M>wa1wMt=tAaaRinlrb>@B|9>M(7_2?!&2P0f2=yX}9I@<sJ~u-H%4S_uI51+e
zImQ<G|CzZGOj&Z;g;HA|=WI=0GSedXJ#@&L4=1bo(Ffy}wGK<^AAddZsV|UI=r4dk
z$&3Flkh$b2osn%Vs~`)KO<OWP1>APT7^XU;F~D<=QV9jIw~VpQJF)Pp(Q|2Vpcbww
zB>`{^{Y)Abb~cS^BTx}kX_jN=pYhugR~|QYY2y?yTYp`3Af#~~Ms%<HIKT)JsF~xO
zH!4r5K{fTu5V7Kw=dE4)C$TrrDb)KryoSWRdz{l}{+O|DuYo&WuRQIydNtf_@I1*~
z%2LAVD`&?^DseI~V_p7gpPm1^SVm{$Eq-udk|UxD(-!g^Sc5ic)g^T1+5p`8%PWP_
zi8uzX1G?+I#fl)_(q>`|0DNM%F>dK(oNVjSoylgLY_2A+Qo0kJcI!98-EBY#hYoOL
z*}eTcr*TW9Do6-gWA!mhQ-CqD1rdRCK|&xO5FAJjL<ibSC)slUvP7ZsUx5(g8A6AN
zd(@2XwA{4TwCc1Wr#MhS6<Hf%j@$#}eXt2)IV1=EBA7rhG(FhMkB^3BM5z?~7b6}x
z=C;%s8+V+YD;iD5_z9F{)zP?^G@4b$cqKk0!u&1V;>c01ewW(I`RU)p&t*EvQDtg5
z1#h+m_#KuJ;{H)=1Mx4xPygi5f`4^)CjJLR18CF0KG12HAE30l|0d6t&M*MgW#XRa
z0{#hL`n?SND3<HY;OHf%Q?Fr|VVS7E`7oKAX;3AmLC6sYu;DR93quPHML>#+P*I@~
zkox$W_(&4ec}}VS(MJ#SH$(ivWJS<DX-1`&2Gp1~B{BVB8Z@2p{r}3H&cMDLvA>_I
z;R6S`+5OqnxuGo54PGRtK}ki<+x{;ky}Xav3wyu{Uu`hfV{qPh)Z3L_W*|vWVn8|u
z#7<Dut)31$WBd<#@-IAbWemmqkAms`_~}1$Lgis@fX?ogU3`~ijAR$~xf)nnDvK~}
z#%Ra?GZ!23Bo^9o9I*%883!a<y$B>C7_eXLPeFy?Qd7F-Vj4?oOPW3EJqB-y0ht&@
zPFBTA^tMuzs<|4GF*nv>lxFS0F8yNi4@Put9!KPNhxZ-1^hR&gx1nGN2MJy_JL6_%
zxKAUHuw?w}JQLQ4Wiu!PGPJhYnq;s^F>Z7d7vH+K$-I&_MQ$W~)dlnt(H$MX%&S=Q
z>zVAcQ0&%P2;AhN+j9|M#3XI4kWTWbT*E6TNxUT;fRMzP9N9e@i$@?(#wp;((PN)J
z+r_)zG5V}Qh1JNZgAC3Uv0Y2Xgw2$vajqf(wL}-itsBxTT@_lRxu@YTU9O+MIxAF#
z^EhQSr8<(7FU%8dAqYPxOY<c)ggG*8@b;cmQ>l!mEVgGawyFE_4T$cl`@r9g6rKC`
zLOZgb<~m-C%G#>PWJnc|#L}J9#~G1?nK}}y{CugixBfoH#&`{(KJFsE5Yx(>G^IM_
z<M{wtAyq|-$`0pp<jq<Cp4}&i_OI%8V$~yo*cp&is*+Tq?NrA5<Jd1;RP}!`9PESw
z?A2<e3)+Vl5=xIPUU#%pQ!zm4@k>ku79n)yGTaJfMs_%4(!~Q1Dgxvt5;7xCdCG_2
z<6q}E>ww|@qPY>eMyq$+ge3H()jz_K^25Y#LtbVhLe@fTwTP?Iq<=PzKBhli<Nb7!
z{{(xQXt|$j;X5?+84=^ARuK+w>wpf9$DwAO(CfK@7x_apXw27cX+I*u<akt-#mOZ1
zHX(JHaNB5%#Dqk^MM~sItVyIobyg7~O`|7PMM?UNpf30!OI6|CuMeXu;GRJi1GD&_
zwJVTE5DHWU$aPyI7eR$j<M$z~c&pOo+{)E9taX!-pt_LJ9!P+?6e$nZ`g6pa%Vnnx
zQLn1^`Vi@c!$AR<Sv=7JF=e+L#IEku><Rbj0b$8*2ECAQ)d1D|*E4GW1xV3eE`r$B
z8G=~Sy$A$l0zxz~phf-c;3s_X^jg*H8X@-WyV!ZL9Of5QU_*+Faxt#W2Sv&Owm5v1
z_?#NvOS#wZ$j(l4u^of}bUYt=<e(mQ<XG9Lmn27yk7KfBbKJJ{9k}x}$5wR)wLy!2
zA1|!i@-~_c!)V{>JILbh3HfKb<L^`MSf@c9i%;-(e`AV>b@l@}_&6ZT`WH|+C`On-
z&!G{9+uL}n7pmwekl;B^_BrQju*YKYt*$YVT?9!rmV2K8aGeo$OweDqqFXxs-Tz<B
z$X{P+5e;sg{hwgwb@HN$Hb+(X%urF-VQaxH#h&(AmUW{dbgkuB6*FM-tS;=8`iWuu
zL2Y&S%e&=fR;=9C#%}`kfaid_Ja-efD12H_>4p_Ba`I_m4IiRLbOO3CaC?bs`65>L
zNCZ7oT>0xr(L{{DxXCjV+Q>-%_s)Emg9s!W@0rPq?Ox2cCsV==EB6*nD7VpqJuH0o
zMt6u*XJOn;S73-;yN`y7+T|)fp?03hBe{Ia?WN5t=d3IJ-q0Uz>we98KR_!$SZiS(
zUom^@@X^!{)lT^K@3gqFs~ypb_KDmR1iW2R{C(h-Kmgq1CO|LB?I*~0-0(2%k?BPe
z0%o}8!>|uoaWlB|KtBx@sYXNXUTtMdx~mn7bM*h6w$u~c`r0ALi94^{eoS_mfm>B_
zR8{um6;SmeY%ZpHyN8u~7xxtQMQrfZ1wuV<Slu(;`YN;bxbp|^`N;og*FnHk7m8HA
z;dPcIkrkSL9^G|BmF%Lu!|ztIJG5E9ezCW7-|n!gs0}XI(zQHkJ3o3Boic@4f;!&m
zW@{l<p?4uJtP5H<9kp-9MTM9Aa1#kIzTWzxRkE$Y=#|1~P#C4fa9O&x)M=x*jJuQ=
zdt(QpTesHf4XHE3ekuJ^CfsFUj+e}EX9rsFe(mxF%Xx}G8ogL9GFcABVWa!}<Gib!
zlB=AEs~$S4eHMI_(Js9G11SAA)<knWvrl=yk;auTc)50{kd?|s0873gCxGHH?ThTI
z+sqJT!Esa3Kj}H{>DM=Ne-4pI%046hn7{;fMA?P9ven=Ao1?Di-%XAGW_|&$zQ-*6
zEf7rBFRZ+Jze2^GSfJ;Y*fdhdYu5tFN%`H<Ud(_%h&d$_vDrt_>5no8wKWghY=M7E
zV-~i`g>(YK?#u&fYz#k6RN>sL><09oX}<^GGeMpz#k&3H9IPqzBC2RQchPDL`=*R%
z%x|78^|P9YU0}-1tn_6*{jG-h56gE%(>ZQNWXtq7Uz4Bn^^|&5W8$p*`S%TeX6GrL
z-WufSC*Sk!z{V%E1x4SaV~58kqYuwn*O3m7LWqbj6P~XL!Cj#CpqZO+$eqEau4m-h
zr7B+Xqb1TSZdX{8YF!A|4Zf~5zDr{c$yv76aq#x{ZOky%z7%g>cK{*%-!7{fn&mp{
zK!^7iho?Ox%GYE<lotXXLfSvq5%&&{QX7$1MPgaAFg%2t8}nNdQy)IRd^6Y-T0~2k
zyayFDky0z0k#NbYX}^dRWRx4!W{%oWSTkg7QR&+3V-#8)k@LmYC(PY~)*wQ=tRILz
z-%*Re2?|^1lOPC5Snhv!)(?5Se&h4Q&sD9yZM!_jNyO|1IhLGXzVQ&+FZbHk$KUcw
zKS1N_+2fJ1ym5NgmCq`8P0=?lV(89pAMJqQ-N{$6T6VqWHNP@P-TR8(Mi~bj-te4$
z2ORgIfM}xAil4fx!43~<NMfgF6;Cfe@30(Py1IVNJE-lfs6X%?IJktZHPVdc)YJS&
z!Af};RP`yy{-g<5a>~E$no{<9d8eEDV(DJ&X^$tEpM%8kcKdpJ$<~pCGdv^g2Omzt
zMXJw00f7&B5HeQOo+R#Fv4_{SCqpNJ<bZCGZ`~67*98zBMB)MAw{$u6UUUdmm*9?%
zR?#ZPxkWpGwguwlS5VtxTci^LtC+RrIasc8sFiV}hF40<Jlscl>Tf9k!rx*5JMSmZ
zX%Lx{&+`zZHS1ok3+|5>*_COR?Nr=LPH0H9e+-#&j}H*$cK6X?iRC4cMcqe4`EQa%
z(N7nM{;h<W4iWvWCyNA91j+rzuP|#!txu>=sV_T&&?erO1pIy~34jjI3iqGb^msvi
zINRjyJUXMd*<TAns_uIobI@F!bb!{+LqiUqVu!Nmt0fd0e0dhA+?((Ug{*dsxhsOY
z^!IX~cluGV&OU64D74Fcxud_x>55vNd!I!2lMVCi%F26fx1q}6N>F_8(bW?uyE)`y
z?wqK;7wy}Ans=qCAaac$y*Y3^d&>352s*yQgp9!)>aRiQ_%7I9eJUYH3tfiC)7h^)
z7geujkTn0TOq7?R$+ye%cIo#iYc&>9l?u6!@Sl15PMB;XE7iLmzZj}LRJ~Z=F1#jH
zuC?rTaXi1aLAYY?#4x)y>>p4r*4T+50|5&+0jG~=ZLeZnOkj<*`Sf2kzbL?R{9XQ=
zVlU=5kQrR&DhDJ_Z=7;+HyWU{>z}~*!P18F{d;$kM!k~89F|XpYqEUZvWwC!zqUUE
z&oeZTfBoN3$s2re#DPAE<G-blA1D6WS%GPn(7y(@@(i-Y<`rmSP~|Y;#dkzUNc4!S
zmZqud1j4bFDmYPVEFP7(bzK>@fnZD7!%YiG78l#KBN=P$->M%KOCIEI1VFB4CN?0k
zM|rY`Ewsdq5?0g31}dx3K!QMb4b98I2!`Qacgl)B8LvP(e;~A-SO^=m(!={u%98TE
z-IZl&5=4@`<-}~isD^%vD69%eY#N^6Q*dlYR89lI(K06NI0b1K-U|9yufXmdXAr_H
zW$)O0vWZcUW7?ALuu^Hm`8XyaDO!yK>^)*d8Jizqv+UR?@FnAY*jKdzEas8)=BJY1
zS>(f7mARGqz4R(XWBO`O>M1?3Qal=R<f=bRDwT(1$fkPwR4Njey#(=!HCaBtFX!#K
z1W$A7OKi<5kZJ5%f<J!A<k>CML9I~J(J4Iid^GAku+YRGrAR<M+I?RbBn5MDa;Q<c
zj5K$3sg@?jw<KJ0d6P%)hcnCA5Mse&jbQ#&n854cQ;`>#`yhk|byK(y7MaQO(YirB
zq*$$k&MFj*v-XKmnNPQIkAJGPm{6JQQm%y0_8lI5rmdMrN#|~;i(0L&xe8~~fkKM0
zOVcPJh+ueR=QBN<&3yp(PwH7W%3N*+H@ya1dOvDyAs4fa);tL0^{|9wE~$<sOL-VS
zmgB+oDEMtYorO%#;Iq=NOzY?;@+ac=4oHQ$<RuYa<Iv=u^6CMR{3_LMyFC|qVx?}1
zB1y=o^EV1N>+Yhdu~};zt%klCdBVkkxqI&tX7hjDXNX$IeDBH<IA2wB$w_!N&=h5T
z@EayGa}m1;y1XbCPD&wvj5wgwn4tIEwm{Mn%tUiVC3O-L*&H9EX*yir3{}A4Hx~1I
z`KXE{#)az}nD8(M>E6?^Pl@x-@tcK{<0ly?1)tY3#8BmvXMfT~XmI&zhxSB85P&@r
zi>8q?E+csB?XA#iEH<%yy);QTQ%s7G@{v4qCTCz&H8(KaHmTKF!@n6yLKWGZen`L|
zn<!i0x>?S6eBxzmJ&|B9j?7D2!7O>3aAMe#bz#ULdDZyhfY{kXPVUQw>Pw5$@8IAl
z_YvfebAr<8vh-2AvCLD~M)>ZW0s`5*V%uV>Te1*p!W*%a8Nxi(gQ?5n+#&0*NURF|
z%nrh(h?rqv5W6E8;l02A&I&)c^8{S|AYI)<_pzj<uNh&O<#P4#Wo1}IPCr^q(HJa-
zq;WlF^F?E@1y8ghI~jJOWL@Gxa(A+q4c1M)BZ27!JQ<x)_H0twg*Bc-_9t<*7_E|a
z&-2+z_IoLhV@vI2f(^W-z8IV7wgr)z{;SsV972qG`84m`>A>MY1WC%R)QaG4n0HSD
zDlhdZzeFz*@R8MK+dmz5_>?&%mrJwo>qgO!_x5>uFSwXys<dXXgy_|^*?`v({$uvd
zh3q05EANKbi&YrJR@U)j?3J~cpMUJtu#u~}VrYmd+I7=Q%S1{M>@%!H8@JW@_vP1q
z^(eghbcp1quNcWlOp`nEgDy#8YTqghuHEFGP+TV>C=o-DRcV|h2S1d0sZ2CY@RGkS
z?a`n4vQAF$z8~2uNbyg}sZ(j-px@i;P(M7H+7z59RAGZZ9tC5Gkp`VAvcb?D3oBC}
zr``KA7j3bADI92<c9k@Ghl0iZ>~c`>992GIe#O*lCu<`-CL%ca>}7N2jk<Z|m~Hz+
zFi3kfrm(^gH--@Ysvsu9)4q<Ny+g{iB(dnlfsaixF+0BG6KR_?W5A0&KlI}u|0TMd
zKs}cLgHx^GFa%sWSht{0FyHxogH2kk%kkVS?E?nviaDvKJw1M$+DgmD@wy#nn_IS3
zJth1yrOu1foeaqc9@FyAXBm4ciy?bj%h{6bY*C+8*~5~tA6)%lo6}D?APvp7O!egr
z!~M#8$;WGGs_UU#BE}zdRh{I?m+aG|{->(1)g$RzwP-t9&a5rN5Z9ecULCW`mNRF;
z7(Bm*p@~?6@v_8)=?{FFxvg@SE=}?cD(-b!Gn@QXnuKnQhouI}DU6~cv^^HIY}fFH
z%zJ5GvSFOBLa&Pa&zp3TUIyHmxm5zv^n(l@DWiV4_W=S2J(`6wJ(^Qi?q%Pv6SSK3
z4h*U3C-Qc~)QCJ;$0K-4PNy|~^Io@N#!niK+>e55B^s)p0y5M-?`++vf5UjyV-%W|
zC!%aI4^}YXHXPAR6v?(THILY08@`{G6Q~;7uAZKoip26Z&~9D1yyP^g4JO+&YZ~o{
z_eMRmCX6i<S)84ooC$&^ReaFS7|h%<w?H$1QE_}5yA{sa2m;(mXlnlBn7A9U0SG>s
z&3=Sse2(T64wr3WOPS4*JUbEmyR(S4p$ol*UmW`RUT!%|Pb{Ve<${S8d!#7A2#vW@
zaueGjg{E$g>X3l?wd_(zmyGUf+yx{)!OzTJU`{OLpb@LIels4VD&ocDZ8G^liTbjF
z7QW)^AFD>l%$yQF^GAcVB#Um5H+{q^e!BX*Ku`2#gn?3m&OH(sUU^8;5TWqN!@KaK
z`-iaN<9GQ9SgT2K85E+Y5pwZljR!KMSSoENDsB~?6Kd8C6Z`>T!GGNOdsa}3H*w?-
zJ0h;GX9RQ$v@To`^T50Fh~C22^bu{3CMuG$lzfG)AGBnD%Mr%u`Iejf-~k8Ak*d0D
z3tr89|E+anG4xQXH&rE@-|%t#3{Og6-1|c*3-p~(di!Bev4Br2&-4PP4p^HE!7}&j
z#$NF0xt?H+CN~!mGMqzhE#_@mk<dn(T4{#yNm`%Hs8xj#U(e6beD^M$GTgxma{@j+
zMcvjZ%r4FKOfv%?m|q{uw-6v<N*&Hfc*Z((N1m1jGldf~{27U-3pN?owoU9sUIJjB
z$)#9q#>ziJWH+>BI#*f>&)qVht=WZ=tg$1(l&Pb>D37EJCx$&=&LcUp$5RfMsnU)`
z<Ud?Rm5LULw{99?{5?t(lRxr<xVW-PZz-><T*j$9T3Std!2;(BTs`G`V1YWN@YC>O
zv21UO4>ZW9XK2j<;A2uI!?O4LM2C25_p&1+B(+j;es74PV1+#DhqtJGU_u7XZ=Yu@
z(^0Ob`7`p7Nn@(Ia(t3|2xTW*)X=^kV^OV`5^7+3NZoX4CkuA2pIFcF6)*8*Ac|4X
z3@v$!jbx2LkQ~IhNH(c*4j?-oKL@-7Ss=gGaBYd7vfdx2n7$W3i;z0t3+VCLM8mIV
z9B<4C|G+XVNDKZ`vo)K#J6Bp;xygT{(BK?nVSuRNElx<HNPjg@yy<;qwE4q7QQvn&
z)I0bqW5pjc(yBOrOLf1E@6$p>Xv~M<!5P7*`6KydBU3gw`!#a9C66{wj*_%47)%Df
zVP&blvt@y3UfP-m>10}!-gKq@zHy#HNf|U63S;9@;P*E~_jQFqauVI;BTse*(NVjh
zJ>GoA>!O?Ac<=Szw@yo{|KOhalQPYtIuloHS-pG`s;~xc;?O?zjgs$*szYM^d-$*;
zQF3Pjnfkq~|BVUC$B4@Tq8_QdAeF30$kGT6$d}{Cho^wP0Hvb2B8U69Ayt-NWrs!?
zf_GXw(#nSi-(R#Ce&o)a_pgik)=-2Ij@T`-Z*jn#$ta&^4p>jVf2<IP@J>3wJ?edP
zfPKsshg9YX_fBxzr8_$l?-i0i?1*;}?ccp`GVWWSTCU!3Sx&k8sPd6nBojt1W!dAD
z?dCvXmkLKM^QaB3ibr8>lQ{Sc8{9+)dv%eBsh>=KDFHQj;pZ0C6o9VqHRO1B_>|%1
zt6sIo$t*{q4L4~2v)k8oBckac73;p)C)xa64x2amTzocS`MX?eia450vK?bY@2(Pu
zmsVYny$-lIO1MB3#AQ)$Pwrc~Py7?|k;6~+oU^`D^shZ^ME9^7Jo<FN`0Pcn!7P(c
z2K*=r3p&gr@^0HeV|0VMiluc9$UUWzIR4N}dZl)PG2&%tA}NMg_&ZHD$Yo*wDg$G}
zYdb5syzPp@K|Po=<xeSp-rJLA@|3%M52m<r4sF9d3~e@8hpD5m9Z2ic54g%r20nq8
zXd4t>!k0nEPcD{XV!4tSeBZGYUTVv}Q7D5xa+Q)r)M8x$+kl)K3{AN7+Aq3gKTeI|
zX->FA<|6M1`vhPr_`TIK#|Ay2+iV@{t$&HSE&CKTBK;P`XFDFO`P0}Wz75}qGb81>
z(vEt|hQB0DM&o+}6YA{tBfo)-v7z5OMvm&?kM`vfYwhMnL%q>$Vv|SZXDl2BvY|MQ
zdx8hN9_k5*+H{m!!JpxPAxl|;;R^1(r2O-I#mw(}J8%5-Kyists;Q(m2<q_|zHm1Y
z2UZq&+YjXvuQS&?$U<)U2Wj?hFLtL_g51>VnjL;+EQh|OBc&FHByykDqNQ&}hQ0V!
zG=f8Z;Bf1*L$QvI6i;so=6Z|L-!PnriY1e5L4=r7UjS7f`oZm2=OyJ{J}w6rnuhM^
zeoY<^eUrNrOUGVCwtmU*gco||0%zix`Xe{v3xcVvq!^NUK+lStA6AzC)4r_p+8zNa
zD-Y<=d7MFATY8f1hV>Uh*8}a67^FoS+Gh8&j-!HuMdp@}1|faqHVhe}r`N$F>C+!d
z4*`Duhv)bGy`RrD`xvJ7s2F%?mXgMOmn=A$nmsKc$y4heE)38|J7uP3dbrqN+0-wC
zN1&%x1@Do!`oZRZzDYR0@DKiUG+#CRnNwD>=YRa7Ghv?fecDw|NR^GI*cQDDzHos+
zzxXG_GFvWWHf$)Aw(V;2spL{3Vww)!;ImqEM^UE<3T*DPPLGaw#d?yK7*+|1uOh_%
z#Bl`9F~4E#$y<$-=WMSWYWEpMrjUIf1%i1UF1@@|;YmWMkUOvyBezBcyqJgEs(ruf
z)%KiMuxnG5<zv86{L?7&g+;3SOmyo(|Manr-MYS+<#dMXMsVS;*_FF%D8W3PIDK&C
z?H4->3JxFigKW#Rj2VZ8-ndWY%2nvLPTF#b23nPuiWTo+fA3XsooJaC&R;2ppwagE
ze>gnTlK+9jEX5uwXxue>_4bTrrh18Ic&s@?e~Lrk3t9CWZ9Wa|4)tI<Ec@-3e7&ME
zPP<ziMH+Cq!?qb7RN13Yz50L`QUnuY#kmUc9@a)ohE5uUo=mfg)j?J>f9=U?Q#}E3
zZx@Ymf!NGUY-zql%tB+q?IYK3!_s56I#ST?9TSftGp=oN4zTy+;4uCgLNV9ccH`^<
z!Q~thVs8&pwd}#*Zp5J5i5l7?8fqWg(P)G0L4@Ms@K>iJ%h+*sk+B#IcY~On(*>HG
zKYcC--%$t)kndJdOiHk(Ctft|nZKjK5ZxaH2c%`08w?!-KcMvttkQBVF*=}a`=PdT
zB7NG7eSIjKC)WWp@rU!P^Qa9_T5VTb@_=J_W&vBF{$*_0{c*mmp7nKqB-pSaALLh>
zvz2)n7&9=fsz;|&HcjYsoA9_$a(RF=a%foWqf*i3$Lcx1aqqpz(~{C*Re=d0npfst
zC7bgM75YNv;o0@Z!N41Qzo+TarheJ9m7DpJP8{@bq_gZ%vFE6Xe=Xv7mk*HvlNV~z
zvw=a==D++8)lRfOx_!?U@<Gz@wt31s_I8brzj89PND#S6Em>aOY>{&hvk^jX;QIBM
zG~o%VY<VeyCRW?Kb3gssZ5W(NSf}~8M2L)a2Ky_+#vaS=!{!3wA0k-R_lGyerD@VO
zN$N>Q7%29-SOZLmkmZHJzD(u?6MoKz)*t3>xmu;f@Fl;hc8=<FFE4FI%Sjev)r9m)
zxa;^J58Xd1-k16MpD1bi`?C{<y?m=&zbVQkz;h0m)4ZEu5}>`)e?;T_eJ8chFG>&Z
zuT3UiW-OdSSaiA=6~<nHTcp`nFKSh<ZuMu3HMT>~+KIUV(ekyzScg+=FPp5Bct0!1
zUud!miTec0a-q20cLJ%*Z4Du{I;5eDm~0RQ$Maxk*eILs=~b-3TfOG~%J@S4>BXm1
zfRrpf9EHhl=A7#D)ljz@I+6fJnCf6}o)vqdW$FtlWSsvKjdF#CV2|H^L8WYe)OJ%H
zp4?m^TkNnNafMdqr)nz#=9;2ZDi>V(kR8>AjwBs&WH`}|&85-3SqN<pU!8$Wzo9D(
z)6s;b79!&dkLI`@t@=&ch4VGP>Ej1;zzW=e6b3wISE)}Ra8IvF^iO-_45i03cjTN^
z+MG?AI|Q2j<&5BA)ef2ROHK~U*QB;SqaQz9?Fp?oCw}g6!Au|d#d#xpXGBQ~5EY5}
zDB_^(qz>s9{!$YCC~?}DapL^D9wM*kZj$vVIRx^n&R0`sZkV>5meMR7)+l6{qtfAj
z`8{PytEof!f)al3^y8AxQ*5**VCAO7s7|#2E@I3^%0NcwoiJ8udhl-RO2!(U8k_}q
z%}nQ-Z^<jd-@7n=Hfsj*^FGV0KhGkqN$N(8?Nf+i_7k;g2hXw0`z3;sKP2iEtC_1U
z@+k|y=Xeou#b^9oZ`tl_G#~9~cm_*v?EPh>G;j^nqLJ%K4~lAfP|$d$NNqJTS_<Z=
zLtgb7SOWA42hO=N;B*@OX)}sUM#;HuwBS=-JD;_H<$V^RA}ZQjdS<#{$Mj1(*y<)_
z1EQd%<d$Pt*xFmAey9~El%;B>TC%zL`b`0%By_2=jybC9UTc_LfH##p%%DG9sM_|T
z5|(GX`~yR364G-pxJCQ^Yp|w|w8@S244iVUsGaEj%2;#hc=D^NGA$X0!^HJFy4n4(
zF}JDo+>FO}0n_)AGI35)UzKEZcUI4qKw9pf={3KLbYPFRAj~vqW-4hMKZLk1(?7kk
z-i_u*r6df_GP8ZmNl4;lJfVF-iXc3YEV2)cyF3{kjjJ5Yw^lm6y2dc%YJb>QrXns8
zv_GBF%pFso@Rru7$FbM*{>srNbF2MY0h!iZ^S{>Qb}W2&@OV{Bf&4bj;!5?`he#Mg
z@pxa)7wO2xGF|H$UNDlizMPQ|>h3Xrhx-E>&)rb(I?gCp_usu622YI)Kl-$Y(Ivm~
z(}B4P;XV1j9+xv^5dc*Vv|E!!(}v!lr?INtG>cbsktb5Bz3AiPrc|4h*+V~r-Lod=
z;g=na0ID3qqP~&`iH@<{_ROd)-|IC2b*C34=Dic;em?Km8E#;oc``!vb|^Gjk-1JX
z4`)<*wkFSW14_RZ;XSS%!hpG*a=FjiEMjf>j~CZ!{3oT`%?u?_Pfm5DY9|82C*Shu
zXWplX;{A9A`%bB2m(_D#8ZzBtxa%ZbxSld>`%<R+eC5h!*}Al_dnj`z2*G>k$-V;V
zr>KU{WOJU2fL(vK|0uCA+R>`z#G}8GgXu9b=J#9i%nU93y=YX}76j3C-J0znLGAo<
zJ{=ICd(pE$niu6mKZDz2*l#|M5K<lMe58J$l_8n}U+7~}t*}SO_{Xa-pc3S_aoq*f
zoi}AXb=C3<sD{VUdyfgzMlWY(tkt%P*J9;B;%e>!WAlekeaeb`Bvnr{4nXNWzR#K)
z+M1}T^_Mm@OpB>3BBQA^Ugo2zIn0W+&(tI<h^e_TU@GW0vTu;dzer2JC5J+n9w!&y
z21`(4yi0%&4umvSlWDar-;HkxJpalb(a>*dwO`AG)t_^C;2BvHAfog|>7xxYBzAZ%
z3NS=IX?lHf-&n(>)w_>D+#RLw__0ScOE{in9g0tJee-i~_hKQ}v07DCu=6Hp=b?tU
zlRmpjDc~uae9hM;YZvFP249SYqOnRWaLQN5`*l32)1fZ+K^=mZbOT{J1d4;FAysRJ
zJZrM|>SLDFzPBfgkO8#qP9CABqQN#ph|B;U#hR<bOMsW;3yVM8!%EYYTBgI-$0DNX
zrdH_A&l<UjzO6qDpFi#sL91Tm`rY;$y;dw3`)v*1@*O_kIM}QgbBgZVw|#gg*jAbF
zz`dDyN7c(0uow9<@cSj{=R`TteH>@!>*|$*Nba=N>v?qcyWq}*#4hv0XAQO7v2Om#
zIn>voz33fvtO+Egb){{kO{G`rfRD`fV9wjm;=9aGr>fCge7M6TJ<)mhOI1aa$EsnC
zU#tU@QLVV%=+l1dg2!itx-{?hgkd*_+O_LWg#J|Zw$V25Mey6|8)81FJ(lhiq#s^^
zLS*Nwu<agi*7Umr(BPTgyuAxrhbDifKxcd>%Jh~M8#*`bjUgjU=N86!wt2Tl3iO&j
z)H7L1_gdN8&SFB~t;|7Z6;Pd3xc9Gu>u@=5#O|^0^Ssw1hyuy1-}zq?oSQ0li+Q3x
zdvcv)v2?38zBROm_Ae#5k09yR5)8^cecQQ=@*G1yOmR!rF5)WkiH+=BG>G<7m$=+l
zxaQ}##Mq1Iq6Ua|_z(V;@9uwpSceco`#TWd$6+-icZnf97c;D*6$Ocbp<b<U?<ZWk
z$tI|N2WY=}J(F2iO$`*&m;IUhLS8zI9n1uO?@$JRe`Xv1`ixW1<%#mVBY3Vw)D2mD
z_v(#wpSvP|326_y<`e3Mcq2)}w;2_jqsCy~c3T;f#bBUzf7(Eg!HVtn+z?48C(e(T
z-hkew-gxI+dyb(5C6mesrW97@hn@+8r<V;sw@rK&Xk*5w<UoOB%1|6fp`%zJa2PeB
zBkjUFt!q$_w$oAvF2Ilpddf}GZjQ20AdKN8_6SqJjNyIkS?NuS-~Y0%(3kd>LO<X5
zE)4lRC>}u+n>9GBm!?|285tKzs~eL7i5aK1M@|y;6RjT1Xqc^07*KD6Z6B!7t6Z(q
z3?qu`+(Sr#R*rMoBPbzp^EKF!XpRql;~ul(LCypHN~al#7wN8>BTt;FR&7HR^D8_W
zxd$Q|MHPHlWHv?=c^qQDQP=yoo#M?y771ErTapaZ^$2m~9`NRoU#F9)3S@o+5|@;O
zKFj`)K8}44<E8LJ_Ws*B{$=U=kaPX_eSZ)e)?44hks_*gvu-fltNf75RL+BH$wB%G
zuZ@)xbQVTi4QC!@r{jtG5HgAUAZ``Z9?DHAgsVfL3jaC2NdjdBbGe5i54sQqK0DqJ
zK|eBEu7grYQlGFfXjx{S#We&YleEB2PEoos;*!UX%<apu^uCNI*`>`Qu@0r=L@PyZ
zo@|0LqF;Pkn18hfzWC7hb4e*3-oSX6dWq0!9Pw9rUpQ7!<^X%-KL0QD;7uO3o_Fuf
zzGNB?fxZnT@=(RAi7S~Xizh-zM`sshd0ejuW+uOyf#>abd!%T+hOp5xb}x~g4QI!K
z)3{yM&3_4d%GABFu*U7N`-PdFuU+(|QhQ3isB6N0ol)Z6AT>HD;@t0;cL2HfuFfZ2
z8r?roq}wgzJfs{x1a2eZQ%U$|$$MkXSc-^qs&a+CMv7<pvL4sKbJOE5;V0tvaOF^V
zWW8~9v?wcK=UC-1X(YX>weBb@A?N1vVL;Dn<yw8H<j+#Pf!1#~nC#^HV#%MmiFyhq
z<uA3CYQssS?g_Zl{Q}SHtWvI|rTigrgv*iHHv6ysMR|08Fen>%K4MQ!(kJK;uzbWa
zm9{Zt?p?Fl?ABKnzE??lb83y*<EM=2`3(e%#>23lK&w$8ThMziFkkQ`@nG-AfGfOM
zT+}C6&0WJcOS$Xc*YNZ+hFn1H@CLYSL0UgYjZ!^f#&GMpi8+Yc8FvF0ewMAfT@ZRo
zwWI#Qb_i_xnPpVzi8O}g(&Nj4*3PmU;_-83UH<~rQ?(rlH}Y=il@+J(tuGVyS%}Og
zboD1+_|!-U;nduB^+>iI6O2}M3fzzs6NFDRulyBO-;1!P8aAn_Ri5eKZ3?^Q@{CbT
z2wK<ZQ>FZ2qsl?$fzNv7@3Q(Ct7V=+pjXRswR(+cR|!&pZ1`<I7)5-7bN}MX&?=E|
z6Zs?ICYbUFD_8OqPKK9!UdkUT%I>{gpzu4%j-Rr~w`_HvIgSb5%JtJGv|CSnIBs7=
zR{6rRUbM(KZQq7s-T2czlsS@Qy>;=6Wa>{=N2Oy}!)TH9s70pf@GdlKT8y_WcuyFj
z6sY88&<uGbLuJO%n@EnSeEzb;(#OPS<J{A>i_QF@=RD|-G@a6F0bwW6LB<Kf0#xAq
zZ}V2fSfH>$0Xk{#woPh>i)8sa55fnupVrB4^y8Dr*p@wal)w5+6LvS?oKP<j=xgIP
zg}2q5poF1oIziF#R1yg?AjSCnLi1#Fs*1pxX-0gyilB>WCUyyL6j}vb&?_FZTH<^H
zmB#na;+ge9>8@WI5eTL|K$lguqlv~zO+L{sx&^tm?Hj8SolMiZ?25}Ub%h>AvDew@
zau132akQ=Vao>ohp**p$msk$aomuH?g%2XA9~Ks|7>*++GVj2Hlq3c(-CmT_F4b}1
zV&Bv$C5CvbqSZ93B4OYtoIFmB7fi{NNJ+gKERm2RpAfGoksy-zojfgwk|}MUQ&Zm6
zn5obzR13sm)PRj7nz~6HG$(&yRFV8<9wbJd;h)VT?@YN#R4AQ%p`;MJ`Y!6YB^kMe
z09!jcxi>DVNWqM@2sB$Pmb$%Wc9O`Z|NXNrY}~|lJN;Cv|CcMyJ)Cjoal3KioTE}{
zizOaX=j>6wX5XX*$LP@(uoosv(gWtN?iDMo2v@k{<kMjNX_4z<UB)*)1y4p**QzuR
zwszv2BJo4EFY#$wL%P5Nz_iP}!3-0CZ3?m;@st;^gt<3eTn1e_)KD;d8t&2znoC@I
z#?Lk6&9WUAv!SWPcH1LUJ-_I%xSF|gxJis1PFxfx6Rb%Pz24;dvqJlQ>6uvBpMfWz
zsqfp6Yyoa)j6%hF`Ydd$;>mjGER>2u_ImOxjEds#^_W@cafOa`@GRW8;>&t4_ZwD)
z0EXeNUz*exFlU?OhuSHyA0{%dwVL7O65Zg3=L^#!7vI!WB!pws(tHhEnWn#&C4}}U
za5}HxhB{S9S{JfLTumzK@w0{%j<@KMI-sL|@L2p(kd<T=J8@NN9qyluiypwp5^On*
ziC^+!%}u3Jrah2`e}af#_M!}W6-oV(qUklj<Nsio7X(^fh*X`gR7`v(TcTmnVb1W+
zHMgF!8oth5)L>a=$#@O?J^%e6@c?Z}ghhuf<26!b@;h|mfmofK&b0*R3y05lb1|A>
zNZ6e1uQqOhv0aZnGM_!Nr#&*bA59WIfkD=@q>}!yo40u)!Oz6l+I6=g+qmz|Dwa*L
zU+K!FMn%Q%)#fYu`Q<NjYn)iT*@hu0$~GKt5)Zm+xL5|nIbS?*3r#U}hOhUSH6t$K
zl>&M&U6~b_h69G}k3MmScA4}Gnj&Y<ab}q|_*(R52mG|<InH5)Vt!K-wU62G*5{kz
zTe8DM3<G!*oT<WZ;4X__f~lqbk!brd*7DOuif}7#1V$08Si?eYcs;DYX{vQS2#%-p
zp?uu5<!6dVVV~Rt)CVF}+M^t#T5Tf(O4?ApK52bbc|{>w$gsDXNZHw45OeT*;krA@
z_0pN%^JTGK`8+P9Q>p6lVLbGdl)r@OO|dIPo>Rss_Nd@VCleiwpKSU~wd8ni+BWbq
zas7P<CQl5u`t-WcI(0>l5;<WXf{9P#+EAJ{+H((bJgQIWgR|dWW%OB^3(BO}(%e+L
zaek{gYTThO_$h0lJ>Wz>)l@=V3ewl2=u<g=KFkTyZKZY8y(9L`w}tg^Wm(tNXKF69
zg<d;Yb_z221`<5+ViWWf5)^2Q-xQb2T9?wNneN{VFXeK*Y9_7L8hw0!Q&UNXAhr+N
zjrAKT)OQv|QglZHeBl2faVyW_@r-DCTJ1DV7{Y#b5SdzUmmK#iJ=H*re|!glRrNAi
z4Lk$p5?)}Y`>I;*j~X*Gkw5ME@;3dO;XAAwMWaN20;TyXa^)z09HqIcAnQjhqt;iR
z^gKg2t{WnGuMb@a4~hOr?d5B-LpU!)L)wod?79%#v8l6Qt(!A+ALTB%hgN^G_B^pS
z4u@zxx{p-sS`gB)8M2UvM>P2WUDbun*w=UMWe}KEI2d=sD!_ED%=?=@g4eLd>89lV
zECnzRgBHIZq7>^a^MI$gIC1mxp&b*z9|RYFJz7<NB7;udH|_cOat3ln<gN1d1INxo
zJjdUSOJ{d8UW1GZMG4BMiv#B#)w9hM`cHHwrpXI?^yceaNeHJZ7c9y9x%_As3%cM%
z7YyHK-K6#4zTi}A<ia!_)VU>s8Q=w4RXQF@W7XF)W7pg;RtmeI+>acBMILpHszmXQ
zXZC_#9(^6f1BiU{x}Z@H&w`~Medw<+Qv}M>kUTT)N|Znal5(CH`R$P$20!`POoH(^
zhNIJ`#l$hRoAnREBJM?t*?!*H(P!rLBdoFPtydN-;2jLLX_x2o@uV7IYu(TYuC`ql
z#v2Ar3cLin27TVgO4uVzR$`mH<9mGP+l9I_eMEM#n{u$PDeZK2UC`n4ZRqyKRabCw
zX5ipGS)4E*jC(m>>XFr{mZPTs$b*Don769<vF^=WysAV(_Qgj^WOaoC3WUOKMCM^5
z-|~E}bsj-)OH&rMGE^@UWVazKThF%wsMy-=8w}g;(03bxY!rBBk2-b7BZBb@U`Za@
z2oorOPex)B2+I_05PVz>^2U!*_D#+?vZ6H!vg{hu_357s7S{eYREts(?;@U{&r>ha
z2^)3XnnzN&8uA_gnxs89yFFVUtgcWQ^q6W%zQVOO`4!xRBGPJ*{fw@e)iYb1FQO?n
zAs9I7xppq;5hTKn9E^q{Wt6u;^T`Zf)~?1l6uXyQ0nr#Anv8%|-Z_sv=Ew%+p!eNE
zIEdt6343~hps0r~oZ!5~7`L2nj6y5KnADD&IdB3wx&S(yW*VxG^B~YT%(c5(LD1+E
z6$yL$+ZB|m9@IX;MeD_HOAd?D2*1h81^RHe4bbPo#zf9y@V4XUu$M@G&)_c6|DNGq
zvPUXs8RK2j!_SPJqh9jEV~thAd0}ENB^#4na>H+pI==D3#a;q$pkE5p*TVE+Y|EgB
z=L9w4jKVH!mgE1K*@okIKpEtIkWljPgBv;`x91PX8p`@M)QC(*;SfUUW6B@a4jpw|
zv4MOEcmp2c@FKHsLJ9FHDaZofLrY<AQ@uAkLz#+?lfeHRjz2_4PTNI+d&v+v><}43
zOfe`Co4iFK7epDIibXycn11X`xy_HBq^}YTeq&NQIvk%Qo<K9o0Ql<(g(D^LGr(cg
zI-W~B!F;5iq>X;Y{Wwu+rDl}#^I+wWS-r)uS+~XLfqX8sN$Ds-d{t2TA?N2M`=NUC
zHio1VM<i_RO7ItMuWv(_JJIpL*xRTKgMIO^mqZ>ox8I@*F=v#=!I2+xXB;O;0%s41
z)7T-^GuzBVg?}57&p9)YZ=Ey7&Ji<^9~1<LtV_icG)4vD$wDa05~?ICVPrJv3`3sZ
zVK1pY2yT17H$%BZ8Tv|o%=<vQO^fcH<%{IZ1>dGT9=3`YRj&M6OO2P5>Nfl$nUkY}
zxN~%HSJrg1&D06qtJLE2>ZBSc6s#AxD#Cf7%?89spsPpo=@zI5(dqVhvcQl_DMxwM
zcZMS}>(zS5u|qWLKlGxU2gDP;j>e&LQlteXIScU9Xc;{h?H~?uIn(en%}_-Nv>;x#
z>wRrUx-=b%c1GEzX~Dg$)q|@XQtj4wVCY>CPv}TIqUeH^X=LRS{}WHtql_*{kyPn0
zT5#lGHhn{q;rddc)Y{3ERN0jTTDSw6{D3BLT79u(&_Wz=ddGS2SfkYXDgiVlfEL6?
z3XY0_rVOQ4Qe$fUIPSzsIRel^{?~#d4%z9OPgDoq-~?BZKk}_PM%4PM0GkeACjo2*
zfUOR&GXeH*fDK$d0k94K5+^{s0C6N%S_0yAfVco4UIvgYKt})(0h9%hE<k!fH#tBz
zYx1rBD*z1wv;feAe5(O)*DeQY{Q%$?U`4IZ26T@HbQukFNdsK^k?P=)3b;HY!L?%*
z5C=w41&C+?B4vO`96&sPm<}M4o#6WN1)vf@6!<=WfF2zHQ8BK>N<Kh5mk6|w1&Ff%
z;+lYX79a+EuRlPKXMmUoAkqe~MF6$|z|IBOz<5RfjtdYW14PgO5ko@ILIfa21&DnB
z#+IJo>IaNV6cEV;L{tHhVt~yBu(bg;Ft>idSUQ1T{!Sblz)l0$OaNO0U;}gek^)de
z0;yR=NHZONu7n)#SLOB83xVd(cCsVD3y~cM7o*~v26!D8<nP8j2Hb~yWLu+8iG;|>
z@P&G$Oz}L;j$zk`e7a3d+3tH5;d1bwdg2D4X8mn^p&rKg;bqgqyX9vT*+;mMWwT_v
z@n`7qZ3&^bl(vl8t=}rKD+hlmVqhQUMxo8J=*FI5PPfT~o>5w4t96}un{KT0j!Ri_
zT}BOm#>B79ewroUR!fP=DAgKgjJINHo3G<-Ri?qrHebb&%maqI2<=vQj{8Lx{4bu*
zdEbO*A_M!UxM}o^nv`eONoJ5e7r2rBaQzB`p|#^$@|z**piV>TjqRK?^Nfz?oMF8m
zx<+N@Jqao-@~d8T{YGc_La~iGgK@~n`9Rb15&h2*SyrcWdGX6Q+&GpXamX*4;bO3*
zxA!ToF}bX>EWv)g3U`_*vg^EXDpxGmA90^2z`&1FkDEcearcYUDwIkX@f2}GXZt8b
z=-GbX<8&)RhUP{JwaDP4SO}S9o{<4m1ox;bf-@HUFHZgNRb<IJB`xx%;7MjR+--OC
zO!JZORRo|-Aihn)D)oR7(Dj+-t*|X*Ko^xj<O;C($kBp;o|K3B{`Q0fsQO==JCdYu
zdD=z7LrFkeGMX15AZ{;}0|T@P!GbEoE397Y+JF*@JCUCinTW{OzPFu0VutI!R^N*2
z!+evYJ>@w9#9H3>M$}zDk5auB#?*o9g6k5$YvYipo6QMtb6BESvRIPrVT~7qZ@?(v
zuiy#(EdJapO>UQ#u)37GuXWjVA$3W0qvCCs_J6`jp$VQlV7)0+$=Hh5#4V=Yq!~J*
zI-@#uZWHf%$u$d)2n<LK^cZ%ZrjimUIja!tbM$bla`nxO5$;#;y1+j6ZwcS?9NWV*
zTIjqp%t&QFtWv&SH~L*46OS^3*leu>)1+j(-gtm>KX6UB%25&GpiDH>V7napJYElT
zn$g$;{M*mF>!C?A{{+hw>7RETka*fHLyM)~_F&CG-A}o~=VZoqbItg$_xd8sW{L%V
z*u`RBe#VI5$PKR9<zgQvrZ6q!lnX}KrDvZaMxo6x?KX2^PB)2#R{M4FzbHD(s5X}%
z4C7kdHNlFzyA^kb;w@U--L(`6UL1<MdvFV`#l2{8DK0lR=j3eOXJ$Y9liiv9X3a7M
zVU_vmLrD&3Ip(uJnDCSar%#k`Te^{Y4`pLoWsFKDIZOp-f1N_8&14T<n&@E~<%R3C
zT{KOym1iI4Dblm(7-aNshwQrYS%Y&Q*y-AJ&DyOv<qmWof8Qj$x{<wRvW$9!IvY>%
zqw}i|Iozm_R35TEb{ix!+bxT_)vz?cxo!H`WEi9;%t*P3N&T2;r6LMzE6%!*U_*3K
z;@?UYx7qWRY@^r9>S>fH$?!BSX}=1d68usd+u5FRj?Q}^1!+E@);6|gL(2Q9)LVL>
z3Ef2!AnC}F9ujxpdYRD<XV0Y<Iz6dl*4R#J&nb>%ILT|4)lO*7zZ61oKyOz1$hd4-
zgWNfZVU{4M0q*ski~~JSO!o%5;R%=pVs>-z-$>3iZ;$7<6OeNyZ=DslhveF4u3>Y1
zaYUAz#QdNf<!^@R`D+O8K=ng!Q9Jr|N;_FL-#u_8ww)-O_nyjPY8`7T3mLn?ED)A0
z6S<G>2D{BZ5VhuKRG-cbie^oQT%X<n=Vh}G`Oe7!s`G#ds$*s;cDH3NQmf>t%_KL-
zO9I+7g1r7$Zt^|WxybjEK~$sD2<DRU%?v+Y4$YLZ$FrMYA8bkt-^(*z5Uj1P@jmJ6
zs_WA-G%$=a?b)bXa1uiI_F%Cv88L)_RqH@LIW|-`LZea#9u52Hw2$q;s!?0QXJ(U8
zy9`yhDmUnuLu~d>ggd&Z&}f}~Qks5?yb{Y=5nUQT^h=@bH*`%n(QrylyLKJlG}s{b
z`O6ADYyHbjUW#Ep9pONTveF$@p1Vieb}Ne<<R^Lz%k(v+s~AJWTH03&@YhEme~fDu
zFdKrH26&7<(nUWz_hl{RIbms{_y1PVW!f5%eHD?$9iCud16cn0onsf%hD3sQpKw({
z*N_^A%i=p+o}o?9vh}f4jU3_iZL`5IoK2hWoV#pR1r$~}5qHJLgsakbH0<Z@gsW~X
zhF{`%gj{4p2n=@PEQ)6_-FlOPaZU7XkPW~3Pz6p=e#XVQo{;KXVNxP9NK2zl(fW2Q
zQ5nNJ%3!`A<+rV>gx0Uba{F)syBhpl9&y*D#?sVtR#!y5AAo)a0u&Oi2eCHc)yQPz
zHKHkz&b8`)R<|OlSv;(we8IJ=D<b3cr{M8VPRlFZ`BATV``r>{R<C*zQa2pM)vpMD
zn}&5n1sF3BOX08PiPl*B;LbG<v0+(ye31EUyO3Pv&Z}9)6IicHy75DobXG=5yu#q1
zux(n7b5?PQc17{4|F`z&P4XKTmBzU?6R8^ZdOGyDqwI)bt_?*R3hOiJxJrK`?y6V$
z#(ueb3cwP#68$&9T^i8=Ij`h|+jvXt_7;}uJ_q-IZfReOHB7e)-!e@fwVC7YMF1DJ
zffSDVYdFu5rf~=-bm9KndfUOKA>Pc!A&h~RY=*}|r`IPS+v1bDk=g;I9?V(Y4$N8>
zQIye!yZp(OMb%5uJOjO|4Nz@ZUZb6Eha!Nr=SnlB6Tx%(Z}-IEZvvV#$A;d#5D)o^
zq_0IA+d3(MOTHLq40R?^{s8<HcxInu05r<hv?<|@!_e?0kWR76owi`X7q6Ytz$wIX
z(Wq`cGb)8((O-xH4PDbLby3(X^<NFn<Z)k4Z$+_k^P-<wPIIq!h-m$$T%TGsR&0|-
zfK3x5pbblZNQy?3l;u~s<A%gxR#jN23}vrzFB1`2dqPxWik@ug+vjTc)7r@=6w6k_
z@m|c_#`({f?c<+A8j$PH4VzQJHB2cRcGXg60V2jdsrJFJcD!@5E}tqT3fQX?t^)MU
zl674u;6<$Hewbw+{;XRBIwIJ;`K*%Iv34hX8EPf{8{5R|+y8j0MMmU9mhMfK?n9>M
ztx&n>yGKs6Y*$$ja$lKvvr?LUB65f{-9GB(c$K}j_;D|L5OcJm;KIp=-LrZcM<~KL
zNoQ+f+-9eUlKh&I{A&H8y1Ix@WE$Cy?0Uj1u~i|3ZA|v~mqQBMuq@*jhckK3A2M4d
zC)=VYgTx<K7(BSta{9GOuNQ1v*k~NHHint`%8`$`97KsvezcfC(xH>dmVYF4K9bl^
zae{m!!HIlW>;lN;?qLGq!^X|CIXjtWbbBW)=5tJIDBkmYXqydjA?+<L9MgQT2Wubu
z)>;^~-H`EDjLA04&sUB%HO;b0bf)>jV$u<G&BGAcMwx#?w?U4#8w0y6GSu$Y*!tUZ
zvr!-Mn@4JyrVHwMKkK%Ghxhf2N|?TR6EwFhm32(Ds3La#3MI9F!Z4Znc$k)$JL2HR
z>MwndyxDCn;+E_X)ljX~!k2ZMwp8br8^<Riq7ijQLAP4;sf%xeGGX&jWIIj}At=-O
z=nu)0gItPv7T1T>rVF3BuerBjiT<c5?$PuCw!#HP!YS?xRu7Qm-0LE1qj(M+8o@$k
zQ}=*aYsyxcERat+m)eRu=f`gWENY}9$-_Zo9FyD=%ecxnvOWo16D!MlbUt~5GFg0y
zhbmm=;}%MMw#!_AB7$7I-)UcB7RRFCJ}#wA=EQtjYvH+!W2IQHw+wc2$k?tqqkfq3
zL|tz*M!I*<>xDNY^tKsCO0XB)_FL1rT=v9xG3&(4U3LrxIPmvrt+8HCq@l|$-}K7+
zi4j}&V92grsE5TPoaX*HUG21aPM<jNi~im^kCp|q8)(TcA)oZ>1-ccbn`{YM3c%~?
zy@NfJ#_OUlz7%o8>FSK2`^H{JE==H_O5`3#<i24N3nIJ2y)5a%2U`Xq9ITG_iuef*
zGjEx|KDKn>g1^?nU9492`Q43}g>)f-ooW#Q%O|~2cl2fjuZ;Q@wa7otFwDMp;jlD|
z!vj{bdbyt6>ee?u=q?-fD*7>hejc!LBkR^)S?l}ehy1X-iMqHP1Q30b(5w9Ic(L1c
ziu6u(vh!MUvSf9ExONs`7S#oyIBLR@IB)2I={yTFO9((YZSFyMJ{>UY2|ysPOQ3#5
ze<l{N0q`qamjji5MxJddq`XJjqn&a$*oxg-30SLGe3+gE7+c&hd>QP9iC-n^<9x;y
za5P1tKV{x73LwaCs12FF)7y@H<rT0ql}mNI!*Jg0MrB(b-D$R=k6KC!K(|dhvq-C2
zZl$VS4bn@Z;em@a>I@wDG;O^(w-po~r{o_6w|M3!-)6oQ1-2Cr23v}MO8CXF6mKjf
zHP*wI#W-u2Ym-jzYaNvEi8JM>w??!iub>Y>Ong)7CYxS#S7B>SO&Or#njM+5T&#t6
z50jl?gA>hRY6dt<+%6X#d+Bn8Yq5y=xEgC1f(tLp%%`Bb5KVF2#<rOKOZnUGMAMhy
ztkF9qj``k?t{*dw^S^Qt%gAy$SZPh(-fi=6^UKdqi*rrzyk%q)O}+q04lSpcvkkz#
z&@94JBNs>V_a*OBk0~;%K)!>6$C2urg!P*Q5$<z!#ka@wH7j4bGm6U^lBZE-Hja5I
zw>-Ve;BhQL^h8br#$DI?41an$tLuQYO!F(|1njJm6iHRRF)C{Y0<(|NhS{3X@TF9g
z7&~*5aM!PyO)jN!Deo3dj01)yneGY@ue%D>^Fzlqaq))wH*7zxazrOa4>L9tY1x8T
z=WeOZq_r`;B5)ySdavdh|5`Kx6P}3ScKyCvYB~VGa7%t)pqa2NRSe6bc?7Ynmy%;s
zN|6muVRFB`PLx7sAID$CN@s3*uTsyYYSAp{@=BHRJN{OTN|it$v}sT%B3Jn>)v8X_
zR`LO_nBZEg7^6yW6=yErJvdI0UMiQ-*erPtLrl-N*Q%JPo>dXBTyY!bFb1<+1BMY!
zkqp#`5-@eebc+YJXptaxrf}97k|6t~pw{VSAUvlq)|qA?A*YaBMsT5HGP!MoxUjml
z346^gamY2&dNnLb$hCBPT`UQ*)fame_6Y=v!APa49?r5WFxIIm&Z;YLhp7(El0NWk
zOv2kq*Mvs8o_z%S6m1o!A$DV84~l{?rp!^>9j*wD3>SSW`^4*-V!>-;s1LG_DCZ2N
z+lKoe)^(^^)II2M*R_82LMw@isDJ5|rXv*5-0i(r6!EU24F=#tcaTi^gg)u3|Ci@`
zGR~ET0<2o9_NB4{JPrA=SrH9<tgA)nZ2S+i*gv?$Cv6{w1tApJ7eFtG(6Dvb@0hO0
zw1PE2zLiA85`l(3Z8^-J2W{U9hPFxf+($gnwTC1V9Jwg?v0Z0f@W6X*h$fzUp?c&#
zW@$8l3D0#TH*&Au%J|N0-VxEujzSplP8-&yy9kVvAZ2KKyi`iwAwy{P1@L~$0lEGC
zTmbUwwIq4o<A>?`PVm3jf(m4)5OoJV*Umr%HPkJJV(*RF1qv3RKn`k66@<L%odfSp
zBf{2$QlUWSe*i6#wDlG0{*8R^t<nSPJ_U8B|NmhBi%qCNf?7$T2lG3C_DzQNorVfK
zPpEYWYSo2WSD}6Fyr5tJ3RIz>0}4+5_ZWc!6DWB4A3!~vdZB;_dUOmS$SeOI^xR5N
zYb5l5WY9}>`u|cnp<oyavYeq{4hk5dpyYq>zsDjJ2tvUD6d3;RF$)EBP>}XN_}}9<
z6!1cU3H0vnSE0fKD)^x1UxPj!r*SCw{~>NdpIhr6==lwy!V}up?+_|-p?CL;$<=~I
zejB_!BPshYF>K=b9+T@&0>!QJZdh3CB_6V9#={Zt>+^zS0>Kp24cM<R>{FCXDf>zA
z7)QD(nNnd;U=)(zF-H?AKrgBu?UnS*-luTh^NGIwJt=$dP014qhM+(j3g-R?|9e1d
z^7JS}0h`e1tJf%0jH|l78@oU)<4|D_wYWlEJO9$&Z}CD!jWE>h|2|o&t}9!vN#kNm
z3T)3J^zElNIeUcQGuqZ|3TsZD-J0awhYh!+@!DR6>DP1N(f#{gg{i(MRabmMAtg`)
z!~l&@7!X1?#Z|XpfH~>AR~2k@P!(=;UKMJzQ-#EwlhDUxjiG;5g$NKn=_NhHt6O|r
zNMeADw#f(#`J$VyJ(~LqIci_Lq@uf`o#Uz+hehy7#zAKH{3A(o!>H{%`KXG99?9)J
z-i{FkRcK;Qe6w8}BXZeW^p6ObstJ96%ad{a6Iuh6Pp@FM0|tw{=DvpzsS0s&9KF1Z
zyCRje-Uth^xPQH9ni(z~m*Rh?ensRvU_lzmQP~c^5fnH+mDSM7hm_=qf~>Q<Y{sh^
zv9jIn!fvKuo%<f)jNCCpm8PhiR~~VVT;dC}bq;CU4#;I8%!eostAc1X!Xv#HhXQTK
z*)Xly$=fY%X#Rh)k-W0Gx1q}x+fK3zvw|BDiq8azdIJv8FMC%IDTRzp)7ZZ)%N<(Z
z5c+=o7aAchQ8%M%jVi*KF=;99{g(xKI(xk7v{Tn+#Y=^Xc8nK8wzI5`m`L>OyGQk0
z!$pOJJlGDyHS~nw=Mgk<-(Kc6%Jxk@#x5r<U<rx!xrXrdkY%G8RdApg(W;}xw$H1p
z0CB5X8om33mGz;<`17Ulg-xH=*=*>=YANE@zeA$EanhaMqzhLH>g^Ug1Fw(`7m6Ly
zb;SC#&P{1H7-$nuCH{XSCc%aPZB&6oVfy370IKv*Xj92hJ<*Jm)@c$#P_txKY)4V$
z>Ja?9Mr*voWU60wq_{wiRL$rX^r!sf`GR=QzG{_iIwQh}2M4;k6q*dv?JkaQxu&rG
z@cyT=UN`ff%Od(|1~a9-D_!ukab+ZW)k-Q#`%o%EOGi>4AJG}wnlYp9d1v!C{V3+&
zObx1fq+dFXj?G$`2V%MsnDJa|D+#T><emJ|NvgFCS6YNk_g@*ykp*v3vskbj$>>9n
zjE6u`5-d+OEGZ(VV@PsFL!WITPD~3-`FZRoEvE}i>MFCB%9u}u4lx$^_d8HkZx*N9
z93^u-_CwujM4UHMvDn%i!+z92|2$6E+D<!=YueCyb(R87j19WKBW}@&rL)&zEWsl<
zb*xf3wNri$Qkfc(y1@OyL$pk$M<tY2iW5_HVQk9Wk~H5L-k5TOgTd)(VhIk}*X2@R
zs=6&XP@H07enhUAoupa%b5p751}(<^rV*7W;wcI%-j*9mU*mg8(}PyZcCDS=P6`s0
zazLQ@ZEcpaiXdCLw-&E4I!#fT<Rq+0C+-DS>^?(CeOdqh*R4odGfTs&VHK{VtlF$X
zG15G96-m&z*fh<u>^7@GIo0!tNax98hOU{SK3!+E&sakkXkDIT*0PFtPzIeoHY0;e
z?n0M-i(N)4b}nQwo$))BzoLxl*w$v2VoFTu*<Sb<7E_!<Ul(ri(pmM`)Uxd{$e&Za
z=~fh;L}q%lrmSfC!J=&nbV?LLA*_@(`~HN>q7&68_ZLOKBtCTiFR^|>d{`>enNFql
zYNc*vlU_j8oJq56vGKQRMd3vu4>-oWvZnWdin;D)lj1JVFrn|4vZ;aNx5~v^T)gGC
zh9!r8@%yuW+txU6gA5l8>U478*A`GhY&ms2e_v#bw0Tvaqnv3H^*MTccb7Fr^7~Ct
zr)G@!{F~QVA^@>l-83xhuaH2IV=((~6=(eoIJpG}XYBy^_;TUxwkN`Db+0~!e-r}6
z=OOcd#RLi|gB$-+36xTX-2C-(mJ~%I`i-@n<O|1E3FssEhi{}a-OJ0{A88mtirTGP
z*z3Vdx~~4USA}=6#M}^?75gm!ags<pE4zvgsQkDbsL)+#{#?O1D?9Q%*}iCWG@GXf
zQ~L>Hl`79tj_DQYtSd8AGhWgjw7{=Eh{sD%ygpyYt)tvHJ8LC0MZQz=XCm?3eQ*Ps
z-Ex?yn@t7Mt5*r*Sq_FQlee?~qC-7bNl7`{giBu6{?_0}rtESNR(`I;uuoOeZ3uoT
zk5o1pkhy;cDa+L5K<B6n_8JpH?~sze69?oADf?5BDl6xe(9EZO^7@kc3Gcl}xRKXZ
zu>U~7{KrwcWtw&m!S#T^@nHZ3v8@55nCP)lgfhvgaOq&Z<u%eM<`uN&9yPMjtkK~o
z65rzb=(swz;YpMqDVz^E@3^7ba@&$~Ks-loK|k$&ZiYq@oY&~INLV3i8$q`qtN<$O
z#5nOc2C;Vr!FLAHckfS(w_ivCjs{)H+8vneZ<{KT4yzlk)|8s#D6zy2&T4k5_N)H*
z_dljI<~D{{m*lN3bdt?ZA>DJ=&2EIJiMxp-XRS|eyLq86LxaSI>kej>ofP(NUcqPQ
zs&xY!h@PPw!s{EL&JFj3W0!f+lBJC>kQo1l?bAjV2zlMT$7knUIxg%yF#JRNsNCJ0
zig+1`Cl=6uaPmUJv4cLY{WzEBJTN2$?_AP(PQ}f0Of)=Y-q9C{>rY83pz%CCI>!ww
z?B*QD85V!#mmmIhlHZ5p^o>8;F@A7VmFEi1lcI>-aOR$ErBt<H&<o)P@k{=sI5&W-
z0Vgo;$rYDfrjxDOiF%Fs9g?@&iKs5x(|ZH%x#j?EdO$#jULVap>BHtLnuuo)l6c!v
zAKpFE!)zC7Zbxe`_dOr+u@Ahgk7uvVv?0fEBl@uKW{69!D92`_n$W%=44!C|S<)ej
z@*NmiOJu~X;t>AlfgtR>D4_4dG~;U8v0$T&-9B0zwt3Gf=chU0ZUg*R3MN8_s7#+<
zXVl}@gA!9nGHHJbkQ?<x>pdA#=%?O<T~lSFTg5L0a8H{!6+Vqc<$fw+xusoUucKDu
z(j@e&P$ts<PLJqXUP^jRqsFwyrADfMu7J!el7M4!JQ{4YUmjs}Rt^vF<HFJW(~h#}
z%NF91JASv74)|)~>#ld2*J!0i`0d-31x?NGWcU`J8tS4AH;j6U+>^VlR69<9=q|=)
z4}8k%pZ4$WUAczQexcC86oY$j@{bEOUi-_JXAnKs)(IzIx+lT=?eGGEK}xmNz0>Zz
zHWgGm+!?Sm#gB16C2oVw_XxE2K?6F4{p8GjhDL~qD{_%-wrdWl9;T$RZtq1L%FObx
zreH7Ls4m`c08RI~QkTnG;kN*hA&{B~M)d0uV~GD>AGpT}Ei}RYXB1oNE=#kNdy@Xb
zu6@u~FhO+OKiyE5O(u>_LyV8!UlFoiln0W!77@k~(+(&&P0dI)M{Mk3_z9`f!MsPh
z)j7YZd`i41X3IC}!8dAxCxT?yS?3N-^R+X1SD=sDezVWWdE?WZeqbr8st}e7J+bsG
z^9JAFhn~Kb+gp6%HGZQnZ95LKzxlgZw^`XU0PQAR;@4n{z&*c_nWD8#^UHWI1n>z3
z;)TyBKI5gTRQCnlz@L!T)PrBG7-vkksz5MgP1S974K~d?Xqc|`n|{WUq)xhDxd*|f
zs`5`oC-|xqCMTkE<KHIN-^A~dVD<md71k~)$(rW0qDP2dB_;k_P!eCOz4t6!MsmVh
zJ~~6p^BE<#+l})%4?y7a3tF`NHWG9EIwU5%(){Y_d(LN8YHiN`@Dsxo^J+QWzXkKA
z=L2`Y;Mms@fe{}R-tGb6kiSA*7DgUE^i*DcrM;9F@Iq~;Ig#s!Ig(+|U5(o?(Zx%`
z$UfNkE1>j1lG{1qgp>j37@&g&x^AuuU7q{E7-6JKDLUtpO*;3sMk4pRCUoB9bCI<~
z;-v2qw(wy9;*_81jfVxrb*L9SBT-it2pY9x^=k#zdbjrJT#yac_;~f|ZMJUPU9h#C
z2Ov9o-}kCqh_&sD0zKdgR5u-O14cR#y8ls9doKAQbl*7s`F!ES-xqM<7f$Zo3IzCi
z_0n7zUW)dtk8FN5I>&l(&AVLrH`^JttaTygeGnJ^#r=!kg`0of{92Qmx>wT$4P){J
zzTnpY>mucD6hzs&3)E}c2WUY4d$%CRDAD&z3sd}`yFZY$0yxbw*$I{JheAlYy*cL7
zVN7o6Leu>f#_q>9^nC-;EFuE0WL48x0D?vh0gPjZEF<Y?CjW{<mi&*mJpiIS?K|TV
zZ&}^SmuVN&KTkRl4j$RU9=qQ?mKg58c<m<FFf3&8+RL6lHQ?K8N+c3IG^9eqiGaHX
zwd8?h5Y8QRbq_%0I#?FW<^`!gP&93D*4deMB<MEZ1xq^pwc<anoozHUn$oceOBu<S
zo?kxz5BQ|tP^ua9`j{59%8IBTJ&a06T*L_c5cuIUN+)8;m=3tQ<Z9}k(8El7X6i*V
zrAw&RgltwGa0wb!`0t^W-zE0l5#t-gK})}Ap7>R52ksWO+KXJx_T`p}xlS%X=MI;N
zVI?^DE8GB|&sqL^r{3p<1E-VSq<aomiSWh0<uFtD0PU))0eeEnmx(7u^Kv!GYyd%(
zj(|O$<EupGf+e}BcrgIQ-Rb@88V8bpGs9U#g6bE{r@ug~$J}7{0JT1IQ&E9kI~ciu
zxb2@8Bm(DlaP<DueF~=B0{eEbr2*AwK@Y);Qx6Y}%%)`hhyJ%!j+;xEK7C7lBX!A*
z=u|(%gpS+xP9njlC$M_{UE3A42`2qhPgJ#!NWFU9MB8>-z_#;~Ut1<mkwB*>lTgEM
zbLTbwQ0D7lel(vE{*p`KKLVkfPs5xWo&k8#-iKKT_x@Vj-A<$;my^L!-3FHsIo$(4
zz{-yiu?8aX2Z)KtRbtn}tlZshdBW)sH^873C$Pbh=G9_J_Hp!A++7bBGt01=r$bfV
z>8gPEO7m6Vbw2IGXot#evPae){R!WS8liPe9?O)rxIwn<8(s?NoSt1ZG7l_}5qQ08
zbel|cm=uJ020qP0u6-ctWqGImd1ead_A<V$^N!{{*@I?sUmL>z5~OdFip<;3Ot<vT
zT+7LGg0`l9bcUOC_@_w*@Nu3G%dc?8ZqKXN1<!As{vX>g=kz<K<^J<=O~4vJf&Wtw
z{s#8zth@BBlNk=v<;V;M&g&osj%c{p^PgU+cdaAO#2_p>{O9{V+;>?0zv9|$jFL#J
zH19Z}V=otvMnaKB=cQp51aDYn-MIJ$sqY9ozXOF_pO@cpT;tyH>zjd&$!`iLh<Af(
zr98P$$1~9FPN%-{JRBcc754N!3Hlv~OV@l13Wv|!Pe90e)iC=ZPHO*eB-r6izitD7
z?D_DgPc;Z`d0!2o^HsqtL7e3DUukf_n|9q+9unrmd>_%<2j`hQRLn>AQ1;jKUh{WL
z=fNOE@_*JLU*GJV*Yn_2A8JFB-|V(i-h~9tdSIs>oI)Gl47anzmn8orBl~RTVX-~<
z9do9O8_3s<vb&_;WH|{RdF*?UANJG@jEEvLZ?BvS+kE$j5p(At{ihQ|HKu=)?D8_E
zHhg6lln8%-g5oyVQ<J}dvyS*0{{`9LiViH$*q&lyJWhFaJ*GZLCN5gOaW#*5P~Af=
za~ewRcUXGgcN#*ycCQEA59z@bxz!7i3;Z_dXY$Hf`xcg0b&VI)3{Q~IcX@vTxH(_Q
zz7Ly|3)gspa3}%@bboaGl1v;5-zYS~BP9e_)ws>T7SZ3f?k{Uysu_rS^x8X0JcZXG
z6{&qF^!ym1A)Gu=wuf)x%ET_n8v8kka#7w=)pmJ^<4@xaACKUXz^t2zWMi1BW^;bF
zk~u5Gp{qXg9y7R!#pE*|J1c!v+*rnJ-HG|s-HodddDGS3z0=*(gHypC*Dg%oYT+|U
z$M9LoJuBj~RL6)}6Gr~nJ4qk&Caf{66Y11e$;1uRlPLdmy`Tg=)85J+0H4I~X<L2s
zpJ#|Yo?+S2{=p{K-5-P@$(*5ZG5xaY`Y!sh1_O!`iK&rs)GyFvT0<QtWFMS_W}-k>
zTf}6a&15iBm&tL60Qjl!7cFZy`+$nuC>OD3>{)mGS(k_}iaIa2jX5$gp^$RWnA4te
zCk}WXV~!5Wl1LOiOy$2BGxXlCHvgghm=x&|Zjkms@cAIM>Qb=dZ~py6?UkT%56szz
z%6zRE^ICNa{^%^rWjjb0cw5ZGS)AP)XrF^-GFw-`F^<IUolFECLf`b9sXW^9XL_Jx
z_ZEotH>EM(dnUzLlkEEn-gYs$L}2&kI%OpQN50zsbV$b<7oHNG3YdbQlAfXoOx?U;
z_B;g!%_HNBkln#n=b;OSh)gpZY^SnZE2i~}Y0}l!Utu(6UoYledCCctV<oEkE(N6A
z{8+5LTI|`a4w^LVp(H$8sKYS1{K)S8g9uD<2SVHIW#yZo{8L2zRq&6%pPZ&mT4!jG
zz2N6Y9WDK0IET<$Cy}hR-~GVRh6Zvz1alxMM<35y=fa0>1l*5h&Zw&0Tx?!yjw_RU
zwH*yZ_x;1n0JuzoiEd@FZaG*q?(G&+>2P9uVh?;otG7l+zr>d5=K`DQcLh6F84h!-
z^CkF}iBZBgl^ocmhzc?(Mk?EEg87|A*{1AqW~P9$Tzk1`<znS_aJgx+556luOov;z
z8HfG*m<sbxgjqs#8dH7R4Q^@nrV^ZF2R2;t(cy>VFRL)d7{_RH6neC)5O5Q`5x5a_
z5`I*9iBH~|yT}b%7rw9yNfvJbCkS1`HR<jn+f;W@v?WY!!peB^Uj}cUz<+V0^bStB
zhsWwe4w1Sv?|nkPrflhf{T@$BfD92fz-5rqwhdOEk_!R6!Ox4`b%sp;$hoC{$EDA?
zVUr2X?4_yWQ%71v9P6VGLA$gKjy-vTAz8wJ<*Fouw=fe!2Ni7Km$?T{<sw6jzF|TY
zZkbfgq6F_U;ZckK_hw{><~fRpth{wT(ka?P=thW89lb<g-)1i!Bp{^JEGVCn90hdz
zL@gov1ax{)&xhS%hmYHK-X;;iwSkj^f4^fck&e4u7sP3sIo-4VDQGB|WuB^nM12&j
z8r(y{JQJzR9U?E3k7pAlLUbfSf8aw;2-j4{hGb)Ij5gEXL7pGsK{xaLxSkY9=E5ow
z`CKVMblr{VPU9~+6ALB_p$xZ2^6jgZ0JKpYA#Wid_2%@VUpkm!uVZ`&xqv&XBfE#A
z*bWS~pA3UBsEG;*x+j?T!w|+Kwk;AzF!|*}5B34TFXU)#26N|%Qp;lrQir*h7lsZn
z@CgaP4I>0SGnZhsjUY7_LUOT-PQOcz<>K2TCWmRuD>_d+a$kRsEJj9r%Ef^ud*WVj
zGO?Rx!g5dgT<C*lxFxy8m*E?)6rJZrgIZA@U7cgb@j#7X^G1}R*#t#$Qi6RXlnpT;
zyFLT!LTRyqYEFh3R$+dDL-0-t4M$&Chfhs1x~dS2{EyWfAnP};uoonfJ$}eGHC+Pk
z%0Ry3cheQiDT3G_b7#bFhJ(pOH+yt_I*OEGYi8=L!+71hMf|WS$j2%$1R_3kY9<8!
zDx-hQ5Rg1hz?@`xq*~)-S|iEgJEM6>{5eV4(PT#IokLnqL5dp?EphbjzF=O&4P8Nl
z!3BHNK#viHo+kg3q8|FX6WYSNoMeA!1)9~K_kW030D#Krj6%X$LiVlW+r9t3z`={e
z7(tQ2GNFj%^ja7IXAVb%ZXYd|s)(6*C)5>@rY{$0P}U_W#I%eYQzfqN_?C?kOznpg
zE0x)2#`C~M43CNYwQtspT!1nbnLZ4)W_krbPjtS|U_ls<wm28#Bef@+{vNpZAndlx
zkLqVQXvmDK4WBl^5HqQ}8bM)8H>}9XPI9hQuMeN7t5bl0(G+>U_n(<i8_tBY?XndI
z-nH%}bsGg3p&Qji_DO|4=xSdTq<r1lr^{o>?~Mpu<!=CKA)1H;114axLiKQ5QDROR
zyfLUQ!b}@8HDw41YI@=uEF`_)H-vUJo`}KU@k{#*w+%qLnbDU<ki?z$VW!fZ{-~^L
zP#aG+t~gpLVmS*qnG!qleg?k((xi?Hj8%npfm}IollbcL;86GR1yi5w%}`gX1425$
z>!qPB%3eYBvXvmHLh|#|PNpA<!$AS-&O2;D2DKg55<ajgEXp(T-B-RlT8U7MxoLM!
zC35~|=pQx(e+O|#0#nHVAh>b|%T|2=-S|cF`;YhT$iQ)YrUO@0dJ44;{9o`&R|T4+
zeKRyfU2Huc3i$|4&Ub6Y3Xic>#TA@Tb*|?su(`-8WHSpdM~GKOsC)%&^vWVjYY_(w
zDCWRu1a>`xHIccO9l6x6s@|gP1+cDP%W$f&M5R%i3qC>~soo;PXWWSH?RX2L2e3&P
zstX8deTg>z{vzscZkHdZz_}I!Q>?TM2zw*ufbt^Z)jzpKZ#u4${FTbQQ|Iqr8t_wJ
z)hHvPf-mU4L3_e+5$1u3k1_%JQt_Y&QuBm=GTdSJaf+nkkB~Kbfo1+8H!xyD7%^;Y
zq;RaQZ(su_X}6Qi_J+hmD}<Scq}Fc@66EATZ>Q%uq!tZ?E=t|GK_Nk7y+k8?44x4-
z;FeZ8Jo_x`E*Tx4BJ(x2t{k%(NXyvt_g5pt4n+a0ODYvQ$Oq4O3~pk$)PA;sch#}M
z%l_an>w&g)KmeAM_q2&hVYp4x1OEVx%?PtyT$Rk*u77tHdho{Xo{qW=P7jJs;g^=%
z)_m~$%+Q}el^(e|3*8h20Ng^!QBUtbme@0Skeln7VO+)$lFqa%K+&=2Dv&2Ymts&H
z>gLGCJS>hp!oSq^ZW`;PD7;<@n?o0us%PRAihqj{{UH|#QHSHYh`{xMz@Sl}&l-T`
z3TOupB99ms!_>JFR3yhTF15oCBj$k9=A?mBt{k&w_2HCZyakLYmsHux+b!xs(=yh#
zk<ujcLD*vmrP4$?q~}Ut9rwixDyxLZe^G3eFI9qb;9>CKM?wE+-O5YzOCJXG9p;^t
zZCM-AX8#YRZV~lu;mZY)uHMGn@)_72WBa@i+X6fJ9+FJC%s%X{dVZQuhiHXT<0$Qb
zj`-!)0uRW&)Gg)~qmfynO88OA7aSxaJKrOuxrwiB=5>)rU0rqsS;V(P&O+!JxE=rg
z)&H)GQD>{=$Ex@E$wpm?*#+AuC8NHWh}~u9&74wutylhQ;t#f<iD|@^B&(N{gTCwV
z!12ph^CPw|>C*S!wum4vDfiEJ94}(EC)k#o{Y5w{t^zrr4XmJG9(E}#jVaj&6=$mK
zDdXYrYoIs=0ktQA!$WplWDGVJZeS>wo%8o6U0kMv=9HOKjMNIFe@FRNE=M?_p3?5w
z*NV~cx+a*ZR2Ddm$`;l;`yymHBN<qwje>4F1koFqIu$w<J28-5u|^%5?XO4min-;a
zsk&*OQ**JFu1rLB{KpKYSAuU#3uG@@Za>66RH4ScoC*^EGvFqEH9#kR&gcz1_xr5#
z5y2p<BD!a$hG~x7vrI@OF43bx=&B&mqg<$b6w;xSb621EuT03eIq_eGP(VcDzj7gX
zu_qmw=LBSJnR_*pvY59#%!-(u^hj-)H*0pCp@-=xouS)tnu;%PsTw-<FL_@pzPu9s
zsrd5z8&#+NeOy6@o|~_jX{;wxmtdrJvP`JZ`4rnqCr3fR1;wpmiX~ep+(*Y6=S^Q<
zo#3#?M4Mo#mc2aYiEO-L_ia+DYxj|#xnlQqwW8u7&`w3?<^3+TqEYd*xgz|v(?bXK
z<t}o}Ub3Z}sW0f=bcHTt1AkdGmXJ@B7!hN<H+I3MMLP#rBoyKBAsBRy?`T`ZkDqdk
z@5x}J$_yULM@i4=XOoqIxS~Cho(U@^{lULu809UkQ&Vshh=5mg9cLu}vKKBw|Edv8
zqv*TF2re!1%IOb?JNOxjmfeqx7W!SgY&KgRo24iLU;7kak!P0?vF}o_FrQH)+PN^E
zOOj#UhI%79^bBub7QZS(F%DZrlEaMB&YhFCKk$38zCNo<3J#$Xm@F>LA!%Fok6Aix
zhlfzX3gd$99_`rNU;HFSbWaJ!l;U~DBF!|%Qjn~H8E=smq5cP(tlZVKokbD^eT)pp
z9G2cMWlJ_}ni|XdroVp4=G>;kcOQ*fqLF%`>6P6o(7(b4GpCS#A(T-Oj^LY2Z(y`p
zWZYAq0c*7>mJ{Xl^L`uWnyxNpSt@6(RNaXrbMV>6chodo?3qn7beyPADFvMjSFL)Y
z`9KAQkr=-fG~w2EwrCI`TIxJf-H3|Zrt6qvEZ~ZEzb+&r;E9Ilm?JIFhv;@PV_tgM
zTkVFr+%D#Rq7C~zC)GN|YNqyiZ_x+gRPM)yP%UU1S8-h^FF41l-0+Y{)2N@Ol})*q
zvSFec9fgFgV7(e0ZCO~i&10wEGF|<6F(RBLU44Hs;G>zF{@J22b{(Dn>0$uex-%-T
z<3>7y{i_gf=4aAOk#u!A>99$|1lgPL(DRP)Qhe=g+$Y`+_Ti@7(7MBK`LNkbXmLEj
zGHg2}&?QbvHosu~_i&MTJ7mXPDT@ore8*gKb$(S%Gb*+J(3X&6;;7=}(MnTHpOG@C
zFqUGrEO$Y5NGaB2Z_-MmXDbN%RxWpQ%%yW2!PcQXZPfpBc=pUQ`cI}~t5)XBZJVv+
zUk~A?<V=%RE&k$TH}1Gai@#pNxAU2St@9j(B+lHN5R*2F>#Bo@HQVg@4;>l!7Sd%(
zU)VQdY)!aNbtlj>arozL<Aya_2O7#qJcO&2GIiptVprEMaEHq$mkqiWQScmPjFz%(
z1{Grbj&VyE90%!?wSwwOh30Ln7|{I64Pr7~Q8j*X$w_jvndgQc81=&yn>eHXuu1sN
zS}<dCm8+2WWl%f$R~$k5Mhu&(kqh&ax6AKpV%$OAR=DTWR71{>-)m>DEnFyA)o}RN
zW9W3&-I*78T*lApihnHYh=->#%#ppG)Vtsxr``$w0>@FI*YgvXTv!VeXIxl2X>?9_
zZYbM*xtNJ;-OV*j^c)Ik{S`n@nUCT3rGb{5nn|W((9}GB?GdMYGj)?@U$oq0j=a#W
zfgvzI7g|&JV}0Ov4CwA_N|l50bd#ta6o%yqkUPnk#RddcrQf8gI8~O`?z8&gBUB}}
zG$N{u#$?ClyQYl{3BM+1Wc~1sOZbKhkJ!J}+7z=dM(ATz#OOr`U?Fj85bTNy`KA^B
zru7DyNix%FhHC4y)$o3#f|UKHqxqCJgufSDo)Yt+K{fqAV~}jsJ%M^-!79Jsa8+6R
zXJuD3+D%isNDP&!pI&9Va<Pd{1hY0%3&(x)>U$59R@rZ>f+T7OJ|@P+1Mi=}`pUA3
zPktCWso%z%OHNQ;>>3{<quy5<vyR@>W;@#m>ZSY`7&VLU<TaagR_~L3RW5Ey%~RUB
z%{Gxb<jN)5H9t}g>6ZpnSe|`;b@+BHt<xsW%BmUB$s@6Bzb+kwc*=n$Qj~TSf-Iz4
zj)o;N!)Z_6(X=Z)=Bq%6#&{BM!0@Zeqhh9#mr!c~PlrKL?Wwu=Xf*f^=ZT|?RT>c4
zv~M%7<bb%!Q&s&bOSVbJX1=UtweaU~6W(XO>em;}>nR&Mke9CE53t*+&|c1xnB*qn
znbw~1!XnK@QVXn4dUG74^H;!u#zf`n$Am8i^J4c5i+Zb8319rG9j+MeJRB<JH29hv
zD2M9H9qt*XSRJC|Tpa9#MPr_1*Y-8mg;yODc6}<(t{66r9ctySy5{eE@ZWP=whF_~
z?2ttiw<VtY3lXrI!zk%q<c0S%q%NA-MaQg1R?QP!cfvde3;hFsQT$^teJZ24Vc2r1
zh+9zj!$WIV!68}r?=!(i+a^A3^B5#wC4w*Rb394J?$mtnq+ur6l5k-f*)rfh+ToKX
zH|_o!rU@-nzlu5uI`Xo9>Qv_<G$r?PLU*a8sm9oPrNwHqQ%(0u;!f=i(qT50d$h0V
zHGXmR;}2VVT|VAqBZ&g5qVwD^C?FUVGnn0c#;imO%Or-WVHbNRTw&B-HjU#JORCxS
z(TI{{nWw8O(stHCS+8eODGZ7Y=V2Xmf5pn4yV*|~ELMnnX+1tCu^Kiwt~6AW)mB);
zfEtojy6@low&)9L|NgD`3;ozJ<RP!bC9(&f4v!H@dj8o{0(M?qTY@$a9?>8*2Hj{4
zSq!G|D=JCia4RZl;z%nhiM3&;C1ZKPrzN9#p{FI|c_F7(5Pk_y?)@xaC*dO@#4$}o
zucY;L*v90epKMC!(Ec?=zFmY!+d6A?$_1Qp<({9!(l<e5_v%C~*j9&X5#TnP0X;v$
z`rW_l-r%)*NlNu|whaa>w6<}+(Ky&vw?+|xZBK{9EI7w|T_5>g<8Bp7QfI%G@c}r;
z3(Uvg!E3Ero2+=oA1Sy5sgkw0+S!uHxJb+rBazKO!h<-l2Ek?)!O<FAOxuKHEQRon
zd^22IQiKK&G;{-}g0H}!Fw4e>_y`E$I3N0oHI)Inpm}{fJkO%0i%5QmnG{S%m9jmi
zM7rS6ci5u@8MGYy;DY&znNe6`AteGK#5(X-pC#(OxOoH~R5Q}eR)`iXK>3e5DKPvv
zOBFem!(pBz7`Mbu2+ze)-3EPky=X>>Pzb%!UgL-tJtuCKZvVC<Vyf@RGXk?I#*MQ>
ztKbIv&<-spLExUjJv^1I_g4TKg>^AH=aW#AP4N#7Ap#?XN)OKKkwM+PX*xE^xAk4k
zy;>t9q$YjQU02}HUjjWCFWtO0+@D$2#<pjTXy0Nic(w6INz0IbRKu*Ud#Ixykd)CT
zVW=Zt#E$AF+M_}E674Y|bR39?7Q$7p@LVkIEr@%XiS}3!OX?LIP!9D93CNgwg#ffc
z?ZXO8|6$=JaTjf&CNZp%5d7gJF96m6XY?)jlxXw>RuGs358Ez9iwy6Iz4!-KkTyvg
zR*)r$AKvv7trOy&BKV0;9A<nb*eF7;XV0+?1s#GFvv(H!g01`=ww<&#aMU!E&RgOf
zbG$Ej9iFfdw!Kt79%(O1#+3zlk2`u5{9>7yjRIjZc}?n}PD+M-tgORDhnV7x9tW?J
zrIo@yo>2R+1I0tryZ4-;_g;fvh^QZdz#uJJYxwIzYC$4U4_y)#{PkCAK>(<SH3=Q|
z(IwI714J!)Pg5dLlQtdx+H|*={ZW|XD>B53q@9p~NY6kV4RnDB83}Q1S@jhKiVs2P
zVSnOR<sm`ly^kx6OzgUFg3J4SxnZ=zJn~dJB3`>Eq?`(Wv9!(zmoYH2-Z}<zfM53s
z@7IRcM%{%CEQnlTCgdxm2#F0G(vh^=hIsEH(XtDWrAj^_=|FycB4r+1`TT6#Y3VG}
z{!r6Z9y*hkNJZdymm6RcVJP$!peq>;NYZ1Devsw@_p|mm<sAUI$%}?0k>Ohy`TU{P
zza@1A!*OPYzm3S3frnj|B^?D6Wp(nC;%X%5$h1Nf`C39bq!IWj{xC(~vXEfmue$<o
zS}E|DqF;okUMNPQHMy!&CYb5u6o;&U%<>=MaJDg3;bKB9tTHUQ4ur_Hg0IsW%0bWQ
zKivxc8CcH4&Ye3?z+hUXPa;$trc^W27>+|~xLoUEEym>iNCZt}RZ|n)Ecd>VJQgY2
zz<z#CG?1_pcWs>z%%VTM+%p1p0W$Qc8Url?BUt{?pfg#t0}S-344)EZdhfa#h6oy(
z0k+j3hgS$LkXo;$Ns8@QE)5og@$edLWiz1)MiEIMN+2SY{E;c%zbRSSJxNBDnONPW
z-i>#`!J{VRvr@JlY+$*Yal~4~1nR+Z$9j8rzk}h<y7~^A!LiX9tzC{qveq&Rg1x6>
zXpCXDa1QlHFF}6kYu<?zPvLvAj9Ry!@KdZHpP9$B<S$mMk1aU1Zj_wVayb_Qqqg*d
zhbgV0;d%6Hz#Hj9&oaNw_ON*{9*2?hIovgy5Sj5U@6?pD-mxR)%7FQuYr$Dq2aVBl
z!MXg>iMn0N3CsfNnGlL{oJ*I+PD{K81zgE+`zAukaOY-)^BR5I9D$=;qg~;6jr2d2
znh)Arr(;t8SZi7fo^<udoXRLb_HG_9NoO?!!4^>`D8Q9tAvAf<_ITK&B_jhO!9!|2
zqdh#L_A_cmev-Wwa^$ACbG%^Bx@QWBwLLM^Y$Ql|jH^%dvv$M?*Fpd({+Jw}4}=eE
z<-|Nce^+d}Q{A%XFl~~x>)Z#6L2!H2H=H~8%whUjec_<}7)LyKk9FEWe)BFHe$Pup
ztE(6wb-;7s1Ia$`g2~_p6Fn}s4UP<3it*KG=fie?4ncbOj7Ykjz!V*kn7|yJnn2=H
zaxYZ3zH5BJ`iOw-co{ghe@R00fWdZ|Wu)W;Ekr!oe2cj>*O{N^eWE;Ur)+Xvl1_dX
zBe?x^0rAW-6xrP{cWW%%#Om5>NcZ1M)s$>~sP~eXnXK_63w1okyXeg~d|MD^fChyR
zHV$c)0`_tfK4?Q2B4YI*?hzB(HZ%+0Gzggs`Xrr06tu7p=w!%o!+l2CF){kV_}Ed1
z<|Y-`rqJJexKYTKKXPJG#&m^AP@4@?H6*`eozWH+92buf+xTX15oVgy#D<mVG5iU0
zJW;fiQfKo?;X$^1F0}Zf?kS@95pknMXKXLO)1sM+?x>|!qXcOqzIm)EztcU3OZ14%
zuyz8aBZn*{L$cMba1PhKlb`X=i#s7mag?Vg$P>GnVsg~|o!llMGKg&^4|o&&lI6(-
zfJB+Wg5EQ7SP-uJX5jwCvLOA%E8=BXJGDT?9)@TFStQe7%{?2)^?x3l!m>0y=)s{k
zzElQBti1h}xFmlk1$x&6v0{r%_h6#rUYKGbuwOde8S){xIMj1S=X9ceY8>hzDO>%!
z1&7l5*b3Kw_T~`m9QE!YF1SZ;D?a+9(Ajf;2V8xlkZgJt4)K=tgguJ|6AsE;JLYF6
zie_JTNeI$B2fNDNxs91(;rjjfL5_kuqD>@7Ok2!tycY*#3|lAwx=cAI@`nu~mbZou
zVn_<fk5SEp4Z=%)lm}y5gbgmmfhlMe`R52}-yAXJ{6Gk~^c1~vQ2<#%fpr_K_y;U_
zfZVHGaKhKOLg3FoZ(o5w@fa$Syk15mIp|-_SjkJ<%v7J%B-FZ3f{=Z$Mc);UM!Da#
zW|A+S)sQ##0S{Xk9irB+7l<31Zg1R@trybo&yuaKo9~k9HAiw&Nc(2u(9%y)Pl;Gz
zu5ADkLLeTTg{y=B7FQ$E5PDhthwP8X)D|<}Q%rWRd&md-Jm{jsPQGCyFP%#q^CD0I
zU|}XkZ@<EXwEr|g23DlctHH#UFddZwomSN)#o@otOA_45g7oQJxuf3}s)0{htzk!M
z8>qj;J%|vR=sEJ?4rI7G;XaZ!wDtR8kv1e7fl#nWZj9|@m=MONV_>PM->_^^`mP(l
zm_^rZB}-E2hwJi0uBYu2gh|^dW=e6n*9y?m8rnAq@X#7k@v_ja0snoIXA4=l1ldO|
zM1xN23<eXa+7}Lp<RbRC48IEqeabea;|_IKj#e)(+EWG@p(XiAatV9_+9^h}pe1@x
zHSmAB#TKNbzKDYS#%?F04(qp2{yBk?yvSidkTxRqdPT)Wg>Z5QS|$(m=v2ujhRdT8
zLH!A>l=s2D3Il-oLrbdd2pK>maom}r3a|e}S<F9R;T#?t3#!NA5|y%&f%KyoP*R;x
zTiAu4#-M1m<#C99LeMYWhzCigCQL{eSu^C2^v}+~{j`dJ*xPt$?`MN1SS;9@L_1t5
zqsOEU;1Rzv5e1`+=&~W;#8(>OyBdz@v0=75;4v9WpC=uR(NVPqeA%A^t#OvS8bFMN
z+FgAh#(c%DGLW<E&+S}$o+_0_1g@Q>dNt5j`K+~TP}@bhnU^BhH`B&Es9K$L_n$z9
z8OH5Ydw0|2>nJ(gpd=M4FEht|t0QW8d(?L310BbR_|U-?kg!0HtFSu}t!Map0b;6f
z!91{@c@LAl${(Wx6Sq_P9P(>SbS4C}Oy;V`R<n-0f%5&8>K?v2wN~0%YF7ec++1{R
zChsY=8wcuKn;Vm+S{Z_5QLRiu45`|o^$z6kI2ziMPRnThm_|d!6e-G@B8NVpd`JTu
zVADbF&#)O$llk%|6jvpkqnL!HihjkAV_xx&;+P>#ylANB0R@pJg6omboWn;^j}Y`F
zdf?##E3Yl0QzAzhk3eCmrP4(#@|%cPJqC{^(GPtq!g$n*ycOC$ypO<7>l=_2Y!?rj
zL#aW^kATSN(#&kE#NZqw6dWhsc4F%8Z?34m^Q1WJ(o5YMK8LU`=##gK@*nr8PUd-f
zQ6BlxWE10yoA_z^c@*=^KV>V~BGTA%7h`c!JCx!hP-EfR(9xu6z*Sof3d!V~%i7N)
zK8Z1CDg2NS51tW|%eSU-pCCFCL{TC_y_H58PeZvC37^`B>w+n;OO;@kIx=CNQNm7h
z!alM@5zRvMMU=YW3o(h9Y1PVK0&07r-_oGGJ|jGFhKInzbzzzhQH2D;nRBqts8M~e
zM0_F%-|-CD4Cc7*mT;2N_fgGn1^RFEEz_e^o};?cUT!!9%gaeVY!fHOM_v|0P`_Hs
zR;2%Mr=;y^QZ1V1nhR)@?-`O$5T!mFke_aqd2*1Y?53V`fSI==E;K;t5lNfXlwBB&
z^|an&ZX|idr7_)@I9eikTy>P~8J540j_rm(mgZyMekRIoer<yNSn8Dh^;Vqt@kdtd
z8$h;u1vooG?9-(1Ys-AkaDeWKoF*YI{mAEMbGN9*FCw77f6OO#sfR)G?<S#_qmQ^<
zA9hUHl8y*adK#sE=~2C$Q!2C}?cC>@?Uldcb|GGsVkzG8g>Q*}MD+r`^cg=qnk$yv
z17k5$Y%%)*7-_a>A0cAWmO?Q7fN9uH4D+pGE((+#)2@&6JJ@futn)b7Zyue>^pX$!
zBbFV6f0wdTj^|@vcr0;(dLh$yQnOn%k$F8?)&&}}xdt``;ud=b`t7gLiFvh+GlwLP
zLm$y8VCS#gMp*4>!+XdP#d|VQ#Dm1K0s{k9rHG{T{f4E8q=`Fi3c@7)-<^L;MM)9&
zm={O`tL*CLKBC|aRJ#+0|NC0)j@~OSKB?F${m@U&yn$}+8j(sFUbkgJb~YT%H>C=&
z-s7J?<r##Cvo+1%Y~#PoGYNOW?ffV`<$*wy+{o=Qy-|B!Nod|h5XmEgUJYg6EDOR^
zqaJ#y-De0<p1lN)j8NWRxseg^uCFgOpM+&iGCnIlb6t0~7vIvyzKrZ>`jVNwO~-Nx
zp&7-!8yU(5^+7ILQ)b&iFSR+A?l|G^_Yx$(L!#an$B&rg-_;CBjM2?wD47fY164q(
zzw00}fSxR)>mkxW&z8{*5E)3Xl+i5^8APv_(H#(Jq<6~bPKXSqO-{N8B29FZlkSDc
z5ZdgduR~-gUFf8TATo@ea+aKc$gA`n_#IA9!S4t<#LmcgdLH5<=~eh0ML&k$(ewuV
zj-hwpcPt$UFyrW1CxwOm1Ukq?heJj)ebq(hKx87_;G%VmOrjYVO)@f>o^{c~P%wpF
zcF_bQQ|WaV{R}du(OWKh6C%@T&PDG)WCq>n5u7k((FO-2GwD_j-3&u*7Tx2af5XUZ
zJmC5lM&{sw)q{-8#RDTRBlGAwFMWlP`FP@T4=OC69bVz9j4Y&M%NSWi&w1(Jfy+v-
zd4&a#(MlJ=?-IJ#M;Ak6DgD?-Qy~3i^sbK%f%ccv28E7*$O<}A0U0u~l8#g8IEbvG
zWBm*!k9G7v8CgxIL)IEP8-CZ)seYP+$a=cTPX`0Y2D;x*$3tWz9U74Si;-<~Dx@~i
z8SuNA&V=7Bv;}^*((wU02ng6tCk3bmZY*6EpnnODEPX9NzXz@?`czMWGfSrjrT+%E
zl@0*t-E<h3>pk>;z^A1XA-a#g7o@)df0kYh(pLfE0KFTe=b_{vZ4A-1prmim(IGky
zB8TYY5ZwlmH|fF<-2;)g=-Lo{3+F<*CqxfJM5pNxeHS7bdMrfGLnKSjgy=PhybW^;
zy$g{xdM88|L8P4y4AbE-iFVM@VLAdLhw1b%9S@Nsba9wYgUC_3GE70@$7n~GKElXx
zdLvAK&BzJb7@@U{yhBGsXpE7QbWDVHK!sCuT7-@PtvgLyBJ>@|d6zDT(322(k1mVQ
zcOi0yu8q(SAo4!l5}_YL<O6yuA}EZUqZc7{mJY0>zhdM=x~Y=>l9BUtdnNsQMlR6Z
zmGmDNxkz8Hq;W<r(c2HupEGiqHdWEpK1Q$5ArbtO5rUZR{Uf|=Kt+*4<Y@u&?CIXM
zhvlm0h!%jX?~5?GE~Dw*vE9D-9$(#VUu>VRc6~|T^(92x=Zo$4)h;TDUlWq!m7mkT
zi%O`r-xqt`SG%L6?+$=?-4{FHt6f*pcO4`S_+kfrwQEcIu7$)wU+fKE?W&T#t03`)
zFLtPqIOK~R^~JA-w4=V*37>kaTsz^5z2j5wlxy$!Vkdp-y>jiOFLuhOzNnq@#m@O^
z8JH#QoG*64_q`v~UGM?fKV+iFJiy7dQ0-oyo{8@D34O1HV2w_qSQJS2j^7m28x?x;
zZJLRG6e2$tqG?6wL&%RLSYthq?w!^%*#vu<rNmzKQv7va{Gczs-&b>liU|q8`XE^N
z3&8dvjKE=j{D)8-=z^-RWD(hyx`N3729ixkDAPQ!48VT{D-G7WE3nlBwjglr2B?*g
z`)()^jCw3#g?c~1Mtc6SM)E{4-p*f3R+07S3U5JpopSU#74l?R0Q_$(c9A{N6}-em
zZ{uWb0s0cwzFSI!&!LbKC4iy^R!{7at|)AX;*Zp12^-Y>>HjK|&(}kl{7jNW<^(Od
zSITSl1rrO|fBT16-)Ts8XGs^<{|<Y(8-mA=`nvY>8(sSOnLiA8s0-k;0;uSN>E1ew
zf+fA&HbNfOjWO0*4t{T@!6gu)Hvr_%ML_wDbnmK^*ilXDnch$@x$xc+5Xv5c%uE&(
zJezEzbsvWwk(m2TE@zdj42H-r7;xE-SFLANjrCF{>jkvk`(&zGdx2#o4`-|J$rtI-
z2QbTk+2VQ_F<TPyLr6FS%up@CG6^a9aVX1wqwi3`%_}`(k=<!%&0>|i1EtR~=-n~Y
zXwOoWV)ZhhwPqUXZLWVpw6=uxAuP%!EPxnLRlx*ETs4Fwq;e1ZT9O?w%X%>Larp1!
zS%)DjdObv|a~!%GWXe@u3y9}wf^8&Zj;??d#bC3#M*?9stCef|FB!=2aU_g&a8r_E
z?FCtSOj%Y!VJ53*O%x!>4-83W0K=~sjIAGY4E4-Jf!!ei3K?m#0U1&ymS%w5PeQcZ
zK?rDoo?s?IS#lo+gtAr20>Z!lvk|)gIKp3}^jD+w8=<qIp2T~gDs|pcZ^3@hu^$GR
z{ZI)&1}22e<YO{wzvmyYL*n+;&Ar?p=7$rq5iiBKl>9W5km08lazs?2W<!Ir29EO<
z7)ekBefMzfdp_uti<acI0OF0l=Mzm}?4Xy84nobTWlUt>g3(ar1?7*Q^QBl@rWkLp
zJqrdt8$Ih2U+IN%eHbz_x{(3ZV<J@VgM*2#MzxNA7V1+=^(du{?V03lZ~u;LH352g
z)l7C=^hSuPxr)|u{BqyTP$qgaL|=9p6<_Xye_P0$E&o9fMCOKx<bqGHyA`Uv;Ol$A
zM*t!&NKC4NasFeH*0qB)ozdQ)>8y5$rV~tilcsxUZy|y@N||H<xa2_!)e?o|8<?yw
zBoAToc>$6ROuk902?!JNUMPUPi6BYFnDlGZn$nJR{B|f_`gc?Z4!b`sXc?%~?)nCF
zu%5x50ElFUX0o6v+2nb#Tp}dh9mvYYb-KD7EKV9@O<J1n5;BOyw>y^un)@MdkMK5N
zkZ>do^~{CubrUT65aed`)!2=hK94ZbeGa-2>`WC<r->FO{nVhY8`ME{Hmb|62ThHJ
z`W@L!^nyqmz`lU>tFUsljvk}552|#Bq0(_NovGRF6Li4)8|Ve;D~6mv0c370|2Mn&
zk67s^My2v9$oyYwV0jQ_1eUbVAHexfh*Jhd%d|r3MHJM}4MC-oZ_)Cn3F#!ThdT)j
z<Zo(jMn~R}mgaI8T#!78jDsN4h9GrxRRH@-g1{tn8RA<?qDLu(peePbq)o@J)06LY
z(b(Vqao~5m0RJ;`@m&PgDF+5ENa+-SB?GumI=;a`vjNa-C~40in#_G@{^gIOdG8OR
z=}P*)iXg@B!wh}ir$^8G=*u0ocS6}Hc;+ad+7dllLi=R0)z8nF{c=4^C)2dtiM^D@
zX<=mv-~ua@V2JA9z_}G&fa-22&U(k$b2Orfpwa#F<9RI2yT9{nRnG|;y2j(cO9uPF
z-Q@99gyH5g#&zxQyZ8M))dmPqFo7}$la^7#UYDek0|Y&JFO;%_hgIbbAU%*%Ywv3(
zz3T0C_d*G~)t<7~%cf-qo0zT3g%XxbT`COIE2|rTfmGKJ&O~(!>0fV!!D4fL%NQj#
z#0`~7)ImWs{h&MC_?9G7;po6HNmyIUOK=_pQ*MFQezXgXx{PCZTP}waV$Gm1GTaR8
zFzHbo1$l})vQ=JxSArQ5%&ZIx)y81vS!!0F2-0GbA)84Qbu4V4LUQsb8+d144dDQp
zOs(ZiIw~4+f*Ht;GmsCx0bjip^K8IpNma^IZ?8%{Q|~~CQphU9GABe_h_<2L?HWQs
z6z+rzr$7laVd^m@4t$pXh64LwCGUljjbUs7@w)m@F252}em3BS&&4}HShnQgFt!_a
zCG63bAWc2ftKNZl?HsQ`hN}sCpfpitVsIvNp_H!|IGf2<1{5@f0lby9wA4Y;ny@C9
zVD1piU4pqwSlp#U0g%%RtXj>upe2(W8csNq1MsIITr(^z@Enei*N2#dF{$R&FvGH%
z;bF3?EK!yy#UA}_F6a6!r~iIZ?kD08H*dq{ZGTSlC5aM4p_bmuJ>qt`|MgzZ>bAN-
z5vFiOaF{yvkM}|kL*`T}xtR1e?|47=Q?ZY`D1gh*aXx_lkOJt*?PBVI_Ka!eGs%Oc
zuay56C3<vxDFMV;ByXCNU<0mSKxga8#iihQKxcXG*OKyYf{IAVbGEpvDc`tDq4y0i
zQ$bdMfJ^=)1^M0Q6(l+$OnA>&P^er#uxBjb{48OHX4Ije6PE5ZpE`x?=M;kH@XEY~
z1$)F|_DJ?~3i02d5I^Dc=9{j!bVXi*$V>hl<OTb2@?LHi11}TgipgpB&?T5g^OkjF
z*s!c(M0*AbrWZCA<`zurRZG=#Osjyrd4<x=h0>c)DrpZv-j+h?_Co1YFw3&$hP)kx
z(m_JL^bV9-v`WZp6!N8`3Z*lk)T&iO-e{p{(#Hsb)o>oTtJW@ntJWcat9DpGSM3P=
zO4?EQm9=B=YtfFQy&o$S{H}J~F&I}&cVK#aF?|@*6N>30m~Jknk79aaF?}4<lZxqM
zn4T=)n0m>;rzcMet-a8|Ka9=k$#;s$c1WHmCXYb!R55uJlBbKwV~~8Wm^=>2cLl!S
z>)xjav^qt|ck3v#TWt|7jH4L}MCMEPj$QJpBRtwAU+l6^9p%w3<Ic-8PQ1)TiaNlt
zfR|i5+Qd>4(cVWX&fsWZnH{_0Q^$C;E56uOpL$Z#uKHrveCl|QcFh<2$fq`Yw2u(+
z%&v%A3W&#;i0u*W14KNFBkm1|KlZ7UJle;;*ma*e#iL#K#Xj+=(>&TIzSyTeb%sa#
z)EE2Ar?z;s&#;BrU0aw_Xko0`f+M1x#TMokByhv0&h}_Ge6gE8b*@LdiD>3^MKiyE
zW}JzpG@_kDGz$u7Zu!*t9_^MdcH5^e^k}yc&BCr|78THpH_?<uv=0%@;sTmGK6SB2
zyW@-9^{God+FeA`+7-=`0-6aX8fQd1k7$;1G?jqno=;uo(eC+TIiGq=)N;O9N>Nu(
zEu{e1vaa}+7w|Qk_*@a~0^(ayAZvi4uJULDlvsnJuJLFMh-PJ1G^+||CYos65$z(P
zS<TVFgc2L5sOvo1K&-u{Ywfj#+LO%M<q_=?)?UYJe;aBKQq&C|ZIBXcRMbr#tx<^$
zR@5yXZLkt+Qq*l8tx1UuQPdqCZHN*Zs;Ij>+E8q2eb=To6q=fBHsy(Em$9jhys2lP
zsbPw`+oKIrVy`OdUXS*w5*x0l`#sulB{o7)4|uc@N^GQ}zTweEDzQ<D`ld%4r4*$;
zT2a#;ZL|^_qo^5=HU_EK)Rl_O1uCYPRCpuW6{KQILF!`_^=*$fR*8*M)OL?H4$*Aw
zie_5@%~TVOFQQ#VG}}L~4C58`utyuO#3m@}QI9qO@$Kk}Z)XADG!vf^(XJuBT?Ml8
zwPVeSdfcNmBbwK`qS;+QGu=evk7yqunmruNHUaQVRMdAo+C(KbNl{OEv`I>AvZB80
z(IzXgDT;c=qfIGN8k?%9A9%E>N^F{<p7Utal-P7dJ@3(`7lj;~p{N%<+6*N&Q&BH_
zw3$k*MNzMMv=${cOHn`aXtR{qY(>59(Pk^LIg0wJN1LO><|^t9k2Y6{%~RA{9&Mfy
zo3E&MJlcFEwm?zud9(#eY@wp2yxKw~wn$MMyxJlqwpdXId9}q#tW{A5d$m?2wnR~f
zc(o-;Y^kCS^J+_#*fK>O?$wqlvE_<7(yJ|3Vk;DNv{zf9#8xWmSg*EHiLFx9@m_6}
z5?igP&0cM_5?iCFlf2p*CAL;kr+BrsN^G5?PV;K(l-PPjo#EBiqrmre75Kh_z-O2O
z4@9(&QQ-Rv{kB0-TfEu^CALvfXM44ci01XKXbu$6%rwzdM6~OO=3oKMCPkg=)ix=y
z&5AnTt8GR!Z*)a-sDP%$L=%i?pCFny3!}Nvvs)B(p;z0Y#I}MONZM8<woOr6z1lV<
zwp~$|dbRCJY=@#Q_i8(^skgc|l`b?j%WNtX(LTkd^g>gg$M^X*cPi>iueMX^JYQwH
zHkB<jHQQ_|9ML|*rrzdF{S`E|OHo&QwOvZ=HAP+P)m~F#yA^f4SKF<`_CS$E+oQzx
zg8A}ldzIKeFkfD6pAy>-R@I{IS7NU#>UOX8I`Y}pwej{s<8#c$BN6QeHr^q80~+6e
z2Rw(A?sbQhn6AXLN}aC6GK%_YP#qprM+DW8L3LD69UWB11l6%YbzD##A5<p<)#ji&
zF{n-os*{82l%P5_s7?#2(}U`apgJ?CwglB#L3MUey-}gg39560>b#&jKd3GUstbea
zqM*7ssI~^xB|&v*P+b;Omj~4qL3L$NT@_SU2h}w}b!|{x7gW~=)eS*)V^G}`R5u5o
zt<W+`tWD`r*M_Vf=KdV88b7Fj+j2y}ZMhQQ=b)n39Ylzu1&BikajXDw2p|q2#PI^e
zTL^KY0Pz+;yoC_&6d-hjI9Y(u0YXQJQvz-@eg|Ys;~7Oy&JE)hBQB^FLU<mCGoP#f
zoTlvUnQ}W6y{%+3(YF-=U;*=K0k@<7FD{kr^-QnwiiD`N5AIa{dq=jKnhskAR=0D*
zar^3WSgz+2O}MmS9MUC0He$eSHrGSA?^oMT-4aYlE$Y@_i@Gh?x1W%}l_5|xFDx{+
z?UE8w*4LiP;ilTV1$Ntz-S-OYwgJ0b>}R@a*!u+yn{R4ZWkkD)8ume9?03La=hZrt
z*kPFAyxL(zbG9p*a|JXDOf(Nfv|EVg!%lAdc>xbd{vzF5hoztscYK*1WmH|`<ohAz
zUKqc<+98=-7|uLJtU}6-`#^fi4ZK_sa3|GkZsXt{hjvFuS7|wH<zmtGzJsp!CGL9L
zjkFHvAn!7VDKYXu*pPLlSnV!WyIM@&!}K))H$S)X9U@mdtZzH2QoqIhs=MZ9$z37Y
z>`gs`RKmhH^-Np*JWHnh<^O@3hPZaUBj7%1tguh&YR^R9cM`yqHJ8KL<SN!&{v=qM
z<Pm3lQ8?M5coa-64yS(G3-zKk42$6<;hLqe?5nDSrSEx`t!eO69qa4ankIqb9_v(N
zj}_ajCN;~#G+j-!dnlccQ0&q$gN?Ro(r!wins`COYF$-TeO&^S=;`D@F_{)?)>tSP
z9PSvoeu|8OsEs<~K$r-c+#>1#+S0#0W7cx?=z=R#lX22K#>}iPIDw{*1+j!lH~8Ly
z3-=cAScxBL;F3O_Y!HDuO307WdUTjb``5F$EjirZzg~h-Q}zt*4w@8syL|zH9oZ~4
z+k(xyLIyyB_1XdAyuUaLtN>b<g_6wZ{stYcPoc+*ItBPGVnS|#D##Y5mUHp<#}Ug>
z^sl#InB`J2*uXQlmV~vm2cCIhq1T2ReEsWfE*EC$#WW$r6)Aw(5ocP&0xM)%6P8*1
z5gitSCBgk}z-?>6J;Q*pX9xhYL2)&O-WOchsDu^DEGC8Z5@#D=k?(w^T@3f!O7R#D
z|I4|Y>*@Qr2a!8rymBEJ5<psw<mlz)b_0K=r9W<}gYp3Y?l+h{;#--^;ebj=WgszJ
znscqZ&Ii|KLn{s1xlXqBa@+aRmTL~A%TW#Tn$%S%FjJ4FOKHm6t6nlk6i9$9$NlOA
z+le44k@JyU9!4r0AnJ61ImiTRT;01ejN6f*-<cLCN<={cXKPM(W$F+=SNVh+nlBfO
z3MegKiDOIpvR>t7oRfQkNquWGSd~u&0T>?vjH8X<%<~flLw$iOR~?X(O|X_~VNQR;
zih#lIL|EzLFiYSJl90JtqRQz`+%lK?;L&I2>@p)eAyw0s{v9qEQ`iXLS0-V{<c;BH
z0?dPw+h8TFXF$Y)VL5LIQYn+}Nk&hx`v)s-`ISJ#jvIguter8`CO=}iFi@@0W)>_5
z$Q>qGZbnn0VQPj7T#*pOv)@oEKAZ}5%AVskMo;QaZf3wd7RpfTj6ox3bzXCeXec@;
zI6}<A(t;t%fIO;+o?tLo7#>%5t&|5b#a?U%RHT5nOWU200!lG&R@PEJlo71#JABX>
z363J$m3qVcqox_ix?=h#N~$Ru83Tbw#}k<}mk^9&E4GaW<F|QTwsG3)agUOreSQ!}
z1dk@HCIiI=UEc*w{|2o1EG9Uj#2rLaL6#Z^GzGNAl;<+=R}=rRTrR<20J`}AG&_-V
z*4kVi!j`+R+PUfCTv9KY^XI=~TQFj9a;-1P^sl$OegSONx;O=Ppdjj^#zfky-T}?>
zBW(wtN>ymgVa}y1!X7lL4s+T}IB?!fl$4`UErAqFoxAJ_dnRFN@y#>_1H`%1zrbSM
zEV>6dbPsL`cyjv!4huJU2ks6X3p_tFh%f&E=;{$gj~-DdltUCtjZ{Zk2gfCo^@IVo
znwZuheoH`+3=u`lsF~s=IJt08X#IA<$69InSXB}2HkRBeton~CYSybARbs~!wau#?
zQ)0&zwZp3&N1yF(SD)=(0pBVUU$=-h5|7q$1=sI{q8{;TCzRMbih9hey@O~{Viz<6
z#5|hSCYlE$+9*WRAR?Nt0GgAEdcv!nRAQ$T^`uujrNmAv>S?cbT8X`@{G8OitJJ=y
z)V!x4zJa0ywVr}n`J%H*{In7u?23<fL8Rua!Z7Qk692FGaC=ogeM*VXvBz^xb#D-}
zaF1COC6QGFWoML3HhM-8Qq?e$@tR9jp9Jesmj!#TM|A-Y;TsFU?<?S<K_`8w3+$&b
ziRjtrbrCy$uqeoU=~tENjuyPSqxM7S=noazzZcp^C+J}OT?NL$nsBPSF*8|=ixwY=
zui&JRkotZk5~!HX)U^q?fM^m0Am9fEPF9urQhNa>-gIzw=P0u#MwZ9Ok{<&`bR$^b
zj{)PC+VN(~5D~A9fkxDJ$GcF_T6YF$Wx$|U!}Nd(4iXwF$`bGB+7A>cf?>|DPSt#%
zNKiUV6k+x75V-5rWQE~$=mykMT+47=+|>ZsS4H$Od*YPV?!qsML1_kPO|A{&N7G2A
z&n_Vozohui<Z{(Hpl~=xUJgy4Q}T?~oKw&>93kSWr4$x1(1L*jDvT7(wTzhyS))W;
zTiAG(F^7%rs+(g9y1CBO&4(h|XykmXm_KV+DCW-^_SveQtJeM*H*E{0%Xz5-N*f(j
z&wWXohm}_piq{n?pN7iawP$hXu~53XP<j?hduZRnjlM$Zo<ixkva08LYJG5nM=Y+E
z_KE0PJjliG5Yeyd1NLPt8j3P2niwAKgUi1CB3L5n+xhd5wPL0^hgW&{`U0cn==5Zw
z8^CF5PiJ}9k<MuA#B^3$k1V||nl~%-V$DpUrp{}$6)+^%i8?}Axp%W(%mAE&TPnbq
z0gT2`!~wBjFV~8YKFB$;;!QfB5qFS^0P7IoP$z(O2=HbRU_Ao7)d_&pofdIbSZM$t
zmZkg>3?#T?jye6Ip3dt<ieL^KCwIMQT3Fs%=6+<$zYtmWeq?1|gzRlGe-5+W)V+rz
z+P86!r&Axd7x~+P{B?*pqx=IJ0dGe-`j$v=lvkw`^xJS!NGU0$J>&LZ>J2eIT1=i&
z^qNIp?(S!znNk83vpBzHvdPyhb$djFtLD%+ylZxeNZeu0Dc)(si3-MRtrcTfA8I8>
z(5RL6sm2>CM?_pZK4?Jdbr<E@ZhgCvRJZmFCeoOjso5){4LB;|t&hn9-d2O@@F#|Q
zo?P$1OK$OzV)Cfc*p63@%<SYbn+caOO7S+Ago;-M`czqfi@s$ehWBA4bsH&EI;MEa
z4Ow8RkyA6oC)EBX5B(dO`b|fcyQ2K3=8|2=*0hxKN?E;Tq7Ra@AX)R8m~W!|t7uQl
zD++Cbncak|h|OZnL7U(z5>pM<46{sPx^PfhBrJn8fryTYqRga~)DUNbc?E>yn(T!-
znBzh_3o96N5XRBmf`ZllmAWt3_phj!uGuG&f=y`4H-Wq^^U_9?`X84D%ty$7LV`6q
z2m`@kp@@P=NS!2MAc5JyApJO3RR*1lJ8fd|4#_*bKtj`xJ8UBJGwHaEFK+lU0XM`P
zJ?l%W8tcn?);lrjf_yjpFRx1duHI9X`g*+=6u#b9mHKtPQd`xxilnMKObzPF9p1Yw
z=n7x#Nhs<E|2JiE-KQnTxm-|+iUDg}*nw3jE+8zpAT(w@$=I}8iuO$h03A!MMjZT7
z3zr_=&6xsX?v`)$u#H5!(Nwp3YccOgKF{{&saC?|*jrX)0XhoE2UmQ!CB7k?+@iFa
zH#ze;J3p7R^>aBN`S@kYEYGOh80I?}RS-#7lPOF5Y6y2HAY)S)cPp|+?q+B$+zNS^
zz9@qYfbgDNgx(r<RpG`d&yG^6z8Q>e3sY2rY{F4ZlH0=ogN-&>>ULmT13I;}v(Ogg
z?g}SggSK`e(9KRw+?26@vPSOiaB{G}HN|?laYwO`ch3iT00|kNVAVYHnEcX;Te+N*
zk1D`6+2(o~>{Chdv(U@+r5pg%tgQU6!3LD6xeD`|av9!ROO!=RC_uS-8{L$Uaq|I9
z=2*yfB0#(!)Onh!6t`yqI^mpM{rnuLQ+p?rD8(yqIIgpaQfL^ZFvL=KK|)@x%XNFW
zT!vceF7upga@}6M;WN6EfJR$fN&FTijv`)E<@qVUM>N`!+!yX|3@cYJej^z266GN8
z)bD!Ldy?<l;`_tNZ3=EKC0q$lQfIj6-c_C`Pq=+=!urh>w<li@*Bl7bY{CUC0SUQI
zVn0~u8_4}gNH#02kO#xM1peD`5R|S3L4Ms3Ou`bqp@^xk_p0|Mb0Usz*BGSA7yos%
z%|he9Zc6>SSG`i@`4z6ks=P415=yeI9MIt)faMvc@Y=Xa>q`>$DsLr+804t(T6w0O
z?~P#&G|%hUdCIKAi?J@o6TXBunPU91Ic~lAqUUg`toJ2+?%(8c*#toGi=kDG{OVyz
zW8E9j8TPKZ_QtwF4s_N}iIS5^tE@Ot{{(kH?1m7~o;i?zu;cbFmc5G!$4auE+!*HE
zW27)<@j7Wf0|sc<j4k&=z@Ww<45l11>V{ifc7Ds7mq1ca9tu~XrL^)o7r3n~H{cJ2
zF{7n!h{e?tX#hx1X}$<^%P|+Kcx*=Q1qpKX<c@G5XGgfM334Xesytra?iC?9TB*Ci
zuNqCZ)qMgyUM?cIEY%GKa8%iTAPn5XN4a56LGeI)OEIINz6{5h4X;N%1cI&oUEkjk
z)MJOC#C7l65{_D1!XCBJI-T*wJSg)cWu@-db2)37wKO3mN<fG8<R&2a0b>JVQy6>2
zuwe}@ixGV@+)$SSxQntuDbo$RrYE<C3prcEb@w1=XA##<0~fbZ2CiKOt^t7Srd)u#
zDRVe(rVKcUHu@XDHtESd#TNF2>#jr2-eS()aNRY?IaqA-pwT8Ddj>9uPEZ=^a`NXV
zO3Qr{rR7iYs$kgu>26i8dMi2-I6d}qOMI;X6Qu@y`x6AqPpdem_Wg;70|ob%61JLg
z<pRVch>b57^yC}B;a5@H-UzGIgAYWk7}sGe_W+ow<&2MRt4cd({W9N9Ci}l)|B8XV
z>Q6<UuyRMJlQ$@Lp0Z_}vgJQAW#@(1dCIn!j?`%p_r0G-)A2ZN9&|%faImyLzhKF?
z-t`2F9xA1&$I;t)a5e6!rE4EdNYMu=_qFjrqqbW@N?sNFqDRpST#=d&W&T#G?y88p
z)LGwpzCZmgcg`wIN8f5vx?k)Qzb+&<@-srQa0Pgvh&SoewMt)wXh#3(b^CF>aE7lJ
zLMEC#!;O~sTj69n+{#yb?{h?t{2@eKb2+%7xe(Q1v@}}qtdXOS7*&%QvC5ODGy{}g
z6p{mw(z7Do&0hk}GukGb>jm6q;DwECuIHeK>zR>Eu%L{-F<KDJX~^eL7wEt73c$<}
zTn;?*fSAb7E<`H}Ey?A?1-YE@4-%bLJQ*>+Op3m3A*n|?T=@6wvsjRguJd3{)_n;#
z5>a#+6x}(_+gA<V%=ZGEHE<es&{t3_#blrOCqi;FGW#K4kpCy}`T*b0MSKTDocnpg
zfWw?;fbn)rZc;KP+n}#TdB)^AlIJ?}2bdN@t-$n*T+aB{%5~>F*B!&jzmWI-v8OL~
zD!9~nS#Y`Q_RE#R_DjZG0{4n&+fXQ1`PN`rx_9idQu{#P2T0vz+*-WGvq4+qSClIB
zQ({+?+OPKgDyh4oKo+#{5#I%ZC3^g-lKN^}?5a}xu@e1QA$3<30ImW++z|PggL&|h
zq5_bR3y?a%;JK5SKO<jI2B4paOeowXt#!sPD}9|*J1VBrwKRT#C7b-oHVS@huQu(l
zs9UMlfed_FT)4lD3-`}DZA`q405^&NZ3u8v6a`~%LD$+u%uFYbi^*)52XBXK+W0=&
ztzxxfSnYNvyvGplog%;y1i0G?;0OZTD+075K(3hXz;ucgD{xi@u;R5>1Ze04a2Npw
z76FbTz#s;rL`w04I}dJE{<dDi#U2PcnJUBghQBDhH}v2EHb2R(mvChZCQ8BsZOJ^)
zPB7e>=f@JQEW>YDV|)qA^4rz?l%PFacf_ebpI}eXhw*jdY~ytzP}azBIUU1CVqZ(%
zQu43C3_@_bW4ZA%&B(~#vOo_igA2PJE{bP$yhS`X?g+;{O-M3cFb5J3hg<lYpuvpU
zm^2?4)_1nWKT_h?lss$)qOj>%sIbCloX4|RcWF6#o8QDUddPD0#OYe8y{6!m@@vXY
zm_6}*Y~3}*YPDL52=OEs24Duai49yw!n4eiRXn$Y*<n`nXqe)0F3btX!Zg8J@X)K~
zc$n~)kxk6J=}^0%tnY#{T$T@EqG6n4*OY>I#zEUf$r&%Ot|`lKngB2zi*b_}lz~Zq
z0oeR~{UqhD2mhwotK&<Tgj_RNU<pgsxEar&%QDX=EYMGS%|tJnfMG0e0#2AF;L8y$
zi(2(6D{g}gXLtwaVSp;U<Lq#OGiu9#=-vre)x8tmC1&|^w(}qv;AaHuWRFHN+>J18
z&?uh3;e8d~+KtYap;;Kiy4a_&EWbr}(j-oeXr)jvt`lwJ8O}PP{NCzC5pS4Z!fnpW
zxO;j9d6`fgAs2CkG#AsCFg>xDzKrQf#q<?SPc9I0$|U3~5v@BQp2G6G#j{y{xA;Iw
z)pK9fz65!5I*~b-;oH;Q0^od_q`qFyGFk6WjRU_7D0JOcF(Fx{x-Fvd*mR4C3)i}w
z$dx}Q;&fIwfYsiFiLvIULe1>DlrbI$u(}53I*z-FczzBzIi@V2#kmAyn9g7`_v6Rp
zRwIenU=>!?YOIcU0iOK9s>YR1a|m=BTe-b3tB)(x?@VsOz{gV!EML8WSLYEtRUGH7
zMm#vGw~9NA*RVh*-j(6?0X$nuIBvZTH@u)j<}p0Z7|czaw_V2;0VO}f{%3S0b3pb0
z7X1(}9`J`Pxc87jI&_n|*77Jmi(AFwf0=(~YowZ@`&<NSRPrTRPW&8*nYo0&xXXYD
zp?BvO73Kyi%z{of`UV0lECSp_fJL1EZX&?qBET&KXzc`W3jvlC0d6C}(oO)k5nx#n
z;0^*T?*wp%ABz+L?jpd-P5^fiU{w*|9s;cH1aJ=l)-XKB_z6ng*~afg+!K>49jV^!
z89YPIq*1RvrTj!Jhs&f)HhP^>0M_wDN(Uz@6>#xA`+Fi!Kr3tW)-VlS2APnxu9%e*
zjjZ)}eNTGU$Vz$JYP%se?q0WZ7fes*_YYtVp&Q!=Z5afrxgb;5iCiu&#=FJ4C9efC
z@ykMTu+k%X#wW$QH39Yw9DBl`A@xXC?5csi!NC5YLA`D$9O!R!n3qD8VpHk+n;O))
zsf|nqdo_w0Qs&ZY(~WaXy&%8#Of~)~7|hEU66~n$md%p{%MiSI$X^g&rktv3)I}2#
zM!QK$;etjQhL-P*PISS{4TLpzCTvqz<GZ<F^G=&K?`sk5>v%%O&<RA}?UquV({3rT
z+lu;q?KZy%&lSX%H^xI5Sm0p{Z1Jmj;Jb~t5J1j{GvnxHIBVoD8E-3%K*IJ;3O5{U
z>?msF2pso2I{}P9fL#o|_aFj{Wbs?d(sIMa=Ep%J86F3{)~U`&th2ko*}EoZy(8M!
z@Wii^z23`Ya9w&DoOIVlF}$reo#|B`T<z(`scp@CCZ%f@Fn-y)Na{2sb$>BE9n-HD
z(=#xAfSJdKSYA!}+tPG$7EAeDJk|n+=Dl#rhv#xkbTVlr5SEQjEF~|4FA<%Dp(Pug
zfT1-TZN|`+<%6nMeMxdFO|g1=q9nPVzFhBsa0_OX@(8Xq?)kvTR~heHw-$2Tcps{^
zgy%&|D8KAg&M!eOw&4nBCpFfkko^Ec-U;c((xw&9!4gvbT`+E=zVb?aSvon2_3$ph
zI~pvVoXGG{l3$LKI;Yafu`D4MQ{%u{DW=B5YQLD8z!El08M}9*8U8OGb&g?~BIqQR
zC@ZEWvxL2vn!*x}VrnW&l(sfwCj-4WF@UO!MztNo@QvD7hHuoy!LL;t55G2T0z)sO
znc>xwiSS#dO@d#$HW_{$+7$RL)uy7Zy}{%%CcOvU-V-l&_U!0cFZZms^sKk`the>7
zFX>rt?^*A_T{Udl%`eXZM|q+0F*1?8Z0K_{dzrt+E|&BC3m^|f*7CBUH$Wf=sRbZ$
z`jnO%Q#o#KGwhXS{)QO}X7RqNCI-q$45!Fy+76x90hw*CQc6%vFSnuS4E^x_9QW8!
zT%a3ZqsHm86U^b{{szQnW#+uxfs0#k3Cixn7JxB+CJZz9oak6T)a_hj4w5}J-^TZh
zHYQ^mFL%H&bKZw4lt<N))msYa^p?yVeHLJQwhN7&P-U{SvCWnQ<98{)!oPsvv~%Qt
z0%EXa(@-U*Gf<8hyys^Y`eL)<U5i|dF?Tq;l}1;*j3-u54TgLR3{#B1TyJ-M2WY$#
z!Vcw6?rkQpu~XH|J8%}l&U(2sg3(0`*y%6h4ZoN1E^b}{aBF)aDE4yW*pfFf(d>1H
zp-Blxr+zPS{T_4k>g0W?D_LBfCa}?+6stK;QlWWkC;n_j?L$(Up|vuH!BUrY?FJVm
z341m1f*pxpV##5Co?oEF%5TluXF+R;5&*Lm!AcB^=?&r*mJd%d5@6{1`j|G0rK_|S
z=K5D`6krHHldCG^|I#q5#;|E&#x-p2j~Ex$F{{25_uFk)-UT^sUqjN`f)wH1UJ$^p
z(nKjXgr_qw*bfyZmiNtx<?9jcMZ6}_X<~Vc2@WRxFh4~uN1a-T^W<V~Q(C!ZE#Y=&
zDYrYzxZPR7?aoU0EzuTnTeAx7OS;hH2WFFxM6@46f!?Xf40FL;wv&IRro(7<HA_EB
zwC&Ja+gV&qo(-FkbNR^BfEk&Vk4!frJ(C}X&B%F(Y-RW<g9~B&l);}Lg8+9`Gx$j$
zZ~pU2KqKJKf-{8W_)Vbq3tv~tGQ7j^_vnHC1z!3b<cNQxDfNx^+DG-|#ju{d6z=<|
zkb1Pk^<`Y0CNGDR%NRo9hjOmqJ^ibECkOp_sFlGF*I@sH=enAC!9l{qqqmDQ^#+`&
z+d4TA8<2>0CM!%j!|%rXjE^o^%@_8M8^+vtTW_y-RyEeUu*i-5xq<O>L71iQc#Lo3
z7+1s+l6gOeI~56A&3=Z8XiwPqjb+b|D0vpYx`dZ_%M-SSdXMX2d{Xa8ls|-<&<^8p
zycDfhX~My8!Aj9<VWEG0S$u?C`|X4ynuQftX`-y}x5em~0G{^ZcOSe7XG6WurSo&Y
zg!dtQTW?K%1YSq4dP~OmSi#5P<n?e1f6LyY8&B*r#up5r<P%<EKDD=GqMwE-uN(a=
zOx*v8*X3(%yeb|8VO5@7!jnt#$ySM%O8HWrTq5BCWtf2c5+w;&@<JGibHkL4&vX**
z<jpY7;N?Dk6zNh21``(bdNAR5Rsf~hWq-uyb@v3d@mal(c*@=BdpWDeT8<W{tQtrE
z8ipq#>6+b);E>wE(zR<D40KqHXlodsZ)^5&$F76n_ep*X-Cw1xLqoEjrF&=_S(=ZV
z9yNQJkme(&5S<z*M5h&_(~T(J?%^1JgI{qmQ0yzB*jGfcuZUt_5e1LpAncxxo;Raa
z$VC-Ue;=XH;t?iEyv3^2H#@3Qk$OJxb&x8K;NV~5h8thltY*nuVSvfvN2o9f@pSS4
z!z#w~WM;j=vv9MkM>VZUIShp9<Tf0$c-e>#)Z`boxQzw-{=aFlW`IL5o7-wOcZ_d>
zy-JN!8@Vd=V7&zvM0zQ1!@2tLLmMf7Xd@@rTC)7<z;iguM2}lw!Ow5=B;@$7SM%G)
z;E);?KmK4->OoLxbe6#!!x+nelCHJPswUCfVIgZIfG8NW_|^;0ihQH^d~lqvhQ5Y0
z_3Y5&YEw#ug)&a2nVL5k<tMoDo=s4g#brx6TXTTnUeXC}aPTQrax>#6HG1++xaJ@)
zd<Va?h!!xNT*vq+eS5~d5Qz4w5Z%PgFNuMaHZtRp1{g5VTS(#zm`Nj0P1+;i{BEY+
z@}PpAWOxMjA#PUTKryRs0?#M9lhM?p?U;@B0WCpvo+P9m@5mxOo}cjf78DN>{Ayx+
zFip-3=rwOL0e1}b<lV6OQLN24>8<MuIm3iRh#mmZ!}x?A_LB|Erw1DGxx#%?;TIRu
zhzMFnu&D@!&JC|L&8UP;t!J(E#>jBh;t|zz{M^x7FZ02bkUJgF;21PBi~|}RiDt&<
z4`}4jnp{q-%jHtJTyrkB29KE5;U!?kS39qi2l+j9&Rv3WV~?b@82p0BPca!pzJeOF
zPT^B5cf!ra!$jQ>WUKitH^k2Mwu8sOx~G(S5Esm!hJ&w1_ju?l^-{JuPlH*rb}-d@
zbjMnmzJsZh8cbn1$;m@R$1HgJ_#P^Lbc~xApRGtpcm<IU30TE;F2UX1(|n}ACK~Gc
zN?!lgv1UW(fSvLN5Z4pfNv7r6TeMsdb=7w&>T1+neXyIpZyX+S1t}aJ;!z=&N#XD?
z-zfs`6v4_udviHqG(Rtc7`~YS7p*{5{u(U^`4!_bpgEw7w-dik{ThrC0=xbi4-sL|
z9)huQ*o?mk@i)vkj2hPtGmhhFjTzS=zR-+kAU+M5nOI<EYLS_w!OZj`Gtb<|o`6Ts
zT|^-A^HZ+iW)8~>r6r#u6@(&lp~xVV|IX#)M{~KSbGg6C<$jgRC3Crd%jN#tIFIJL
z>D##-eW0U?-&S15s*G1%1x;(un0Fy9Tz)GZ7`K`6<YoFw`R@(G9e<z+&}301vwB@F
z3_q!ej>A1ZAQEqgBnL+721W2~OU5{0g$6Up^^RBa8_?!Lx4Bc5Mqb5HNZ<288sasB
zBbZgw6v0{hy~4r9kci<Je<PwbpaDJ8$uoYR<=>%luQ-i!<p)LgFOBZs*-q{s2RK*o
zxrdsl|01IO2NZl*I1RX2I1PBSr0ThEYX1k14q5(-8+R1-u2;K*8)mneSR%4Z=DcOW
zA1nUYa4)-myPn)C_V3X7#bWT9n~e{MX0j{F&4&+}Y_!!P#FZv2mukj&(aJncQ;*?3
zI)9#5HUc+ha0?w9NU$v5s>gQnx%fHQ@2xhSQ7c5vJ4glsVU`JR;}?Fi2`k^dx1yKn
zz_SHg9QYX+syQR$g-7tKAIF;>M#P%1<!zw#755JOOj;j21iHgzT9KFgNzk&Btg3FM
zBVC=-PN9(R7JK0&_QE~xGvTL)ALB>-trh}Y_k9fChU5zKrEYHjp{i2@QA!eINveaD
zj~;(yb>SQhxde@k4U2TIga3W><Y_s@V0!)re;RBoNy7QBls0x`;{&DSZNH~;9bB56
zFqS502nR@_AXx@LU;d(3TkjVrcs(x(FVJf8lK2AsUP>~OJzk>e<SAC2^ZpHfX%g83
zk6~Q@mqha>!AbT4eNjYT1wx_bs0BlD=L_`9i04J<(m)3oGl<f1!&LC2N8py@C9Qpk
zI4nY_L|%;$Awq^nh-f1XQeJ6Cm`eL-M0*TRkEOiQHc5rY5}>r-(!K+EL!{zh845n6
z@$o_Ew2bxvOaGi`XThg~u70os=SZObEW@v$>CrbzDSsQ6db}-b0A#DYC%BCnCKbB&
z1MJ#Yp@;bEh-%WIryl1YiA6+R7KQygGT@124HvGx)1nYh8;2K|8)-84SVVgcni?VD
zceZ=s_g0kJ-}e12QHPb`TXyZ963Z#^drDnSi4E`@UmdI);D;(BrTq1S9A0P`CE-m4
zKVZlyI(mjs=@mRw?g3Q+e6(b~lL2sEJixD4)s2ck(HIF|Y#Lv{ZNuU(V?VV6L_-H>
zESsss5~%TyqavV_o~AyJhyrI!v<f&*#&Y_d__3cZM2?fX?A4E#3SWaV`TurAJCE8w
zL9zjY?{@y+Oru|I@@b9!*kHdp)Ta&h$C~_cQEdvP!Ibu>!ryeV(VtEZ_D6M}MQg$a
zo4YnRvC!Zcv%$wB+68QIl9Yd&HpH)<mb4-M*igSZ!lw;IG?TlcnNmPA)<p9}M7xM+
zrgAh7<5z$DUz4<9{@APjYOnUHKW07?(1!bCBQQF`uZ=*|(|AYVOCXzG?VSy4NRZ!j
zo{3h&29CQP9p|TovKhQ*u>$|xWwmz>WX|Lj@awYxj-X@wW=YHaC1dj?v+ge$moJ&!
zmEAc7cE_3QJ{i$2A-i)6QXB7AC;PPV{@4V+I@PC5K-T7UMKiyEX1s~!FC*GzM6*E3
zf1>Np`H%}9Pj+o#QK5wiW((hmXjia>#k>U=X|YNE+R6UtWIw5!gfzBF=4X5LuT+}X
z^7XGgundH-q*zi_DCveJOS$0MY2jW$n_gYjy{<W;e<}49BOKY=On=V^2bf`l84fhV
zL1x%!hJ($p$qa{>;ZQRiW`@hn@T3{0;zqd8OfNFRYMT+17=hgg97a%THcgGN#R!4F
zWm5i0+$6uAY>wceY*#_AC<uC@Dd_J;w5urSm6CbYDmK+$RX5cio90((-86q}IwYr~
z#8*jp297WEX8HB#EI&;>(Vj_uiWYVC7Z!bnMQgsW=mr+8{lcP~ShSA!lmeVg_3O1y
z^nC()J%aJ%B;;y6XLKp$)YksK@9zmvTsy<B4hcnPAf7fo{-Kb(?W_Bg>G8>t<djI=
zXArw0B!}UBWIaALlAIQ)yUDQ9h%S|GeL<xWg-X-&l}7!!l|X_UB)r!0P0-Bfj0l+K
zY9Tr^A~d!GV;Nv9^+X4Ls@(}jeJZlTvv6&YO+A4Jxm;Y2ahdQ>qu0*#*Ua?8l75;W
z&t&7%{e5a%K$0z7lF)G(=s4&{9l8-`txa8ZVRNUcc1zcyt;HGhBkYcC67B)Ov=;A{
zY!6_j9z8|{@L$s4nVT2l@k=#v+SI6hguHGqqWBn5?C6A|BY>HI48_NYVrLP>bwshN
z6N+O2%=}|0t|N-qiYPuo6uUd2*dD;lKZfEHM6rht8GJh1Vh)+_MYL<Ic9xlXDxy7s
z=eK<PJPjH-+pjM2X|w&YIexX(r_J%l=K9s8K5ec)HqWmv_i6L|vH5;=rB9phk1g=4
zt9{x6e{7*&UF*{p;y~NiwKMh?#_Vjf$)_XQEhO!ADgVxUkzXBW(-!$-i~Z_Vhql-s
zYxS!eeOfExJJ1#1!2-THCcf`SwA=jfP|B|umiX08K5YrsJ|y8|(r)p&5j{FDLeW*P
zr93r1g7+XB(H*S9)AToCR5JNnMR#;T<Rw~gOTTx>bV%b1BFTjjURb-#k3MH~nI9%d
zVJ<k43nF9@_afhtM2pCNi_Xkr?chvT@#o5;#pETWzxg$!Cvm@Jv<S<JiwebJ{rQBP
zye2+{pKHp0O-H51Vy<?jKMSQ-#pp`E04Q<mEWwucD#y>;XPVusjeBHiR1j8z{AFqu
zNBAeiFiZX!velkvOEB01|5!&Bzn7Mb)Qgla;5#!ZaIborlhm$2X1Q}+v%(LU#a3YW
zF#>E0!1fYwn<FG6;h%FDK#gbLGAxKKxQE}-mGfV8<s5eyui;%{JWbDX8SqC+WGT9U
zwX6NQ!TD;xfbRgx6;N<PR0+#df?0#V{oz9K&EjrzR>DW^134*=f&7(v3EIp=&p?y-
zZod2l+@tAU_jdl(JYN#x(!2Jtgaj)ksFg8Zq<V2Z-o55sM)A2P&pfT*m;bXpFcbHT
z_-fuLXyu>NS_PJDl^>DtGZKkO%syT$_QGRECp`HQGXlv7WFxR(puA+o;PIDi7}#Gb
zF}o}NWOQi+rvI13_>(>AmPPP)dE^CJ`y_Ty-zTYo^+gt45g}?{?=oCCVfvRVBh@6i
zDq=Lpb5<8}WHV<?AqR*6jv&)wFczI>7Yw3aw3h!8k=8zjaV{%lr*<u>h>UsBwV<Xz
zGOSS`S%Tl1$JOBrlz(lWv-G0PSR<N?Vf?)O3FGtf@nEu{0*@-<Ya_in)HxxbCyT^A
zMIW|`xG$RSo$386(yODl7_o}gIeyCsvnXUi4*#w{zj67n4bRO01ajj~a^+nYp&?j#
zkPEpS>UJNYX1A~(j6h9?a14Ty_4r4L2q?Gk7})??&B(?GVNa4x5h6WFHb;p3B-s)n
zmM8HKL|PTHEkbOMlkE{wVkd2Uid4ZsqpI=GE_7t^lSbL@b)Vst&w*lml$boB;FlM`
zNb}WwyCm90cFOp(7*glY(LkDii`;x%)R9R&jvr(5EX94;9g+Ce5I)JMrI^UuG8O+C
zN;boH<0X8p2t%oVy^M#vwuH<-s$$^<2@4bn{d-|^PV>V}R{jP}!oNp>8y<L}H@Y)|
z!_GKcE5iY~E0VB9cSQheNrK^n4*a4JM4A#M#(I;V9~#F2u=;Mw<+9P&B6w}L<Nr6D
z9_~769qHt(9PL_kjL&Bez<jpboX>s`(eAL?J!a~M5$!I{ZpS;JIKdsr?%;`mLh%=I
z{A(7;O(Or?ftlLOQ$Wl+5`GsWgntvlxP1p?Kd&eFA8pYs<SBG5PD=Q}5O6Jkp;^_$
z3x+NWQUE_KJI=hV-3M=R&5CaD;0<kjH7McP3jX1u^?p4Q-{6m~_v1at(_rlQAVBa;
zGA)kty7*lY{&^qh7d&e<k!{Q)d$%jHO?hPR@riT>E_&LbAlmL1_}jxau&-?}@8((R
z$Qq}*$keR<hH_;JtYi#UG6h!nJ$JlszR80+gO_N%_(`yYG|tG9(2qhzfjI?Vuk&~8
z@v98$9I?>o6hD2%y*Zb|83*Y<BjKIM7mG5!pCAmf_X#7D7e;}c%^v*bio^kzesQC1
z#YW$kD9-m_`XKQ^=fqhF?@!;RhKk@}2Wkh9fog$oz0pt4K97eKPYF0^zRtHWWv|D~
zmY%`^BViH$U|2#bGe?dg87VI{d>y^bk2Rv({D4ZT-Hs_ay4}wa<FM_LlPNsl+ypK_
zYd*1AOvtU}-!aH=M2yQtIEwk_o5u0;d6S?DqfolP5Q)?IU-8+<ziV@j3*pND=R)8a
zMfEU+u-y>Cc0&l;43@VQh0rDEj|$-tQwV;O&vC}tsmURJ5sk~Hn2iK=X8c1wn0n!d
zVqlo8^HV&qs?{N``}yB!s@;KuY_q>+hu{3T$@wp=l7)EItg;iUZ1mUc%vZVar?s-R
zQ!5w$v{trsYUPr|+#(w*7rwwyg11QQRjEhu4>S1cOMBG+KfJvOm{iwwCtk0r-cnV)
zRPPU(ZW^ftGHKb0CUFuaUgXGSj1zTi$ByH1*Hl#}mCD4P`G14q%VfTpX+Y2*p%tmM
zOWgvk&ED*bfR=<nNT^;F-7QuD+JyvYLlRs6&+pv(UcFZomYvU&5Bk-6_x{e^mvhg(
z_nZoHt%O6=nizYlQt7Jc)N}F;*HXf<9ZgEBe=!b`V5?x0nxntkZ&59a4U?L&Qh>ii
z+MB?ki@v_(k|5VRU-AhG`vkB_(T8&#(f@<<8dL=@G$}|>$JeKR-PiT?$(?1XNIE|b
z$2ZDaeSB;qRTkSxAWE<u-{nrINJ)BY0HK0JO_fp9h<H3h%E&{wBXKsE5+?#yg_(^d
z!Pu@QG=y;LXziv#wy<9xs`?5~bTR|wY;0$9U>fdLJF3bSPD3lb!UL@I_(xSq2jJhj
z!j+}<<>A`E-w^JV3Kc0;mnc%yY^uEa->6mCWgAVE%L2h07ZedhW${L3zWb%#HU#xz
zlakoolzyp+)=^{abVTtWdbQQRsCRj1g{WoZJc<X!Vf%0xcIyCmK!?BKYOCNI>To_V
zPML<&Q2g;SaS78pE3vjo1-S=TOzM|cmBUcr7!|;UOh&+nD-`-1?+F^AIY9$44R%MY
zO5RJV#Puk?8FfO{#sz}UYeJJDD=nnIGTdV;Z=q?PJH{j&sjBO&y0WwS%FdcAp_}CE
z&`lEUtZ(V6>}(*6Nq=Lm>>O+NN?|(B?#g2CS`48hd1vF%JC@RfoX3RBYC~6+(NOf6
zLLUa>2NZE{wI5qu@J^pm7M6Vz>JbTQ#J*4zXeA7@X21v^WSoXm*miHmIc%#E8A_Ft
zZv~1$UK*<;mr8g4j<SPjK~>ybrgv7Ss;Em&@2sKUjq3EyT6?DyW|6od3Cv!J*#L}e
zbe(lJxaKR|?4j<gjswIf5SCvXRkX@F?(y8<@k%ZQ{N8c!vhf>KwB7Ploou^xqA0)+
z$kM2X(o4N^60t2+luXNFreJbsW0IzfMx!ygDZrXr;7somryzv9*il|6?lw&BY(SAt
z?le;kLL=dr6bEZc1!&@H%+l(cpn4+qTBQ&A201D4q13d$uP7HMjgj0)QucvfWUL`Q
zFFc)fayF!AhNn;O9GhwoQOF0neEUmfeuoOZpdmFjIWLS`)ciU#+_8hGQeoVFr}Ej+
zpkn4jHY;^ok*pRiyymJrb8$1zwRtx`k}t3$<vddt9Ng39NmUyY2rib2L3usm=mAA{
zlIIlbIxDa2j9$q-3Vo>t=vwq8s`Jiz`fIqd(=6&sa*q40`jWc?=|vrg?Iu;MRzxM~
zc8!F%>x5xfst;W#WOtpiR7iB4@)U)cDtC3A3UaBCJ*ARon(5SgD!Hdr(Jy*RwWp_)
zaZdqeuf(9IRNFnJ#?w;_ZuvDFpxskyI9T+HnnF*h5j~}VFZ7fejsiWUEL9_WN{z_*
zLXq{(+EUHFPBi=aRGnz{4XIjgfOfOzuZE@7ta#bgfa{zFTqhc^$(mLOEFUEsa9zr@
z8!%o)1FlWs9<V{lMgyjn7v!Dt-(PDzr3M=U!AE)UuY|URvMbRr3*-Eiopo1s)_dEb
zb2fqs46Ti?Pff--C|QCvt$ZN?MGXEL1xh)m@g;{lBNk|A{FykVW26BpJSc>b27l@K
z0xeSGBN;eIA)2e06vUSt_n|<_`IOCAx0^9}!*&+;6FIq4yJdXPQ|BWzd)8t|m`&qG
z`o3`bA^)S(X<mhjpY(i>8zHyD_4zVt!+EOlRApbP>h>~L!c=uTRiy}<<|xcU99fx6
zYk71QNU4={R_7%x5eS!>RCTJRmX(`an*KZJ8syGOjRuRoskaISB-n?*`uNx-u8fp9
zVb;AcIvU-8R6Iu+pyof5649Hgt+)c|uchYqo1*UmAvJB9a3m!WunTvWFH8M(cIv-!
zaq1^`VkV^=5PM4FcU{TE@1)ghIr>tB#WVa`E?7YtScsRaK=+7}pXez1G+{lru*9<a
zf>==LqTlF+C6?`CvC<~dS3XpO^?~56Ixiy1dGs!Hl2ScnB=7DZok1RRf}*Kmd5-RZ
z+lQZXxoEs{QyneU<$r)u6w0$HL_xgpl6@%^w8yU+O!OR3$sU(4>TpGq3i^&NI-DUn
zEADS0{s_rR3>Us6zh&6`7Wr1>y`8P{;^CD>i%LG>s8VOkJN+ukny6IjY%VuK4znxu
zlxQzg^wRvrO9vYE=Y<PJ$w@8e?{b;cis;>v7&DP-2ZJ7}x_aDYl4ZGcFgJj6Bj@Nh
z*fQRBFJN+K1$teWdmRPYw?e3;N>!jn5vtIA0Er>-01ca{1Liql)PbUXoM*~anVqYd
zUzV#LNeoU@wSz&&6^=CJP*42wT(#S|`evzI(Ks1Kf2`pCNFjb%wl-4NWUn$P{1>kk
zvTIgRBdOx9Sq0tP+%*k!U_E8<9EMp+7d=zw3C$4Q(BL`D?O?I2RrJe`)L<kKd`~F|
z1U#LvV{e1#hg$;edmH?MO9~1uNp?a}GB(R3+w^2-5dsI10|RrcRIMKp>TWv2iBr(E
z1qlJOMN-Db`iBjOT2M3wOOjQQXPU`zO<#5L929vDdM0rv&$ffbq9KvzkJW$?2tN4#
zAkV+gRDPnuru(!@B(gYF;KP4^aevCP=)Z&5j-p{jQhfC&6`Y0}j_4T_GLn+#utz8)
zi<Ntdz=9Zwirp-vM1+5uWy=544qxOVDABg{1<^!k;bDt$i&OB7Ou;jpf~|IJTMH>D
za&x8NGfu&+CECDmnIJLGEc|_^>vI;}Zxyy2H~~Um0XR%*n7Kl$+!Dy8-&Pjl;%Y~(
z!QzkhT!Vk&l!9SYoNWFn>_<akhF~<IO&r%J?74I#6$EZ!?N>ea5w--DO|Guto79e*
zv^aqw3(3jDe7hx`X@ay+cDxRT)bI-yG+vdxI%jK^9ky8LzA=!4v={{Zy-9v=g2IL~
zOw}pm#kQt~zkzY2-!kiVPFqK7$5869OM%n3Lk-GBDLiW*AF_x(R}SMVIV`p*8Rt~k
zn*TPuL>lCUZIo22Z&|g_o}J6NxL=eL<%dNCLM)8^f%AN%ve6D`BrorS<#QsD&<1ot
z_3QSQJx%Q`bHL3Av}lt8EbH#4!VtP#W~uU?`!*=()5MCXU+m-4{BkS+g;R4HaB;jz
z+!nIMa}sgXL2!|bdUwXUH2b8-9=R75Ysy@}Uf4{{Hrn}WL)+VRnO7U)`x@Hbt;_6d
zi0^M`J6@OB-w;30(Dp%H<^T?X%+fpo&vpWSMF#x6rpzeo*yn&Rr+^POv?`f{4e<}_
zTKzBqdZ?i_m^suCKitr&W)36JIo?3$I)P?opi`PMT~IvVt=Y#6Uu$Uls4nwbL;OfX
z+b4CIBMtGR4Q;3EGDjQY#~Ru`uge^3h`-*@c2vu}ju_^7W0>#6V96N1-;|ljs_nJH
z-r&ueS`i373ANSO=z}6+6%P%cIv#B01j3C;kZsgLwoyy0L#|>SYsKL4h6ZGL^1T-O
zJaWF&X}S?_22J)nE{5C(+^2Dv%oD)oQz|SapgAZZn9&)*5}Dr#6sev9;gvnSl~w;4
z77F$thix6UG8PhwbXEluKOYbpsrW0syS!Clt2ms?jyI_v=5u}RZ#K}lRy`3TBCEA~
z7kW)-VFF5Gj5u_0U*#Imv38sVTCmJ6v1<!<V8m9#w>u-PqvG6(eL+s+8=$njkbA(o
zxZ$=;Y~tXCTQ;zwdYo7Sl*!e8a8MOKebYvww+X+>alF>X%-7q#zub=vCYUg?BjjL-
zbKy&LhP**XMULGcU06QKi+iiIVorQ}pn3upOo?xIcYS*@7SHrA+}ox=NqQa&>JiAf
zsi+8ZSvNdUT*7Bi%kwU$!Tl7M@|ISOg$)!+WtlgXI47=Q?4oW01}P*?v=6}w8t-D|
zV*ARK9-Pa@sm@z9jHw+c+{=b7K3`-dE*p>+3(}_oGpfHvsk+RHU8Vp*F5+BBY=NRA
zPBo6HBHy<ga<H?#5GCIJc7tLG2zle^2&L#Y4JQlkm32t1-bAbCtBn)nJrV2yWA7oi
z(B8Y}tqLkt`AH3DNbK(qRL7AdYD1SP@+ycH{W>2jpyX9!8$gGmkB$lKAhgWrQlt-;
z_IEUeUieZ6mak~CwOgq?btH@>`$2-?BM<9&-(lHMC_k$+49)jcHK`EaRW=f}12|6v
z4WP+W0TzlGOiN$aghN%i(NQC8grJQf4{Vq>v6HzbM3NWC9FEuDuBr9*Uct5K_}8H0
zUuFw6uMw8*;ZlXG*wyq^17t0|)bUi1o02bFCE?RjLP0-G81|^4=cu_(><mq!d}RH;
z5LH}CLxrU@L`s8(7(UAQqD!@~a)X|}TwK*j1!q)$i!YhVaiEgYPt!*&{3?r^#uChg
z6RGi6I+YlSK7z8fZ_$KiR9{Wi^cFRFs)1A__Ev)**Hg=>5Tz)TyL7bUorY9-Dw>M4
zztg~_97;t*_0dQ*OJ4SY%Pid8y3+m<scUe3dJ_n6*!E4-5A;+$Hac3I99qDQb4Pfw
zf2zC(XQNP>5iZSgG5A&#?hA!yRCoD&i9=y4h0Im-wa=^$h#)DyRp}SYQK_k_R$9SP
zPvYUGihQ|o;U!hoeyChY@#Ruc8s&sbRii-c59zYM+;*|MQe;wRD2kg?#RXeKE;aT=
z;#!gFI>OWmSt<_E4c0{eh+B1C1#BJFq7_4ER12rR_N6-C{N<e0V%%a^%G_WLCAQp7
zY>lWoe#1M`7(q}NK5D5bYZam73P<>;Ye!_)7LJ%BbS?@ptw98g4NB}^;^LQV=P9jf
z^7+w}LBrY|nidikOACepI?(om_5l#;AA*63&f{A-JWZ-%n$&m$Uk=`S$Hz2#(V*NB
z`?w(}uLg?SWHiNng_7GbwZn(d9g|cYCzv8-5Y34Ob;b-D%&0F+qCrf{m(^gv*5y$j
znnk7!N99DRrqrtcfngn&Wi*YZy{yQAYsULUXJjIGX_*UM=Hfxtg2}nirBOiS!pO_h
z7sLs$8j{e$X{^>LGz}Zlxr*;n1~`M^#4nIRDZBc`)L;0ZGCh(CCWoq15gN2^q~)w9
zgJG(|U&st<6qCqVNajqZD4d+>G$P0O!ko{yP$NDbmyq(gauL}_U=OIQK59VD@4AHl
zFQot7nocEi2k}!mmbq)On<>J}1Z&`oVNiF^r4bTp`6#5p0C!x`%)>T|6k*3%_9ad3
z+UfwlCveYAMTpO-6R+@Og%lA{$o2(hY8}pPJnWC!DhD+I%P(W|c^tHk%VcP_I(L3B
zZK+7*^*lGJ16Vb6oN7SZNof;fry7Eg(M*(%Oz#Ae(k4kjAuNPZ{UfKN$jlWYrMM~z
zQWHZAr8afm&X)Nu=0ZvWHEDEJ*1G8W?)Z>Xhyy;FP#yMRgEo<>rbojutN(>b>>HTo
zzfEizI3KLVzHP<6t>k#X_&cZy_{M-Z9-SAHz&EVeH<Ye#5O2w|m1L8o8rK|-RK;?-
zA_klW&|fBkWzIwd>+|t#E)B<u{z+=Q&a-Meux-)rff>rlAyEZ4NBo;G7bQQI%g&9j
zb^1~)aXU^nq--qoBAjdpu%^1*<#j8>q3(M%wLB1991xin_g(QOHz%*fJPs}tG?f%v
zeoFLLiYq0$U_5(M!3tBvr?Z$G$p*hN(1S=NXxfOC!?84;AmCa3U1lo3(T%uS><<HZ
zGH8BpRTvCGCQT3g2=Vx9fJ^r^yfiurU7HAG04u+aPZ~Ht;tW1%@Y3l_r!seMpPpc{
z2c1OVm_Rnb!(+d=9z_jg1#VEM!s)>%c??D?ekCNaB4r}cVJFdLcrTIYGLAg#B$`~&
zQ$@>;h%e#>&?v(K+UlE3O_N?J33UrDusWRkG#ZM7CxdR)8hE%y*vn9DmkHH309Bwi
zD{~NwUF8?5H{^ih?LJ~0k$jUq(1?ocXTGG&_P}6aUpN;-N7Y*Halru=ZhAsQ;-GO%
zTtfy#3^|7MOBpSW@*V1*6jmN#IqN@inv9dN#BQb36>?w-IRg_5Q(eOcty%<c5Ee&W
zq>>TD`y5z5sX@eMUCL;x<{E$rga{(7m?&Ct#CGVLga$0$iRBTd7o*20Fqc!lqFR#W
ze-qUe%!xT|r2_A=t(1Z3NmZb}2g`|q+ewy+f<0uPiT(@cftu`(G3L<RAqJgFZqqnf
zn3AV>>=-A(iT<g=gA2zgm4d7f&`M^F-A*u;{nGhS42}0|0pduu`guO*smh+-Xe8kF
z#QVIkR>J(1eCOg8%Y6ybTp-O25(hq|jtk6!f={mz%|+#QASWo%h=Ai^nA;8jJ=Msr
zD%uVf&QjrCo)5E8o}`Lv=oH}|2XdhUQIlV+tWESrI5{(<R)`7l%VW@aQDDn?(I#cN
z2Cb%-+VL8qESHK<P>>Js_<q0QtR*j#Ye}ea{#VwIZP!mQHvlmPp9u#Hwt_+!d1Uj^
z3Zsyfr=%2yH($fh=;&a8T<wO_%;8YOsS!gYl<Vd&LJqRl6xJ9`lfwVy+bs`jiZD>f
z3VoqX*5ZX~?Ql+Tw8J@61?%wTO9l^VI0K&GWjIUJJHBN>JH^y*DP7+hW?cpHW_rGQ
zJk(E!P8ZA(<DCaE4@=CkwPS+qH${}Zd%e%u>95)%W~+xaT!Hv{_UevL8?4x;4SW<@
zF7|R#{)m`x&7HM)c6`x51^PvUpVRrs?@WFM<Yy##uLjZS70BkdMvy|jA2ow-B_0ar
zkP+$)17iYHFjn_z8bx=9BH%5yp?VkH|DXt51vO%cg;X$)^$3U7>O%q81tV0iqpwcD
ziEcYiHgTVC%2C5uErIHGakL!T3GyAMDYK^=6fRp%+M{0C-y%o$w^z#krZ#0}LH4&;
zvv0kfZGfJPvwQ_wb1n|vs8VQ;7ry7<`w6X}q+<?3c~XO7ScA28-3W)LG-z1AT2P=@
zb^O3$b8QqLbUSAgLrn?g$I5qngomST3H|9pRC5tkzbmS_2ziM&XG@)&4a=PUpeZvO
zz-2C}=5j4q69|q5oaI&pct0t!s1;_S@{Yl3)&rcCCP!>hf?nwSY<=9wVY!0f(E2fV
z(VRvcV69j&s<dJxhj%42SKtMhvDMgtx_lTT91oGqAw{Bhv8^gFy39_}8mIz#VTEKZ
z65A2=Q7ir<@$mvaFd}{>Rl!qG|KzGMg|CJEQhI=tQSa`DwhdZgrox=0u$_X4Ck3>M
zaHW%tpyOmxq^0&B!P7{-x2&fiak&}H^VDzqP@=fVQt_wm@}R=1rj<6dj#mrKk|}LF
z1&pbzng{I~zDkp-29KP=88j_b$s=8*EI?XaSGCmE%85>=5lRsfES6_grmDnOs*+Mr
zMlqK;F_(+UH4hnPs*IY`3N0881UD51=Wja~iEIu_k1iC9xNHGIo7J}vsM7*y_A$hq
z1Ff6<CXZa%?m2MvG-{VoLFL7L2XHW&l&MOMF??jk%_@e(7qtSaf)>FZYJF_>wjs@<
z_ex&H`~dqhkTK9G>)0I1rGm>@<r1OG@te!{E)*xUD$04IkKS{AZ2i3B9G0!^=NecW
zxu#JMITYZ#Rcw(EqR(o(7)0q1D^~+^5h=rx1ssyx9nae#mH~$Z{|1TvQXzY!0wk86
zYPaLMsn_|suA7Wz51oTyTD<q;hpj@<{5sO)o5dQcPc_a;z8}p)t8&}=MsRTn#TMX4
z(yun9%BZ(4mj|_p$KvnUz9wR``mw%j+tAn<rCt;j9{c%tJ9YDluR~syijre5jwM9e
zHa4cJ*dJf1DzN9m5y#iaJ$9hUFO)l{BFWQH!BRU4cMMzJ0vD^lr|Kwm5>ZN4%HRqW
zN7Q$hPeXGwX1K}<Ji}nQ#eAV$5=h}dMGD6CWZSRAu?u#1hoz*IEXtfAJD@%Tyh+Cd
zb`+xI>Xgn}_2`!kA%#=b=pJF{D$x8!Aowq6{#g4K?ilq8-Y3rn2#_#qiY3p-;sVlS
zu!I$t3&{}GB=-pjhw`+<F2ew!=6Q_^nK-{$?2jRQwT9j5zek)CSjknc`un&CJAp;h
z^xIADkT-Ws$Z-b1V5s@@QEiqOCqh`?HshQtaWz6_e~qSAy)`-tvjx<6*Jv>C{Kqs2
zOt73%ATEwefqqd69it5hrhT-*-!ap)Qd%w_n`yGT1s)ULQ^b~6;Z7kHbx4+wnoF3l
zN&q$@F`>iE#Y_b;#XdFtJ=J|+pS=71v}jgQYP7oPWn=eYAra)EgKf~W^Fp}>wOAz-
ztBz(dM0!_r2DgqNizl$|zR)1Nuzz}?0VV`P+_Lb3)G@yu5=q0*h&l=7+Mm!t(JL!6
zXkYzWr)ks<{)`zw7Q1V>1k1ZpQWW3OWn!?x*u!Tlx=g;arRD2Jco15zX;kKaA=jxn
zd+}q*V>0AM#Y_{ShKY~@K!KpZ<*H*Z2eN^i##6lSa+$*`U&HdlrE=Xck|(aV%CGqH
zfZzl|2>VK4kp<ff!#FJ6(#7`P?(!K``$tDD=BTAgBh{8ROHP|6vI2?9B*Q$tT{BR{
zXBcBo>%PP_-AD^tb~ylf7Kh08Gk|O4rHBg`bm4+h0$V;o$P)Oo{iyC2dcef~V*4@b
zF<0_#4r80d#vXq%mQjKNSa5b5HJq{7X3t<?W(Bi7oU_Ev=0bUHkiPhaAaacqLMN2R
zC)eti6O4$Smt4`GgYztGYvr*5VU&eY41Yq%W{FKyanOSOpuLQ!cv|ZR%Wb>jXQ7N~
zcX`#rqrBqWq{(wMELw)%UXAbei#bP*gsN0lGnx01sc$6@Hi1P*(+|(G3zLV)p<n<m
zdAO;dPSinB>ExF=_G?#E-OJ5yGpFEhWXI<={AYzW>~v|lQ7|DD#K>Zb4PX;P>P4&R
z`fVKW77dE#{<rL2ylal>G{hb47w(P*0XcZA8(1bPcgHCz!x_gyavTd4#<7qX$7mP{
zAr+o2bac`Bhd33_@WA#MH<h56!QG6lv!Ngu6+Csm{p=LEk)zV)?P5wUZ#IDMO@(?<
z=7y`xUqhK2T;{q9FXs)mnK6##IER|14ZG4HnWmdLxmz`yY`aD5D5yA2q9NTn&XZLC
z8sq26vfQNDX@&1BwvMuzL^$RrvLno()P@BPXIrL?ME``>rF`g3oITZ?yipR9N19T4
zVG~xg9Nkt0k*^=*WNqWReB85DQz`3{lQzF7Y1(g-G#3Sx`nT+KYBHU_V-pzUTHna&
z-L6RmSyuW;la)T)lrX!KN3n-H=v_KJ>nxp)$)(d@HDwlHK7CHJwbW&S@k4FbzDUc@
z{yK9Dye-Fj*zrC|-Zy0Kh4+YS;q@vn-^!%w!S=-}sP<{Z6RV?qQ6@Ny8!<sVRJXMT
zXs5%@K180@ELs?`gps(gW+KUNn>=l#RjH7RlWQVj@Lfj42-9d)+sK;gr`Gv0y=pew
z>LYeD^C)qdMmW=_5@W2?e$N%|)iT`6Sq)D5^(LlD_tJuU9O1?5-f<KH`M%MVS)_gs
z@$C}vIl=s)D;R`=Oo0><2WXn_RdK|eL!(js%_fCh5YA2!PL_I&jFf-G4MONcLmF()
zz2av{!IM%Y;elngnGS&nEW_TPlfG(iHVYYfyC@?|F3QMck(1aPeuWSG;<6XHP`c8O
zs<F44{MG-;##C?%BtMRA2n5p`Rk+ZH4iq`;g%8diY+$-R7%;&8ldxGp#Cq>^oCo1|
zt#3N=jn*yvDTt8mPwxi#KdRbw|JNc59d+&!L|OHz(xnen(z$PHT@bA;YqdSA!m5lK
zNO5A5`Ee-$+NdTs!v8s!KZheBkE+SN<0R2WRr+pFlN&(v{Fel}L;6FPg9c^383;Ri
zaXyI3QrITSrWdKKxS4*Z<Pafv?6$3qn0wl`HO?8yTL`_33Z!j&Bd?j-1{-Jf&Kb$(
z({DF*t%2JAmRhN|l!AUt#R1I&nidJFx5ybmV}<&8sE_A0Bdfh<5f=DgY7HSCn6Q{*
zW%U|0hkWdvCYRQE=9N<F<ZYcQbu*}h*Qjl=e)ymGlW#W};cG%h6%9;A$S}YMRiGE-
zp#41v?e7GEatdc8dRLA_?M<0AI8k@VHI^LKJhtbaP+`kK&E_*tspw%(W9)fNvvpIx
zCqw$1rp$N9<A^Juqncp^)p{9_FfPPa>({BUzj}<O&7k@a6_OZ=vbkh`Fq==pOa#`e
zSzf$mEw2%t<Wh1<u2o@rV3`V263f->q|6FDR;m`;FN6V)l$u$ivJP<m3es0Ly@pDr
zT-d~Zwvpvz9Rt+Lrw*t}W|b;Ffa+zJ)oK>1EnG6UWyt#*?0~U0O-ZFOfOR|+94Qkt
zP{8r6f{<+)R%mY*zL(?sox=ADe81}w!mU75?-c+m0XXggtOVeF23*g2(^W`>5mS0~
z83a;^n)LA|X=JBgojwJJkJx+7Mczxu+vod03+h4jVLvJ)cqJ{yXo#^Ar~NSBemM><
z2`ex#sY{NV>*ugZU3%S8KWEMmZb~tFYdvHwd2to;lIXiwvFa)`2&j*US*m|JA6_L+
zw}F>x1l<OkOd<PgbA3NsC1$GF^QuDWi~becJtzuB{Y}Aav4dId3Wm@B<@&Hc5l$~?
zs7tc0b5&Teq0)1g(+Le$avM<SThtj+*q!Um#-34q&;WT-Q>pi#fTH;vaYWlxc@fB>
zwyj40k~e*mE1>9qm1?Ewh5quK^yG2Xg3WVWkxrghS;~j=(|isE9ynS^AYT6CJEir4
z26-t8=>$SLkK_q8GbfxtbyuJ|JUGx3cAzIPMbKx;fN_9S2n${jm(g2@`UHQ{Gdx3_
z`$B0+A&qQgE{`6U$LccHOKx%dqi)Uy1G4F*Z0sEY_x3?p6_lr`tu#JX@QeuS;5n|b
z;hd<ZfeWMJZ7Hr=YC&P$EEN<6j#sH&13Y`7eCU<_L%x{Hx9{P3;ltma;1wqLNOMd^
zuOg<JigcL}Cjc+Ladkus3ggzyPf#5r$y`NvVNEhV-zTnt@>9)YV6Gq5b6&uRyAyr<
zG&eUIMrne2L0#(DKiH|RfZCwXn0Ny5p%{9ke2Jm9tO-z@A^+SJ<rlnh;OMG;k(i(N
zn-V)z-YVFQXwMYJo)<CpoYhpB$n<WtV+TrQ>JBv^_Y=-hK?c>o5H}LAb`JqYY{&;q
z1SFm&Ae7O=trbd?{ojMda5%ug>MP7rpVu4<iR_GX?;4CY{1_AI4i&@0be38H0IAg<
zNU7E3<cs6T{lWZlDUHW$yi4`Z;OPTC(?=l9+9RY{SmKXrP|^HL5%vf-qv=vlGeTF{
zEIR9HhJT())LJf!l-_e}l@D*zhx1gz1;3q+-%j#_R_ApEt<GIKX3jR6IZw!$^M_5D
z>pM=$j~_K<cBmbv<kydzG6SfKnYwMAaDjPMS!RJ5zXiXym^d}BL(A0V)Y@(}(aY$k
zE5^gscYIy3uGmogR<k8}tBF&-v-N<3ZNXh}^0N}LZt@1T&eZMeRV-U>)a@CKT1cxe
zGmM1HVaLlc876b8aHe^2h$>`66_(ydR2jfr-LVBYthOr4gz2pjwd;CedTWS!`-e?k
z*HgN>^@25Mw6%GK??d>Wufv}1pNMa<Wt~m$lLz<kmfoaxRSsp-hk3-dF!~62FpV}u
ze-qPR#rCUz1J!DqY7JA}Tu4P8saT++&k*~Rg@e_b$*a=m7A}@QARj7`JXn#vDwMvz
zio)5)<#d3b2l=@lMR}`kP|NODWcm2yK^m0MjOtcVR7e^PfHbZz31T3mUzK_j@lRBU
zO~l7sUm7v>dIEG^kCu#}Yvtl-gr#btI-uVwi#SrjpZci+?K%;P(y|a546C-`+F?~n
zfN#^$&A%yZL{WqTWnI5yyUEb<PAPjV$V_XHnbr`;YUSJCRs(~9d@j8xSobP-^xJiC
z8c)czK8-&)O8A=!+j;B+<5#fBm^sAX&Q;e8@{0>LHA&WeR>q2KgczcdRW9ZEljSHQ
zEC_<uu53r8C06~hN~QfBRY_^YOl$et*GESMK`ooWwCvkDR1WW{{%reO+?MaqF$}!|
zUUlS3ETgaIWi&UPe?S84J2Evt;$j_E7sg&wm9Fb?bnRP^TlbXH<L+`_@AQ$B%1Rr8
zFss9NWc$^=ywoccWCb@o1F92~o9UTLZc(E@MjZA{otp1n9LF_?<6gvZ58^<*S!uqi
zO8hBt39M1451T=*U@2pF7TWj$wB&`{#>=^lA3z&F0MuPx*FNETcY*dGXnS0!gP=VK
z)IDC;KH++=%XL4n+$Zkyy7mdz`wQ{xM?4R3Z^qo^^xTbtL$jb2gAflgLWgW-?>HQ*
z;O|MGIHsbTG4nB{K)=MM?`ID0;R62klK6fbFF3+S^nh)!Rdi)3BB1_{YQp5(%R|H%
z7bNV0tiUk`9cqJrz&E^x;X(W?{FV-7<rl^i9$@$=NtT__1Te(d!x<m7<xvL%{-cGW
z+lQiCq(?MqXXz~1#ykxccujBS(*v!_bZ|c%p<FDaOh;X#&M-~yr&gq5^o?y-!#GBk
zO~1h`Cw7&yc%fv8D|3tWh{~1^IF4K@SR8|a7*auZ6s^9AcHk7kW4gV%{76oOf7_Ia
zQA>DSFK{qV=pHHClMc<tlIAB(neXC=gp1~BJs@}`!S!6g(zZ(@Mr)>)?f9h0iha_g
zWJb~E`U?ej0R^|D@I8v}rG@V<9A;it_@0UH<xX-wmC5;OQ|5aV@CsLQR&tww>ENIE
zGIKRNyZJd!6Pa42gF*dk3gvrPK2QB#pzC|YkBXUeF7%8fPdDX+<;QLuc9^ZPlj~><
zb6xX<pG962>VR(Bhd~(W(@=K4y5Kg?c3V?$>$ct2I{Erc=Iig8GXFq<u5;yUy{=aW
zf+GQ;p-0Dw9a}w59nMllaV{hXU0KfkO(BnQ^om-}ZTg_lLbfF!jPVAi@tU4*aKfMW
z+0$o~N(0t*SQ`d7Oy6=g1_pHwe9K<!B}AbF0+(9F&3i)_E~GF!!_j8g9t?93HBpd;
z9ZgCFVm^+Y(qkW2`jMxUQPAIGq{>ok-zH`7mHk?l!}F(52-Y_(Ds`&4oRAM2#>eW$
z7RYcGxR`j0mw0wS-0Mt5+CQv>%sdK1idBLwu1ZBOM|nG<_{vmS^7E!tWvV=OH0Voy
z(UebBVzR%cD#~nel@Y~$dGc&+%3#F=ItnROfl?a`<G@P&esOwsgSYQ()NQ%a8QCa)
z)|9zLBcDyKR<T)Eqk-VZya{=mCiY3L#6jCBj=A8LuJ3nNSk84-snZB2eIC=SsgG$2
z6Y{O}d&uD)+hLIPa^mXS!t~iD1PE;zLbb^4T5x)2SuXLGKmB1{tvEMQ7P~{EfhZ(D
z?xGJ^Zl#70LODbI8O&5Rwcn{JgCSNCr1sXmg^LSN<j~4HOXacE<x1E0p_bz5VB%yj
zeRn+{v7r)cUr2N~ZlGfWmTk5nNbK+4tpyO3_-gOb0*=kLTxX?7WU5ly&w?c^ayezY
zC~OIfTt2d0F1FcL$u`?QyD&=sh0QiTkg&yDW6$XJ*1`*}8rrFQ3`gCE8r-D^LqT;q
zD((B|%GY%oSu6ICrV#TNAVx#QksCH>mLvX3mWW;`kv8<pr*Y1BIbV`bT-S{-SYsw@
z8cZ3n15sZugb)<kAm78onR-6c@FJ(E0s=25PIBI@OG`^uBFdNPtn^A6Bvu8m0lyLo
zX<y>Wv{@o5aG?<XeaV#pp15=LLb-dHVSkDt?mjI&Kg^buH84`Ku+leuIGeNjTK$VM
z_Y<pkKXtG&STv+5SbS4FdpLkU{*3`#n)(&ycW5-VkZd^iigaaN9uP9ZV+jPcmJXrm
zzloK`{Tg;z#65E>mp+G<58)|_YC6j;s6Vi)Ryui9Q(3CD2Q_{->`VAl;K*TwcyA!3
z_AM$TI;RICL3KV0x2M?qNO{}@koL-vRbiU(qD0YXO}uHVLIW=E#nFh{D<G5*UB-#S
z=P9kPRpER;$~LBP&!qif7~=wOYoMjjh?K7rdvSSJBi`$6#E+v94{;;@|3o7;vgyaQ
z^lUDR$2IWevMj*QK!w3T0Glg$Y#3h6?OM0nwNYr-wNkw+s~V-z0qYH-8pP4FAnQ*;
zSq*bNwxIo@89hN|_=Kw=i0|78IKruJV#)5MQLnn1#fku2`;sfrUiP^>Ab*BOKibQF
zZZH2!w3jEm?d3d`JA@`H0#0K&&yB@XGP1O=#gx(rOAjibl<sXY>?PX^?hY(+rTPFj
zn3<PuFi*G}j4M^H)^e@WT7<tYqT>yP5I2=4sHyPQ7qt{Bl;Vc6RTwYjnF{BYFUXnd
z@0&8WY904#EkFBt<~FTkR676Xrp!HBM_04>`bAUbF|?yYEQg`xZ+xM7Re5Hi8NUm^
zcbW0K&8sRhcboAZ^Qy{Bj~TzmY<sFcbB`In*KF&r&)jRq?=#z$)@Sa6$mX!_SJ}vl
z)oMO|#i;V+uZOMHsCXN(uDa~WU*q=E%w}KPj>g_RUV8CHeF(2qqOaMbdE!2kK96_@
z_oL2qJWHm(qbc(w(tk|1EiyTVvuvA6<omiem^YkYX3JpWO_`?=%$v-&{uvD8m~AWS
zGY^>Y2hFxs^_d6F_(Nvf>iWz>X8d8ZZEbz#VKe@S*|xqu^N1PmHQP4UXL?ZrZ&6gL
z#_V!G`pMhW{8deCZ1f|FcM5<d0KDr0ECJv>VvSV|;z(+_-w&{ragD8v!}qwZ5qTq}
zeXf#tsWx$Ab7D?&HocVE<T4EwLMh1ikv|kh$6U_eB>Mle|I*ZynTvVx16%wR?=#yr
z*Jt{W>=QaIAGDAiDY=}~gA@^Lam_D8G<Cj$Ip~xVL3bg71Vu0(5q#)G@Tl3gq&o8`
zBKW8{S88Sx@4Br(u0D2hHP4-^6_l&x+SGZRt4|6Aw;TocsjJ|YBaqVtzzP69a{)M(
z&z)q?D<nHf$)3kXAf03{GTXM+XBHvZXY`=X2}6QcYS^1wr6Jh^np09|b)Djc2K{b#
z;%Cz^wwf}qMw{BLAU)>_>062K^RD!*MEWii0IL8PbpciZ&}BG)0RUzi1;79RvkW_j
z^9wmlQ4YJ2!`TLM2!l6^&9?3JnZ;)OF|+O2`pjcy{Bg7G`TES`$n%YbSk@wzIj&gN
zB9^%Yz&ZfBU4V4}%qsxa12EqOSP#HWhEuFT3KPY;j@$V9Lb2X#*u{F2yI2WLfg<Lq
zH*v8paPoXpA<vzZ=bMn{TMWBapD^2AsLwos9NuaKRaL7L(Qhe4d0QdfTM+c^u5@of
zy6-Sl0yI!un>AOOwrEo~Yka5KNz2WJwEP35WizN3I%#>*Y}-|zc@k;4%Uu-PxDd8;
zfeaSXb+=O#TiwwTI!)O0pf+`@hV=Fn(!UMg_qfu(4Jo*{0N4(|eJ;Ru0PZgU1_5}$
z1sDY2K_`a`3OW2o%HdY{KIG)^DYNYXf95IV@L_ijU*H_><Q(oQ<nR$EhdbOkBy^gv
z>0R2?9h}47Li%37cVFRqC%zvoeDA{dA}6`G6q1{!<nBOn7jts|oRa&rNnFI!X1w2Q
z{dT6`j4v^-s>&=e<4eufuVj{*@nvS~<jgWNzTCX3HnZG}uQ0Ew%d9}|9y9#ZniklH
ze<2dkEpcIgxJ?;pQ#ykQ<%*?B?AB)33*pm|IeAV`V=K$K^sd01$(?M$V4TtwAs(Pj
ziQNV`%zO0C8NmXCk8Tg=AbZZYC3{EsV#RiFV+Az=<lQ&Q>)6MQKtR>5wRy#twQMf4
zM~mOyJSlT~vz5N1xdr>zR>z&qQ}1l{CGTj?CAyXLA~T!btF?EPL8ZwPMnDlGc6yKI
z@}0@PPa1xTV65;>uPf`S9?rF}9kr$Al*BSj-cK>4tpudsoRUi)2qkU}qz}}y%hN>E
z52B};=;zt1qjfk)xY7i1Y^AA8358mwM5jU~7t3nOFvXLTtI4qxz%u!Du~}(<Bk`<$
zVy9mi9i=y)um87>Vwoq3rN4a?ON?Mpi*zfty(Q~cO7y$1I<=4*^~=N*CYGD+cQpqJ
z-z)6z_Pd*XIHPQv7@B<bAN)#bG6H-QF?tQm9{o~Dzf?OSsw6KHXeUXSmsN~FBdyPs
zyGBQGPFjin$)EqAr&+nD*{4kME#>@w%~dZ$t)s(`td;Y&w5XW<FyqW>DE5S=4P%3E
z+3!gAvZPzieG<FIU-;86)eFHLmG~0fSFnDzf;%ck)_b|5zNF#rXa7W9bvL@|O5=YM
zgSQlu*D5m+XnR6w^-WCN*Ni)0|ByK0PtUFYsdAkX%hm-mtIYTSFi$Fp5B%xb^^-2f
z36EI5PR$IM@zp>-rA#Un;2sKawHaRn$kR%zQUZem&au69T4s$IUkhA6;Yvj6;MSV)
zb-*oATFXj>r(BU$8Mw}juLp3c@-@8#@QQmsA04f{;vKy$-`KXdG4Y;1eXb7A^L4SI
zx^QN_8Q%c%Wu*(Nh&(o2XJj^*@r@u^{@asmG~=5<vO;MaYAi*w;tXiAs*7fm8Q%<=
zl}h6N=JbWS5@hgrpc&5xn*|8ZyX#{X(Qh{6TR^``Nj%h?{<tJPd*JzSGoFt$vwhqx
zX8ajY4k(G<OHr~1o_)=DJ}M}mG2>f7xmrnl=)Xjo*+ZDe#B-G27d7L#xLFvp#PczP
z7|Cok<J%D88YS`ExJ!gc9&;P;oYNpcoR)27d^;%DDv8IN(@!*)q9l(en}s)?Px15V
zW-h<&W_%Fz>l7rXza;%{kqbf0c^Ne0&mzS2O542RR)FV?^*{AfcY1}o)3av$IY2ik
ziMRcir~>xD^E5v{<L9UR`~*c1$~<SrpGPPgm9}?EH9L;#c{9EPpiN5RBR@5sQc<x7
zo;_$=T4skCe*rX`mBglT={@60(Xa=eo5wND3ub&LXtpSc!AsGw2cFLgnw@5R7igYQ
z5^ws`ACxQx@;Ff^yqRW~8GjKpTb0C;=Je8%^+p~P4|_Asi)MT`XtpVdWzFg3C25wS
zX9;hn*=@#O0?l?M@yfWgRWd*9foE3a=Or`#GH3?b;z{Y&%%)KAT+xi@N`9_t76e?a
zFPrf_2<6%00q90Cm~7jQ!DQPvd3@Ys#$N&WxzgZPpACG)jAsFS{>y+_Gj0L6<I8}S
z8P5Uu!j}PaW;_qzP9^afP8^m1!(($jo?H02ou41o2?9K~qG^URc{9EjVeR@ogtga<
z4<W1<mBcB3dSS`1*aOcyMb{WI<HMlYU1|uFG;GgT*bf#U9<YYZ_y{Op`VEx#HKhld
zg%w~tS2sKKMrOo}zY6-76>(Uz6g_*0)0v#wSIzi7(Cks#K58sMAm^if1l?!G_XGNh
z(ozB#dzFTg{bu|CAXx?GiA(2zEhOW4Gd~y93rog$-pbG0`FR^Z@2D36QCiD02h8|E
zgl;LVwI0@Cj@_Kz(YZMtG~<T=%*lc*0vCo_r>DqL9HCk`WX2DJIREb<K5WKc1M%K}
z5Akbe{0NAL{yoG;%=l3d50@quJX7m6k|IYGN6q*#P>lQr3ZFNUV`ltyki4oSj$c&2
zu38Yjc#iV3tDeY1nb*zu8zA4OU?1ybsThTa*a{QdUt-IP8~7V${7umBSA-th648rY
zL*dO0{7p0d7HAIenWFXerQ+nnM#7tE-ZJBFgXW-;_}HI*z#C7updpWY>hZjnpZD?e
zetzCvFUatGke?6n^A3JK%+E*o*~`y9em=_2Mf_aM&&T-rI6t4@=ac+=il0yOv!9<!
z__>sy%lNsRpDXyelAo*iIp9k3YJRS%FXUw{Ki8oYzLI&{jK70YIHV-r@u$D2D^&{Q
z@p+x_=8}8IjK2$-!%FLwC2GfEjk%k?YsTLL_%#J5v+wp+jT|lb0J=C>E>3}qL)_wE
zw;<z@`aLs#9AO<%T0FtbFYr0X&G`F(94#8ZB;)`=-Z$eP0CMcokPpoG2|!-IG~|RC
zKMBYir6C6ia?*^SGHHR9SY=`fHek}yDzVz6)l*`PNo%9TT9Z~jiFGC|YZB{CTAd^|
zn6%(XY&2;Nk=SHnRj}CvZ@<L^pZ<&qo_nhaK6#r7o_D(m&UMfvZZq+$2}bfclNiCo
z^CmdG9VU3U7ff(tJ5BIcyG(FQFPh+icAMa8UNXU_ylfJmk=SDr1Ce;eB<>)QHEHTk
zSSHQuiJXZ^J8xpT-D_f^95ONW4V#$8ModgbubMQyB=(s!b0qegm>dq6G>9h-ni!!E
znHXvhn;0`+GcoubF)@lAH8C<BGcnk_Zeq-M!$i-2(?nl>%S7*d+vL`1QhQ6hYoZ~&
zXHpYL95<<!6YrZ;k%<pXs;k5ald2<e()`Iclc&u1CnleZ$b16n)G7n}huBX!1?kFw
zfo&36WhXu|TcAoK{*jsejxYI<Ne(zH1M|nhUKVBrI#sI$3NjNPn_cEmuJAr=<%AX{
zOI*DdH}E@yd0QE1a0ad@Bm()^K@B&R>6w_2{?LrQTNjvugOU6-t5X-sX7!YIc~@XE
z8_!JdRnlvkbM{N@up;jmT%&8OY*sf|5#JgkAT(tsPE$_mC?}^mC#R`#QeMfm{aBr!
zesHwMz(L}Zew><H+e~o}nCT&fRV>&a$+gW^dL8`My8ZYgxsLqS!|$Nmk3W*@$!`Pv
z4!QmKBe{Y6Hp1_)+mAnz8_91I{9beW@keqK`E7>Z5w{<IBsY`a7Wf@?`|(F|3;8_*
zzhiDc{zyJUep})9hTD%nl3U4d8~omK`|(F|8~JUA-+OL9{zz^ozd`sNcl+^2a<Cak
zrwnMa`Vp%H30euWo7zq`_Z?_x$hGu~lU&w}>Z|ygp=!+%c1|5_4fzxlHc%_D6*jzH
zIO4wE@Z1Z1OM|d~gMrhEe42W{21|0;Y<i!T_{0=8(Zz8gh{_THc*NeXQ@VngeOh)>
zW<P{X8(AJajt><IG93q`f{?7isS7gxO@_R+02iwUC)O;4krQET<}k3gKmovgqHy2B
zX}jX$uq*B4B&dVDS?A|Sp82iNZ%Oo4j`OmM(S@u&tt$-OX5d)IUlFwZfac3V!F9RF
zoRv$iX^wtPe*D)p&0pacDt>?(pmNCx3i+~8l(+2$P9L`LsZ?dohy}kqx^e7);-58~
z&F9*Wv6}2bj-7y%dMoy6qrwONM9ezBN#L`Fb3#v~fs+25fuqW^#o#nDVOD1_Yl(Z(
zJpK&lphzH_BLchFa}$$P_U?+Xs;?7`O^!esRFBGw7J(5fFGihNP})P8M&jU<3Q_{m
z0P~K<kmu<)sP2`C!J)q(Y>GQcnSs+mXfb>rQcDFf+Wkb1cGS34Dgo%+Y$j^fc$UrQ
zkym!(!_qYP9a8-5uWNoBh|i`}QT!gj(K<g03}fSBF*bhhQp4+rj6i15&Z-@UYj~yH
z?f8$#-NFBW+#M{HyBCZ=SX@w;Flz)8T@X2B(-ZWkJGuNzCzpJmHKpQ0>t*snE9H`}
z5TLn?<k4DiUO1)Yd9Vr@RU_igDw1r-B!`45P`(Zuz)=wDEie?O7X_j_fn;SMKHpB7
znuF^5qDqDfRnp?>0#w%j2e)&IYo?=Q%}@@h@#iiocA9eeb|BTssYdk7W-%tXLE_?t
zYAe&B;(f4G4P9NRp<#|FC+jCynBMt<8ootr2y2&9RlEKpb6xdixvu&B<+|!O<@!a#
zxh}R(OFxUjZ?_SU=LIR6Ri=ejO~{u#$hAPe>_!ea$UPq9b3nf0My_^{Sr77gAT2j?
zjf2d2kn4cVyOC=h<X#VQ2arQ<<T?jA>_NT&<cJ%&-a)?VLGA={pBuTsLGJe;cL908
zjoj!U4|<R<0(r=d+~gn+dyu<<e9evA>>!VLkS_sw)Q#NYAdh*FF9Z3y8~Kcbe8Yp>
z1LT`-<W>jymIwI?kZ-$@+Z^OO9%L5CciqVC4)Q$@(gO0h8#(A8-}fMMKz`sxKI<S)
zc#wG@Pr8xMImlBU<X#{@bR(a4kRN%FLqLA)M(%KspLmeNKz`~*zThBFdypeQe&$B*
zbdaBWkgo#yg&VocL7wp-_W^m<jeOBTp7S9019{$!-0dJQc#sEx9CagKa*$miH}W8m
zGea)q%MNmu2YCp{*>2<>2YI6hc^Jq!ZsaQta;^vY8j#&?WY$5>^B|7^Ip2-69OO+N
z<WV4Rb|Z5Ra)AeV49HvD$h?ER)q{K;$lKh=y$<qr5AqEl?{FiB9ORuI<eNY)bR&ly
z<Xs-*TR`6JMvgeh9uM+uAn$P_Uv-f8dXVn`d7m4(&q3brLB0#*18(Gg2l=1}`5urD
zxseAP<ij51dLSQhBM&;rUJr5ukbQ3CAqV-W2e}c*MQ-F_2f5gT+yvxfZscnY@^KGx
zGmuZXkw+ZllOE(2AfIw0k2=VwJ;-N(>~|xNImjg*<Z&REx{<Ft$YmbnRv?$Vk#9K2
z6&~dKK(2Hn-*k|xJjiW84!DtTImp!><Oe{maU<V$kZV226F{zWBj0h5>pjSmKyGj&
z-*u21J;?1qZgL~vbC8=o$Uz{txRJ*l<TD=RDImAHk?%XmZ64%@KyG&<KX8zP9^^+r
zKI=xFaFEY=kRJp2yc>DaLGB3I_trj<hnX`?nF(0sgdpqtO7`mb8MAGfo;hR2&zfz^
z^~_l_e$H%Lsb|ia@$+WKgsBsJ$@35v?hFO00>S%*S}k4=>9oo=utEw!TUi9oWq2#c
zTgAkYNzldlBk1`)sPRoKHT@}z3$A6Iw4XLl9D4;s5Ghs2S~|-T6H;aEpPLFToywA*
zHmAxE6W><?93PWLpmUM(_?ameVj^&2;tSzulRCpzOHG&J6KepNSlh!U)&#bK81l+g
z#jMU~^ht2z(NrZZ1N2k{t+h^LeQ#jr=dSwN8z}KGF~Q6`dtzl4vTYZH(!)wm^%b}_
z$AoNQ1aB#$M(C%<q5RX$6Fb8bJA=``5KhAXYhMzoG#*t5B6v--vg(Jl3Wyq&(Z^U$
zQ7IP{Q7FygZ1Bo4R9HF6+)$ZkSXHjb)}J6-&|#0Ls($PAU*S%_X_J>u=zkXpO$DLH
zGGEPRMz}GdHX<o)V*4S@pNdRLh55>$HWAgWwSC+;sr|ENp>AH2t)-f67SKY-jc|uG
zNrpuW!cah*VTRl<{kYENqJEJ0!rykw*jTn+f$k%$ph6JR;oNF2xd}R%c5{acX0L|u
z_$B_piPUtTF3zL%>FFc1eiSz%At-w}1cd<q2-zj{0A$H~mZLp1-#lkHo3qz}!9dl!
zR2V@c0Ht$4wKyoQzZ^teV#P;mz|+k()jmOm)mh0Dz2-^LD<v^UJ(w&H64zv}wqVgG
z8{4W=@3SDX<09mPg`hUXZ~I}*mu=ss<5q+ff^wJY?A4IO9MLTLYhi&sRcy#n#=c3n
z=uavJ&!#ui=Vp9HS+Olt+GeF%TPT{yhaedILmHeuZ|?Y{DT`~!vCo^8L|ONDd|lU$
zAPp@wl$CtP4S1h=gOcpiA>Z8_3J6t1xz^EI7QZgmrwwPV9OVUCW`;rvg-k<Ln}XX&
zoWRMrcj7DPky)%ShZ50_4;#@wZsYb5`>;_7K>O852r^UL$ZtE{7~7yL6LFdSRSu|3
zxLWNSbqull?6!kT;QRSQ+{ilMdOsL)?n(FRST=GCtjXf!bg!PxWftk#N$t<;kW(LK
zzjC)9xxQ8iVKG8D5-RA#S`5I^0$>pU$6Npo;q{QCtBYczP;jN@4UX(v7}P6<vt8G+
zKC6(GsOYBe9B#blD8)UKtAx?qm1Q$TU$)4V&{mZ-IttSUZ-(rPTxdWQq5)a4ZRLui
zahp(Yh17sh7-FGNb2Uw}8Ctpa?dAS#;&Xp`XMMJnE3|#5j;ma6bFv}qO`I`7Md7^T
zR0O$Mv5j2m?>b3HoMqsgA&bwN&JkLyw&*xY`W`prD_L*QX1!({B-dw63*P-`_(&<v
zom#VG{T{dL7ukHD6B9)o=Qs}7(Stgo4+<$dXWC8Ugr`rI$v*kM<}Q+xoN8!S;c`g6
zui0JhR7vU&Jk%c+QGei2e^iqCgopa$BI*+k^(Q5%PkN|7Euuc@P@gVIeab`qSrPRq
zhx+r9)E|1NzbK;q(4jt4lKLYL_1Ploj~wcAC8<C5P@gZN{@9_uP?Gu+5A|pf^(PK>
zSGW}QrylB=VK4Qk4)v^()Tcevvx}%tJJdIpr2fo9J*SBJGlzO^N$Sr%)ZInYpF7m^
zN>YCjbW_hSqW&UiQ{PmY+7tK9#nevR3rbR-@lfAVM197gzO^LvSr7GXMbu{<>f1|F
zpYu@PQAB;tp}w;u^?48V!XoPP4)t9nsV{h_?=GUg;86FJq#pH9-%~_A>QLWXlDbQG
zQ{Pua-KE>q_m`vqh(LG0p6Q`}pon^=L;YY$>RBG@hl;3YIn)oAq@L}eex!(cwnN=p
zlKMsubzc$njSlsrC8_6ls23Gc&vB?1m!zKSp?<80dagtLcuDGR5A_p8)ZGsClO?I=
zd8nT%qMqkaKV6b~zK6QMh<d(5y`&`dO&;o{MbtMr)XPdz-|V4YUPOJfL%pIT^#Tv|
z$|C9o4)v;%)VFx32a2d~ai~|9q`uWdy{3rzR)>0R>AA!+BCji+OPmpTed)QxL%pGR
zE^(+gmZZ)F+|-+jsB;0EdUHwY+dTQ+Qbc{5lkaCrQs3^O-daR`yF<OL^epJf_x9ph
z(8>2;N$SNO>Sv3n7dzC?m88DIlk(?_sPAx6zM~}dogV5Jim2~&sCSm6Ug)9TRYbke
zp?<L>^<5t7-9^-QIn*zeq+aAHwU>*i7dfT2rzG{G9_m+$s2_Exvn8qT_N3e@qQ2Wn
zd9EaNkB2&6MBU?1?=4CFqNkS(6;Z$F^pfF{)H^-YBSq9Z9qLz0Qs3iA`Mx6Rdz_T-
zFG+o`hx$Mf^}P=D!IISXd8iK+QQzlKA1+CKzlZv@BI^4c>LVqoAMj8gEuwyasJAoq
zv69pedZ=G7qJGec`;C&+4|%BHETVqMp?<3*^}`<Ow~MGBcBtPeN&Se2`rRVxM;z++
z!j4#?4`PYqVF(<)!|U%poeyecsSxK3TP?L^1-TRJ<>at%dXEFk0at^iye!i9!;Wsj
zKAjJ&W;<?}dV??1r_0Db2&<H=@ep`Hi890s&%4D7*_O<s5RIG&tBO!$c##CchMWvT
zJ^bIXnW^EHE^`Eu?qC-76T9k%tm>~ropbE&T7?e>U5T8W3J^?K#c>HggE_XE70ipD
zDKe?23YmFSW+oeZPWMslaKTzX3=zXuvn)em(bWXJrJvPfFykS_d=t7R3?;73rU!K^
zcEN;L<Rh*cR^CCS2m#Z_Tm{!>uV(RM;iMgfWW^RJ$`qNa;hZD)xv#dT2x7%{uqft}
zFobx&;?q)G4>fhR@aIiUk>{4!?z0oBG*X68X9x+?eYF(c0>9q_M=n{A)T?u39@#?}
z0>H_37SgAi?X!ZXn^}x0g-UN|en%(~wk0%{6wQ+3XJOq4suR&}IdPLab%;h&x|Pd9
z+g!d^Xzy>ot(J9!gq46T()%I|8KZbV!<E;Hs(DsVub0<K_@HI0Pui7W4`|Ii>j7`P
z6nG<p&w0QbE(PAe;PW2vrb~f0G5A8bARqh$nHvq;N}Fgwglf>yWll9_XaSTsXQI%A
zSgR}I7ljW&;<TYGivovP_-*CLsdw5?PPpZ&j*pH)A?M5pv~~ZnBpDVYBTSOZGs$pX
zxZ#*M+s%f#yCcGC>#T@hrVIi~gRR*J@gx1T)Sjd`67}5>aB#}5Vr>gUStJT}U2<%n
ziux#&B9sY<CMWK7k+>U~>I%`ZKvV@HYd}ak9rSxb(m5xBV){=4ZQIl6)w66RYsi91
zCmlWU+Gv?<ybFb~E25ptw10jnTJFxf%NIH!*v((s+2Sy|BT&*R<&pC^>CmEJ#a`8w
zIo!Dn?p!c8x*Wqb?7Du@tW4v(|2_y)I2Ba$)<0ygLm$2=;u3M*Y=1zWy&z(5E2848
z-uAUTg4`0p!MlGJrj&5HjcvSVF=pm^+gIxfm*izM*x^KNDwuUleyVIi4Z8Chco#$%
z_pmJ%>$&zrI(GlGI#@akLIwR{9a|u`Mgm$;?NOYbI*c>oEX#*fx`mAjQfZ=9p@Fzs
z6YL@66BRJ92Lq2C75P|&!Za|-=6rTtP05w|IBho`1FT+`Rj8T@VUk1`QW9fsCB!_D
zKv_^d#rCb)g0W*{s$lT%YTLwmWoLwQQT<KDC!?4)!WOcE(N@J5%2JbgO{efDcWPDl
z@VM6JI8=A?-k3;mD5b?dRoGm)hG1DoV=5%Hcybb9S0x+3=vY8NH5e>WhSDdLrIRtp
z!hrSWfG{;?Ermsul-47PmmOJYLn?y&q%^iDHk(tiIWVnLhgqvK7$8aMeWH?KvH-3k
zKv*b+^)voTsY^v-V4RDMo2bxcYP9;w5o{YxYn7C#N=2ZJzV?k}3fn{-&f_^^;W?Cp
zjp_@mR69}_lkec>is9S>uTn{Y-GH~LHz-{<h|0PF+<~0a@3gxTn)<?sy;XijZk7LY
zQ|4O8$|61*>Cx;T1jHX9$m#NypZ(WNBe^{kDeUq*98on@0~f?*U%nrNHk;#!>5+(|
zdFD9g^4^GFRka@p6IE7=ePJdtU~6eVu1iO38YUv$*f*>d`-W^f2?z<sUg4W!uMpdp
zeUwO6mXi$*Dbz2h;#y|$SVZ3xQtWKA4^!x)5h#KAS@!B&%UD%Rti#x}lr}?hVz0Pg
z4uT0~fHxI8lw3?vVkc-i9?s@sALt4cIwu0zT>Eo%ev5!221uhK&<FxHV_2DGo8!iQ
z$t>GChaE*D>~uyr0-K)qU~+ONh5}p6flcSYs{a^wNhqM-H5d?$<-MRGWy<do`(qJR
zSG9S3&^RJYakt2W-x}9d%|9VYk!~pQ<sa{Tr|;tg^4VIpzg_zmNWgJDeXiLK0*Bl~
zIKN;~qd(uA<7e#kx`3!)HopdQ5&K}-(8^&e^6^NpOx2!|rk2!67=i;hoi29xspEDi
zRt$`q9ToHqP2zD$*k1Z|!S)hHWwzYV_C;eafiPx;b1>I+onx+x0%y&odlgDsS8&K`
zse!3VP0*box;*=~oo(zT_9^z7qV)F88JXCr!G_j)VM7at142gC9C2<PJGoCpv>H`o
z6P<IUl}1*QL|+D8Li7@*zX-BdW?{@{i>7Ug9P#ZOvrSp4NO{=F^oT`S5{i>J>*YB7
zT@md^wklHPms6bCsmFC33ei$3WkX_hJ|UvxXvMGWqZM;#l%m|(YM5v&r;?!5!ICn+
zMPS!BKdZAk`c=?Wr>gikMj7siglot0>4|WvjLMUKQNsrmfAT!vZMmkps%kftO0`ji
z(-RBC>4}^$G<i)$dDRW%Qel*X8+tNgYpuG#166?j|Lk9ynlkTUq<Jb5qVe!AvscGQ
z&9)B>*1IycZMo8RuCeVorR{uU+w;m#f|*e>-ZciE1X<3I=NR%lAmraQ2C~<PN2lm%
zgx?==)^n#Zk}biQ7vAc(l^M|z<X3+Bne(dvYc_&HqQtcW)eVZ!O*GnE{m(ScLtoK9
zDp_*!w_RwAeX9FG2RoIvbB7}F7;kL<ulnpzM%tP$t=(wL=&17e=qUX#x@&w(%~(*1
z_;xf(*Ip;w|5>C`2{U-2YYeQRT+K;>je=(6$^T1*Qby18%<+^m3MoK9{G?}%k3BZd
zpPV@!woi5m+b12f$G6QKXUEqzYh16S?QNeuUTK-qWCW0=Daz$rl<mq7ZX6$&Gv4Q)
z;F~+%7f^iN<7w*gEyd^)KE_2nB8xc4MXbsq&Y{RfNq2W$i<19kpn43Kcz_no7~&}N
zEh6V|v2z}bPUjL0Bz`ea{d0cxw;fe#Ya~JUI0yKr()aa(@4SNVSm}FAsjZa0^9#OF
z;RJ-^_HQWiJc_(CXqUOlWv<y}&NuxilNXn{D#~1SmAR&JnQMmn<z-H#_sd{QO^6fi
z689<BysTKL1(j+c$hDv<zIjw5if=yE$hERYmNDZXCjI5E_Z7^G5JQ18Br79oIH(T!
zu{18aM1;PR!}^#;sC-M!R~4M*GV&Of8x(niXck{_qzr<PSOfzLewHB&B}Ps5;d`|5
zokE7<Z#6k<d^8X4tL+IzGRXA)Bn_8;iaCKeS4E+bOqYteU=}O(d85*{V4Se2OW<3^
zk*gBh-lX&*v^gBwt>f6v>c8^G8m0EDPH3@*n|y7v8*8C$S|}t+exX5rV+qAX__~hK
zK^uMBxY|ix`rF4r<Y7%rp3uO*Ti~$~x$7M>$FU1Mb70lBDq`zty=lDQ*M8ZQIf)@^
zAQGf%_&XW`XN~EYIi{6(-Pp`A{>-c~@!8VB4~H3o_3aoxb-b_bj&YEK%*f0h6Tfjx
zV%8Y)ti-9Mo5!~;9G6}&zHNU^e^2H{42!EHfgoR8CC~IN<J;~YhdF^J0YdE=8@qKp
z%?~3TuyRZ;v5;adpIkKo5xJcDW!z8*ESz#MhOs7s8`+X0UCS*i%EPb4_8Qx7F(ArV
z7YR`_Tf{2mCk$mLWzOi?iJ7ysOn*O^p5Kr;r<2=xJTB<jj&WB}+7h>oPv1U%>bOAW
zMngFHgws{Z*L3mL>YF-F&&)As88^qs%r)%RW(n;_$x+R^VpPEa6)Q8Ucg&bN!`C%q
zIM*7)ep@ax%SFIba&l+De!IhFOp*(ow>zD;yPUTk=WS8&;<v@l+oM5B!)znldU>Xs
zp0$~I^we98MVa~hd6SV%EDmLE#?`p>Jc(U_vKl*-P2Xz3%z8F<H0Z;(mATchtmLf*
ze6TUaXc#r_7&~d|ScNdOEblRrJqG>WZ6xo;??NNF5WjaB$-D47+eqGn-y4nOz4)DD
zB=5uTTqAiue$VL1+wpr=Pu_vwb9(Yl{GQj7z4*PLC;RZ*Z6qJS?>r;<Ab#f?$%pWJ
zlaYKFzc(AnNASDANG{+`u(2>3pTTUriIXqRj-A0e=T;QK<^t+0P+MH6vkvN+0_q%4
zTO$Pl(K+<1Z3Vz60NY)`j5@&#7ErTLqR+ZevkV*cTmdx`sOMd%nGR}40o4W63ocZb
zgW6d@%?4_h3pLw8y;wlq2-I#y)nu<GPF7sgzR|(HRKU&w_T`JPa~$lR0(LI2uUv$k
z>tM45Y&WnLV{7?jVub*AJK$UaJP+Xf#o&1kcy9qbAK;;j!SfyPZ~=T1z#|ufZ*st|
z7Qi<Hyw6p-H#?~P1=M-8jRP*!d8ch0ETAs%F-RBcf`d9-KrKLwueneQoEVQd>-9V2
z`2VY>%vka`8YyVSKgRDN8mjLPrRR>p9t$lb1HmgX9Q<%N(LDyokLia#a#nI-DBeA$
zCD}bDH>Kl;*3=(DIQB*a`XNv_Ey=q=^k9%hAPWD@NPvdoC2Tv?u+j^3p;W6jL4ihT
zzI$-2R6JGN%;xwG*Ru1&V-;AZy4^~5>rmbfu}9AF;g|czDva;zg*dD)rT6ChdVz;s
zfaqGN&=j$4sjvOX?-<*J-w>M<#g8uvw6QqQLWmQ8WBOewPoYBJDpc@de826MKfdGQ
zr`|09_W<}_1Oje|ky|p4qa{3r$J2Q1#$z!aFX6EVk6n1YhR0#FnBx&m4XQh7Y){-Y
zri!H*-<|qhU*=VV1+C;ruko9x0o*huOEZMwLx8Qm%t|9G?X;!0DVYHyn``y0s1~LW
zvguv0S(9VKYeK}%4%0F(8+qGKzz8yG5j#hO%iG_jtWu~OIqXgR+)NV|Y;9$prI*hd
zGtaT>umNj&Lo_$-GlWUjeFht<p&T7Sj^2+1D}w57lw8-fSlv4Y&e_7uHEdy~rR(RN
z<zTLJ+4K_>){{nW%@u5XRDR|9Vph2_jWw(YN$f~2pI!r@e1W8&*zygq;p$-WD39l*
z2BVs*k-P(jbVPpBZ>an=pv1PSf$5!Pa7>l8zo{z7+$supz>v0XT4{KTy{!AD!(j9t
z{2KY#OZW}tW4rMi#<6+%u1h~d(u5>Um}Ah}-&Z*SDWm-)EZ#}kQwoN6jpbnL*q1;1
zI5{wBLF;)KW1)2AdB0$CXM{HmQ;}Tk14HVWfixhW`1=7EEXsCVmXBSg5Fc+4D=B2h
zg!lmvKOd<6Lqv1LK;dV}p_^*VLjmg`<>Z*M39G$93fEK^sjRTm9QLL;?4()d`~xTF
zr&NV1F&m&toY<)isxXYVyL{<nY`DQr>dVG5+ZNknM(lId*Hbm&!YBlYAJB?EsBR7j
zqoy!hrP9E=3w_|eaJtto@2Molrin|=ya;}gTKvi~bU_Qfk1F>`xV~gS(=|FOjBubE
z9)R<1BiA~bZ-2uGX4~I0d`zBAzhb~l4#3&;;|7G{Ab~rYU>`!{_dPHZwM;B*vaz=f
zUr+TS6prIp@kiJ?74Ml>jNdVM^4qKX;LlsI7(Squ0jUOHp|sA0Z^xh(EH$!4EQ~en
z3qsrx#1)JKMtYOl>T6$Dt{_QHZ)#sf4t63Biozn;`-VR{j*ZAtoqVDCcvG{b{g#k|
zOHdqk^vLKaHd>7KV}`;*9*tPp^s5F2EjxIs#S;;YhK6pHYcUK1FcDZWD!Y=JqbD;%
z__Rb;hI5qM^gy}T>pf&t3u$zY#!rOX>Z|1)DJrCQp;26DzIoi}s_m*B$>zD_w$%7C
zOAJxyhmk#$dsi)tV^X0`Lt)W!E)j(<m6<Pg?^vaMRw!`k;xFg=JZv~c%mMGM#ITIl
z_BkPiot_G|j<USF)h7mGcAGY>Q{w_lpH-;=@^;K9O<5nHoVm7SHOZ=w9|PsnCU=Ib
zX`+oj%{9W#1)De#3Ys0Cq9K?-w_tz7v6Iu^BMc;y)AAs)wzN7WrUrH?ScEEb4T40F
zDvRxp`q&yFy&j;~>8P&*AX^!v#|jE<h0(`vsq$VY%FXrt?SpEN?eK)_Zh#qYPB7v|
z>l-v+!>umDjYqZ;&aH@j6Pr3mDRHU6_7eT{RP=H%OM*P)V9QQG$Zey_kbdDsOU>1W
zXjj~(MK=j$Qz5JU9m9`d<s^$kj!Wx!FtiTacp9-`u&-ry8m*%v*{stTTVn4Te$0bt
zhINWBsw-?<*>0*(kn&V8j|&_ryiFVN%&GQlN`40_r&Fursd}T4Vzb|b19MU-)S*g)
z(d4qTvWIU*F?f>=-eg4Q`FtJo#!!!+H%96D;biQ2adRY&5QdK^sN@3tT9v|>D~-iy
z=dL(<V&@Hi@}3ZT#4Z?0vInHpew1W4Y7N45c&B?py?x2MDX;qtoW98Z)R)<B;ETrh
z8^<Ywij}MX_`+!PVKFS_<R}!(Qo!khm6JO|l;Tv#2%$8{=};xO3Uq)Y!a#flkNVsp
z&}V$htAC83oR(1SEA)x^;migD8{&K<M!3xm_hr^{7Z=mJG<jd)BAXq~tOtW~Dgrx9
z!))<(q@}Bt>-|d9dZoQ9`u)z3m42bJdWo<SNcBho=f$Ye2^C){9yw?du7trRSAQvE
zlccahH64S5umwzQHl_Aax6v#%3`)#`#nT|_gnBitaK1&|^^aH!OFp(n^yU!M5DCLp
zA?jJusujI24`N4C*i+E4#c9+%&ql6@OT(EQW=Ow+gG1cl*4iy^oqV~S%E5lyfD-wr
zz|y`5miFTaPO^k~&#;}QeS&-vfhwz0ytnh;WH+Iim3ZA;rXSPrvpRTQrypn2{YHOJ
zX2i(GP8z-$BNH({jTlvT!8q=U8ei9c!`0g*;}DKip_X11#0^v880mdy1ALfIk{ec4
z`?33uW|49T|6EuFCtUl|asHInl6)tWc#r7YXEi9?7<y{Oq{px1-tAW$@|0G!b#&Bf
zUtWXFFT;td2XZZ|eN~MQyFs7wF_9b4T85>Wj1h4fL$We?Vaj48KTC2U`NVYtc&~;q
z?YeyIIwk#H)E<MYo)_mwPDg^3LG__93bbZem@=M&QKzQUn1tKQKkN)&=~!c&IMnLn
zhW4}}8#k?ec<3XCr<Lg={L-&X?+iw3q;tRR{4|`=x$+Jd8Uz=LIua8RDy`q>i+yS+
z)m7YOo-$%53`X?gV8r+!2D-(90iXe3(onQ2NR$7E#4Dxu8dWR^Jk5-gYyc^(yi6wK
zDP?+;mmJeGYmA~$b_aafSXanLWgzr5lH0m~pj*a5VWAAV_G@zT+*3(&V0ofTO&@BI
zmU~nDdAOlpun0uC9CwYQ|C#4VcZtz#CWgK_=s04fItS2SUkbXV0NpI0--lI;>v0~d
zvqGq-PF2WFpJoBvYP(!)ccY?_s^9<LM@R1;9i_KKGzVUzt7dYiF>5l4{wuUlHDdRT
zm0Di=u`kVel&koD_ve=S{u!MiW_qjtmR7rM_l`^7IUYN^-n_Koo^{XUs%TO8pV#$^
z9v71NqwJO8>U2nEo#vDfHfm^|Vctm2G~pcPm~cwR-GKCJ^qeS<-xTRuMQDod@9`Y*
zqMFNB(g+v<-uB^b@0A8Qm!%@DzJB|3M;YE(Hy$+>jDQhhJZRRlmubXg(UPOpS0k<R
ziKT|%5>y7|h_eXCMvVX`w|WACx@hVOvw3x*qKq7_OwmMC^VQ;_tB{Kv70Vc5n4Q09
zDI<DhF7}zB$TNuuOPoo}wSQtL(RcanW9mm@$()OQBs-Xxl5*`Uh~=J$QPSHh)__p3
zl~0O%(MZGVfhU<ErO!(2Sh6{Fmt&t;<UC=2_lgAtaj@@*MUU+1=-=?>?UNRy#|dJE
zZ7`d^s3NK!VE)WuZ%YM%@v`dR*-<gbeBcZ+R7(HOVg;8CVe)4YgBE@VamLCM0FN!N
z8tLPzY+&?$LY+Q+1OsT0=78Aj1|ME|DB}r-PZV4M>@9(m+ICX~^_3J`)TXHN6Mw44
z9`y%6g5{0?r5BEescqpOwEc5Ea-T{~-!(pQ_xN<r_<l?o9Ca$lhh%Vw?l2dUm1n-@
zW3`X?o_*tZNTs(|$5Ht#R<#r^!GF$E_BB~H4fzc7i(C1*#mGu7DYG4~k3oWw*(L-s
zgP6O&h!}o(@KG|?0~BqR{w(^-(O;fhkQG~6uDA5#UhtU+t{eYfFbIOD%%-0)Bv&b%
zHj~p<;k4PX+0<-$iy;|RFu*VvnFTd}7Yl=!_hxZX$GOIAdeDfSYg8o3pg}w|CH-s!
z$8>*<q>Gul%$cbzOw`#l<r!H%qSiEuo<4kWRLlrY9!?J%+eUKv<gj4`3_r-S>1~FT
z`H1yEq4+5Bb9{Jj9Wyl7VP-vG{QtbY33yb;l`r16@9q8eCJ8|s$!a?aIEs?-ka@`@
z!z7L;=@7*)J;_WGCNE98TXB!(O+54FF_3vPZ{`UB25e)%fB>%&U>lHF4Bo)(1`Nha
z-`hxXYz*FwH)1>9vC;qhPSssn$gz_z-~am%eXHu!cIworQ>RXy655T4gN``YHzd&i
zw2#<u9hP=tbvjQEAyeL^TM6CO33uu<JC2F*x5P$axT2A8Q1dx#5O}lIf~t=Nu`v@8
z!d$EuL|La2bF;4`lnH}HLBgj*Aw?~@T?h~#G4}oiatR3sgK2DcQIfD;|23Ghn8?2l
zO1sNT!F31VFg1i&gXkY-uSZB+=O)s2nc6fl^Fh$dBLx^jFbVgv5Qv$Cy0Z~~QuDo`
z@iv~{js^-Ltw3_dZXV&7QCiW|E!13P8l7g(rW&>$8@+L#SGYnMvlMM>x3=pR2P_7o
zng9a`UWnc!`$AH&%s{)@ptF??yF_z%2ML!>Bxqqc8u0Yc&qMSh_O)TTuZ?h3w5JYQ
zQaBAT$c+{ylDmt+z8XRRlk^rQ>8hn{OVHjL>)0CWydmxtzmXpLbvDNL`?O+cUwa5T
zzHwj0-uQ%=z94Jrj8M<~I@r=4M`zm;#dtA6qX8Qn7~|a@#MnX4F*E{8(}khuL=xMU
z!0HqP_ixl_mPA2uF(NK0j#}&1vEWSfWCG>+@8}7J3%Yf*z*;rM;Fwr66BmgjGxOGX
zV%Twl*zaS(vlyGe^b?S(p@~yQipgeC8`FU|rFkan9&0?igpAm=MHm9GDDIz$1+i>o
z-wP^59L@~$tes&`+TV$V#9vw6Z-M?(PPfrJ4|*^9jO_bC?`RFan+d;D*QxgFc`>qC
z1PIvxDJ`CXscW!0c*c++)WEd+don>go6au@9>YW2hx1aJ(`G>FF-q&CeukeRXFF71
zX`?1YW@QFN#W?D8Lur%N`Demn^v@(?lN;dmnwh;j8i7h<mafyjVqpNMKhV1iJGC)9
zEib~PJei<HT|D<|&}@KhxSW;)!RFyQq1m#uF#|z2GsM!YnKLcC-5Hb%p=&;{)W<Uc
zRLEPF6TvQ9KwK}Tv=Q&??vht7xSX1C^59}U@8A0s$c6G9a@kedQWv!z+5zXUPC-PO
zc6Ex6N(xt}Di~n&jFH}BK=V$J0rZc@qsI_)y*&uCAA|K-c=QmHzMVKUYXNzKLxl^s
zL75MI+Dwuisf!m_e0?XDfm#_V`g0)y3n`hsKIos%w*){-fMRkih6va28g9<C+$V)=
zUQwvE#Nb=nBN+PK^>r;H1ths1SUVN^<ef?c@97me*Pi;i2_KVdmy?S(Es?TODMm79
zNE{|YsMP!qOP#bEjB2~kDD9RD{T|=|3`;Nd`S>k($ReDy%LTqm#@&y&e%4NO+#gK*
zq^js0A6s<)XhrWBrRYAZXq=5453(CyQ3}aF0uwt$$0_m^Ul(_rK2Q6)ia6bi{!V5c
z<B^QYX2p8t2T5oVmj=^Pw1zNQu^EAeM`zUz5$j?lEwe@CWVD2UJt}5pF^uaXy6V$>
z@4<#+OxqX_je};^{EF`(2+gG^q8B9F%hZZj!;4x)b}%J34gH$vXOAHD88C9=gzY}j
z>t3e*Ud)Ex8HIi-0!0@3eE2w-DD?Xh|AcBs7To6)e6*_I9Ztayalt20Fxuv7&=yTL
zXw({6#+|K0gY+RY&-GPWy1qf9w6baG^pPywz0K%rX{YJP{`XCGL{`~1WK?kE30q%z
zk0kRzqe7VVx%7r4$}^N;t2=x%q<B?nn1OpZuC(oT+OY<x>P)Qkr~-O(%V^p$>9i{=
z`d!t9W#L_RQC)bz-pC$r@bD}2b96PR`A)Og$(rU`uqh+nc_E)&c8-G%*+vXEO@ji5
z%hRCKnZfr}Y!K@$%SYl+f*c>aZYJE@VP8{Puk_$G`O@JyVQvg7rhb|k2=JNl{k8(2
z876Mf8>2n>MA0ua5-_c%PymPKD2Df%MHgzhaeU~>o#o@sE<jeW+);P(_1n6W4`QXq
z4J97^mt?<%{!sLL(Byto_boQo2Z5`?z4qaQJFU6WN9pqqn5IRSHCLC-PwFx{>62Zi
z%@`v<bXgN!)<$&M#Qfkco1l1fSu?rIgQneO5d4*Th{WWRyb|N=TWIsdGJH{cTy8Ab
znYfYpFerLUQ>ShQtLwyu7Q`&Jxv+r8F>{T_>!}odg%zPn(O>AM|Fy#MP(^Cm;N!v}
z$KQw}v*fd~U>xmWuCw(9ZAkTA98^oAjh*$iUjn)<gAqY}p=R$ImPLvoYF9w=ilV=V
zxocSXXS3r%h;tQKD|A1_Ffj~+|4&5tn4gbnC}>(XjS17G^<szTxoc7tv>N(!6WXR?
zD059JK$(!;ME)c3+=5gkyC9{cJAW{gctLjegvBgnKT*mb*3<q`dfNX9J?-b7_Pcu8
zuTk(*^|ZgLr~R_0{Udu?<R<t;%UGl;1`AKb?WHtmt)rAOV)tG+9<L<FD%FBRALa@J
zg7e133BFXU2u(8YYaE$3E_HhS*x$@RPvwvzNU&zj|8^hW^g-!`5tC5jaKyCE^!h1+
z)?#S-qQ#gv=!jO~2`7QY7@~M?(x#{w?8Q&BCl-V*wit)NXNw-d4}CX##BmuAWl17X
z%UI$?6m_+<Cm>!Vf{DVDaeE0m9_(`ow?cn0lkfhPg*pXCf&2Ns$UNO;Dl}gY&>rC>
z70Vn=+$|bU<`Y3%_-6?r`)J&2;ky!d3A>4(@?E=1c6P`sl$wtPi!1`e9)d_nh@VG-
zuzOhI6~?uF-7x%-`cHXE+S?@v)`?pY>*?xgCdnE~c=zCE_W69cE1rK%u$?|%=Gw91
z_<CQw&(dpfXNsE8>&g};wm7=ocHYo+NgHnKEN`c;>)gFQRE9I@?{DqnZXq{^WkzU1
zXUcPai37Yu{4p($N%bG2nh(X+iS6{cC{L_DJ3MMHYq>IZKw1Hc^N9)!Wmtbh6El15
zd2$f9v7QtgB*MTeaUZr^3wX%4^4c~I)+r<vR9K^vsAO)Sm1P`Apg$-S<8|K?I73;6
zDeY8BAK~_W=5*Z8@{7F>gis=nPBs!9piq`77F*F%%1&9CSK}(cw3-VoDSTs)p8z0X
zpc|%d*D0Cj6fe(&jX}P5dzBun)qDp-Sfs@H_c*9?H0y%X4|&C!*dCkM9>-Z}0#V6}
z+G!2N>5{EnxyW7y<O<Ux$E26(pV=nJyTN9nGQG!2??ZagTJ9i7h+`;eykVi;%yfm+
z8MxwRBb0huagG(bEb*RJ<{?@l>HmbT+6Tpa6dn@KAflU`af$-RvAg9viV*l>!t3oG
zMLc_WPShI|Rr4*6$cA$AZ)o&=vyypFQ^XsZtQiom4vXy=KTnM9SjC{-*s3O_mzwr4
z8Y{Z8xW4WuP*gnEV9;dEEFG)xXE%TL^f>sYm0cM65zX`<v8bV_1Zx#JwimG!*Nj_a
z;Y0^P^Yf1gK`#f{wrrr{37JJ9weyE9?RvU)lEbqt(+}F_tPCwKti&<HM(oE{g?gCA
zI01uKF+|5?hl*iQQ{6W#GMCduoR!nc&>;F)1cy&Ids;F}&eNDlQx_me7NhujA6hvv
zOm)vx;pi(OKX2+r;K+r#9!dWe?h>n<LKfB6)icd(2^zwnWMhzFW&nohfhcGK7Pb5&
zWXY@|);|+_MI3b{g+g;v5ZC?OfSWA9crgZ^S>a--)F$dmJSk!}b4=7-J0c=*C>t(@
zGhtfYhA={sYg*_eYO{xIqBUg6(S|HpOjZq9(iyU(95P3y#aa#%g2lXVt{A*<h$+d(
zdV-Z(Gwox}^a7)w=>>6*$3D{w@|oTj1=$9Qa=ojmZVHz2n#HUMEY`?&*d(8n5|$5s
zN*<1@Y=ngft?1(jLeSNED6aWV_{6C?{SC2U4^Goz;^8($72>$7{2%d+rznmFaUb(5
zioB1BBSc?mS%?ZG-n$|+qdh{u-SitKL9e$M={2Q%NztE5cn%A}&2Ph#{MZP2=u{}5
zn8$WRKqsUah{*gu!7dL8sRn1IV#2huC{v^f_J9!i9the;%Is%A2%HtS!1;5K+BK=7
z53PnwR$+ygC0pariv(pBuJL2CxYhzp9SrKw#uoLCgTx6?tQ5v{)E|>+4+L>HbpKht
z8=CmR|366W|NW5K&q(e6B%~e|NIm>}BelN@sr?pG`vp>|b{2UVaffWA9y$l9hi#-D
zb|aPO{2Coj1^$eEVA!)$9E)uX%8lfT*o=-XL1qFSn}ZD4u?a_C3w6gk!L_<$*}jN%
zR9jedJ?_|r*4cts={etwp>u@KQFOpT$=`^V5h^P<P~`dUUctU%nP&BAL{DWojD&@<
zIFjU)9wMi5MW*!-8WLZ!vhDCyde6zo@yKJBA+mw~Y&rCCOAft|%i0ml&Iu{By+VpO
zd!cQX2o%oLO{`)<xaMEFODAz4?P!IG$JKDiHhyAr`z=D_t0n#vneP1kGL?&(nZ1%W
z0Y-LSNckPM`H(;t>%pkzdrW~82gZg=n%6aTPH7MFp+e765eiic5Ji$aX-N)~+=AZ-
z3lJoe$vFH*^4I#=Zv<Oe1v1x-3(RQOd8`kJBi#t&@Bq<n4_ijs6-?j+B5Kq^Q@Tft
z(BU9gM-!ZfQw+faL9Umfc<>Gexd9Ay5H!0)_XjlJ%S4-ODkUuTY}~;}uXp;O+3cz9
zS3E{$dDMdwm=#ezfys2^*Jor_;@7RN+l&cwH;r?wQG8YOusCSGJIGcE949Ob?*SMd
z2Bfc|X2IPPOb84hvX_E{8>2Kk%<ASir`$_RR!_&h!33|>_Xd%yPjJ4AzTOy)!3<%c
zD9f{Q(dYIcu_%~4Zv2B<gtD4FdRo+2^ev7_$aCuAwl8qE-L9J3zCDO!(RT4&^jmEg
zMwyYSTm~A8hM)?3_aY4uz1c&$P>_%S*wXAl&@kbp#{lmsY}ermMTgP<RlKi?)A$L?
z8CcuCt+3}Fp@^M6WQsi?>`vi$hV9ZRR64CJosM(BuhTv=7e`bD4rnrQ_Ce!ws)msY
zDkmz3$u%tDtxwn~t26=X@8cuDrMjkw2V1Q@x$ukhtwfzi8X^m$R;4F%(x-HO3x@J+
z8vlWhogC{pwHG}0i6DDSi_5JEH%of&>5LB=>?$U1oRfl=XuHLsv^cXPxvG&L2pnLu
zYQ9?J7)uCy45}hsi*p~-$jlFUYyKLoJ;;Ni3#*KSK_;pPc(7tYIWIwhG>I{067Eot
zX$m}by9IYRNTY35YJY}DJp63+bQN`*uTqGCXjWnqDG_hzibKCgf>N78UzP0DAum6t
zYVs#<!A(Ast;ib_mF%@tpdoH+xNOBINIR3g!Ai|kF3uK)Sv`%ZFVxdu2Cx)!X{AJ4
zDlpb)Nsi@a*|MmWc9%Z0<4JI!<+?^Aw^G5Iv3Kf_MDpR%HDl#sJ3BmM#-LG}AEq^q
zH4Jt$uojxVGeE1A8JR_6m5y={AVz6cn1cq)XJv^YDsehLf(rm*BiD{qrgxZtxN9_s
z1rnly7Iy2nUh%3bPRFY@@c7l_(QD@<sA_O#-qP+DN1uVBKXV$)F$f)VC@~jeT0rW;
zwzMRZY;q_(Ct0yI-&ODi$~U*wgvAFRuZJB|*A`d~R--f|d^c^?^0{r@{QOOb_B>Rx
zzMqXS&;~e=3dXmxcn4onP~Bgz@L4Ilj)N&UHrv?BW54~rrcg(V5$r;5YOI6T4BB3s
z#c(CFIOIeBiyE!9=Rs&Au@2kT%=JwQ?~~>CW_R)`SF-rtj01zBhBIop@1@NZf2|4?
zR)zRzMhAiuUxq&wfyrnwSd2z}c;N?IAx)lk!;Qj5KGD}`Vy+7D&&rU6Tpo&|Pg?s3
z`{!Cl{)n@&jme*#6~_!KSc1C%425ReM@naMzyMD&I+NI@iA$!PNrGIdYaz||Pvwhq
zKWzJ<hZ^h`yRXcvQH2C)OH)K>?N*G^gK_AJsO_f2?8VSMVVc0+y2Nb`_L3~#L+yv{
z2S=~6qkGXi9C@wM;SY{v)r$rVX%!9KTJ@0(1~p+o_MI^Zc4=nc@WH*+^?z9AH#zeS
zy7jWPb*ZxaUG})HJGXIf(yRQ*EDgbDmMi@hR_^*aoq|0&-l)>c7f-t~Rld~IaV2it
z_Ey8JW;uFX`C_6O_=+$qnH!qCQ{Xs`ehFZWj%&hSrGdCnUK9SO#*Q_?+)Xm{&y5{F
z$lWXh|I*lTeJFQ}4E?XhjvrD9Yjw;2*E*Etr3U5ZCDK#>cgIcWz<N9R4m-J*lBaj{
zAbG3q_y^m@{r^0;T2B+?Q~c(S`nU1&bJUMu=BQuEKI-=v=|WEvoK5hcG*TW*y&u9x
zYgU+<p$RSszY#i|e$@%gvKOR|+e77v9qZ79yLH?7*t!q_-$OX_`Tv}q2HqV~*s3SQ
z%!xhMfxd9YbvsR%Qg2gfbyLsuq5T@k$YWj@9_HuOodRz|f!nEHK7YFi8?`@y>yP?v
zVhaGzjPRsK3nxDTUq7#0xI^cyMfTnh{nsA?E!-BG_K_Fag?K^jVK0ATA+GPBwCu(Z
z`v=#(exH9j%P9l&H<<2h8bV{mK0`Q<%zxya2_q3&tul9oXh9z|OM6rTtbj;z3saTs
z!W29CK~8x2sS~#ww9infMs`V*@Si2T!IRJP!jlixeV?uceEtE&s=R5CZ?!ZDBQQ~v
zbZp3PhQ|j;rXYa={o&I5zT`8)N6n}${#Tk?vsG;PuJg)Et8g*0rfFu)7wpb(N3g*@
zk9$(o(3PS_<WtnBl(wUOFHsIPERllBzhdVZG*Oc|v9Pv@q%7HhF;5H+^FY8&1P?2_
zpuIgLti>3{@f^8J_YvjX&IsVnTPPI$6gJ+QLd^=_-ouE&VT@t*-x%2r>TS(WSdySj
z-d-_Q1L7JGZtYBO0cz_Sp@k&GlvP-v@8_56E42Ucv1tNG6XGgCknEWMz*~B(eq#3N
zI7V!@?o)k!JP5{gMlGd%i)`$s2Gt^}JtQgm{Qr}?HDojo*GVg_+d~G;0FY0TV+g;}
zi=;_yq!2Z!4~jMtt+C4+jmk_WBrdBNm3k*kfpeF=I^6HIxF(^Qxg(?`asA9`D`&7;
zxldPVnqA0QMuHmEp!;=I4y6UqY>g(s2;zR8vk@`a=q0u3fbJD-YW57`I&z2`L1~8Y
zVZ7gKT4Y0H+&m1w9lA<WVwP990+kLgt@*eV8-mBdO^R9%EmPCQBq4DENQGz0ovIPt
zCLh^zyP%BIHlF!V(YLQE6Le0(OeAP|tu)w=XVEt$F-;a?$QQ`CFxG{lxC>>6ioT_G
z{Yb9GF;)}{?mirf&`65n-0g|6qsl2opSTUi1}EqpHY-gM6^C?U?*2)FIppT5*|{ps
znn7j@Lm=5u#T4v?rrRXdn|zH}fyy_&9^jb=S1XwvAxyNxOpxCaEL)t;VFKKvch<=1
zlRZh}+B|Gz?+<y)nFAruOd>nJ8ni3qksy^2->N#og?)jqm}Tw>d8ZFmh{V};a8qb0
zhic_)uMlRkw>Gh3ejP3<zsTJglw%4nlrhT-CCv&WJ4jqjQ{m=UzEyXWvG93;h0(iz
zV{}CKAJU~ON>o)gzP&(Ik{K)(Ji+R|Dmlbbi<c8`Y~nfijGBK%E6p7X&3BYzp0;Cz
zrRBsa(Ahl9(}AC;+Yrk3)q3(>H1O;tQH)a=30MO0ixJOI8z|!=JTUMd@;8}1JTi~+
zya^-5$nFhc-7o7wT9OvSuf$pJ$b#x3?$%E!qnOUW83I3}(Rd-K5*1OlqJ}NsG<<ZN
z_2#ZrvsbE~O6l1kcH^`oqnap3ex6cVGcI$mR>3ZmB69N-5jSxng_=pyZJVd~vqv<A
zErAT;*Z#<2&GsC}Uik>i@Eq6dxxz030sJJc2y$G=?NiPox+~aY8s;2+nf4}-a8b_e
z4tZ*Rp`a-<t!*-~a!k4J!~L8X!Re@oq<r{)6R3c*43z&%1zT$2#}lc%!QLu-$u)cQ
zvBKS7vnS53+VD+f!PHv%@)Hz+4*W78CUczx4AA72u{~VBth(-RIWtCw-FYxZ0GN4R
z_Xs5XGAIq2a@VqBKTf?iMfvxK`f98Sf}(<;te{Lg)Z3am_J?RNDcY}p-)f}74c!;=
z3bg;ySMwz+$;Yh!icn$<coRj0TJ~P9eEy0M`Zb}jRYw$>J?7-_Fua6Td(4}*E(8$|
z-tE-JpvLl^(@|K-jOYP154BEFrXEy}sNb8@6uQ01ql8p-U6aR4KkM1+;D#oTR^#bw
z^7!JO{w9w<<k{Hd3B)~{nmoaTXLFM$L>z{v`JaxQ=1FIom$vF+3SzFG5_263Uxh{0
zagwzWpPI-gT$%er9&u&n7%y|<-2iO2)jUivUI8;OIt=kc2WHS>s=2>y`&&%iA;{<2
zSc=%f68;%4{-*wGV`Il!$jOh{lKi{6<><FBmYzDJ1LuM7>2UtOo@V*9MX9{nY7(_g
z%-_+JSN=x%MgFw6G{64G$~TEtKfCz*nPX%89g9-a76Y)N<_|ZNcGr&rEE4elKK_3X
z|G%a_V~h!QEKW^Zg8awS^e9;~kB-qgmZYX#m!g*B7o||m;uHbrm!y8A7Ouly>3!Z?
z(OxNk9b6xM!22oce|~9-Ul^FS6#J^e(iBBd`Wa%ws@4uqN4OoDUzY0p(SYfE4;rQr
zjHo)J)Tf&CmpP$GPbE~lQR=72es|;&irh$%8(op$$R83%R<+MiTb5H>i2SE5=e8`T
z9#d;6Hv7yNFa6;5jcz+4D{Y0Ga#qKkX@1hcENsOtX;`;!RX>9rNoQ0OPPod{R>T=_
zw%YLwhIv-hhJ6;WT@LKx6ygNzvw)rLz&;1qIS%ZS6ygNzbAX*2wcfyhyFPK3;w3-G
z=}JzSSdG{+P*^auGO$*7K2!#x3NN6fd0fk6tM!Hk(9DyH7vS8;=R?TFQIwP0@<Ip&
za1<9Zf7C*bpIgZBa|=0c6|x|T3)$a;3(G;|ZyD+utOQlO4gguhETGu_bEBW<a?Xk7
zGOvo_JZ&mt0~e^=%_ACNlP5g)YiRCPx>KGHxf|<F;R>$)-4!H1wu0oxR*<Z!;F_rA
zdTg6i70hhx_!Un3qK-1-+Gv%s;}v9F<dD-VAg9Gq$Hg84EQz|D?_U>n*}5&Y0+>C^
z+$qbQLSI6m-A?#rgjaASf6DIhRCZ}p;#EE0sm$x_RA9xGreFF8r_Q)mQ_jwggKk&;
z0XgSz&Q($84cnJOWwYaD^zQno>*<0UY$V<(k@%~|jy7nFqK?Morl>{|%oyQO{ky7g
zQ(Yz*=^fS`MIkrVbLzLZtAY&DlqR-Vw?u6<#XCSmPZXk?z&7XabpYN4z-kx3y8u`d
z^(kC^?lMSUJJkGrYPs}YsO>Un1J|Ml@C=u`i+k`@`Zx98Xf?Tvvfk?I#cfdt;FmEe
zOxvp(9edSj52<FyLu#3QW_HXAPdlJi(zUP)>5Stv%*^jqGw;`taMN)>%|E2(KUccD
zDStpMozb(MI)vuiqZ)O-4>tbdsfzNH+@dgL1M~s4ZBbb5Toi@}uessEY?Xdzhs&h}
z;q2KEws8m5!a+nX3lx?G=yyq=umrzL1BIpdy)IC=4!>)(!WxZ!*J_2e_+70PR^xYh
zps*b2-GM?ke&>e^^TYHzD_ocrrrxEgchuK3`g(wV4yf$AnlX+Q=>VRNULS=l5auAs
zQA;Um14BgF^<o&-dLKXz?~7t*I#y63#oGRgGDC4J?fsl9X6MSjs$dVZk+YR#H1D2_
z{IzQ73BI9d=Ko<^k~cnc!?}NG`v*_q9vy0B206|iaZJnMIADcpieNXy+BU=(Iw)e&
z^i9=ma?#H<VT#yHJXmPj2nbh`S`}I+RfOoL^i+L*ky?7PKC>{Q=9PJK2WaTHgNy45
zN9u4TdkgogUKGIQ>#~2RxPNzWvSb%qIS`heJqY}6;|cO5Y|j66kZ8@wT%ZuKabf4l
z!WP$25`7p%5BN2+OX@I%?~Gbo9~ztMa3S!nsI~PupyB~Is21HoO8|6F70?m@-RlNg
z2B7U#K+6EM!ws~QeVJAPEd|g{XTr|KO`lyZgwF-Sce_iO4Uj$Vm<5R0%Sh2hxhAFq
zbSrMKeL8{dcgO5U%>C||gNQlcjyZssgYKA}7=uIZm^I)V4^(w*4fIrp-9T#rbfgMs
zEr1?$1FZ(o(JG+T0D8y`v>bSRxC&@F@c4)us2f0!RsnSbsO$!s56l@=K=Xlc(+xBW
zK$R+>SpYi5)BMYlia#p}Z+0Nxe}3ta24TB-PZNC#+fDksw`uMa5d~pC3Ss|GWcFr}
z-4I}W8;y$Dc)qxe#wB(YW}^dxQNJSg<(O3Y1xl%R9L=!O{<?|Ho(aT8eH`Cf>fz|k
zW2&OBQc7z%e)T!=w{rZ^>SA~sj`)x4_-ejw#Zt?LqR>bD+qn(P&eFXj8f8bh8sv_%
z8e_+~8iKeHi^nWpJRXZ$TcPc|bnRC0H}(I};&lcK->;)M&7nb@wjwp5umYQj$D<?(
z`cEig6{F>fSbFthmS2&o`45uhyHmOIa_8m$t8{%TbDjcE%k)#|PUY#}k4wkL7gh$v
z=gIMf>*eRE@r6~vX)8y~xiXbs>EvAL<mAs|oO4BLA~my|TY?qPELG~Dj39u{^KeW;
zb#$KBwj}KBSR5{AuMQIhEe`YXZec;#`JN48eS-UWGyBxMV8~uufm)c?3%hw<gt}}8
z1sp7WsB{Yr-2JL2cP8X4#b-il=a~?e;@PTLiWi4VyJCfF!XsDZPqi9j@vfQ3Mg?mA
zf_c=+O0$RZ;r}K4|5E;+a#X}3|9dUo^lPekQ<YkoJ(gsl56<IdH`8@e5ajTxaN8|j
zPvH(-re=SuSb*>)nEj2S01vID7aO?Or<ei}1)Aij5ACQ?pjt~ejN_<RTv4Y4)Jv|Y
z9ipt4t*F+G0_Mu7j40jL1lO11EB}SkPLW}rm7bqi+9jgqb5uDy9P*e<D`}#dYKaD-
z%yDLFKY-5mQPnfEB`MshEe_-4%Kapj69wB0&*mETC1po8dq%z`^`s-r5L7=wovEYf
z6C53p(Fc=|drq=|bCHNMGP6|0cJ9P?U#H{}Fv`p%6e%b@#oYN8MdTnNG<b_-Nkx-H
z(<mMhkJr}*MMQR2Qp_0!E9{DK<j$lg@k2*m`ZSr3S7jdKu@fG*69}57;nUpEAAL+a
zlb-74z(=Rm3|AW0CTy2owNUBL@Zd#7>8%AqGNjCBS)>-v{9Hhi;@`L4(a^g4yi2{A
z-AzjKFy4zO8@?lIq8$n=8g<;X$198nRepkT5JzqZ&sO2Q%zBw|uxw_Rh83{n7weL;
zHAeRCq+%oB$4Gp$&d3ao_acFIOb4M&e~#PvIZ0&f`b&F6oq`(EwNz3rh|khOB@<Mp
z@DbhfQTgf;x*!_)CxTV*A+yt1ESJ(_Kc1{K;MgCvvQ@d^dj!?L!1C)~*fh@e5x~nf
zH(vUH1{Ph9s76nL@WaZF??0?Uj(jod)7<lf%cz`NMzdW;v&YDsIp14>nWk#Oy6epO
z3YQClqK)A9_p4~#DMn7M7{u&@N#svwKVs?irK+?CRCn6Toc0+>T6ZLAy;(56&+>~%
zQCko-Z#>>vdWFgGtMa7<MyI4Ni}?;D-1FIrEE^bdi14qn^zvCbMImJKP$mTv<p_iF
zWUmXOZLdYOsLy{`W0w+m1nDC2XdL}T(w)C**F|oDh;JLJcS<hZmiBa}hdybDaoPEr
zK>pqa_ISz1B}FS{-#Ib6&WU+*jJPYz5rypy_~;De@1yb>`U*QZ{HmX*2oHUf&iXTo
zg4Zy_drH0v4%SM0nhLuZa9*IWmp^6&^7|V~_frY`IQ+g}JR#E8skJ2IqJ9x~b_~T8
z-uF|)+kWv*nQY(N{?BgtV0bvbk=vJsnb7}ai?Mgd&w!^+0>Il%@X1pQwhpJ*k;*Xq
zV&%fcU?vQMoWy7O&i5Ps8SNp&5`7M*E>&6;JTF5a#n9^JU#ua(+=t_f0k+2F`!fNm
z4eg#ED7@ms$6NlwLGH<dK;bmUyx}h#YWT5-uz<EN4y0@Un(JB|DD7>UE`~PI!l!B!
zSBwyrI)8;{qn-~5Z7^Ro@fY=yp|Jzd2wvnG^9bBf<|Cye4cP}96x>f<96)u$e(_#M
zU*Tv2PXA6v{X|jQ_?kw9eUyYiNMR<VZp%5zLk%!=lz}<4cy+TcM`@4z{e7zMJCc%c
zmwbCey7s3qU)kPZlaJ0>MFi1Gb;Qn*5JX?7pvZ+4t_dW#k0OPFM(JU0ka#q%^okD+
zsuA!HHz1;?Fh2m-I1E`EwUQ8vXKauK{2H;Z_$byW?QO7Q_BIseQOv4P8s|k+FW+`5
zyr&^?RjBYb{hW3RIPEJeAn?WFoj3W&82tS&4%h>LQA9*nyUx!S;hnF~5Uz8-YWtN3
z;~5r%S$IBF4Cg|{P$r}l46P_#<4w{d{Ctrf#Oq)|8cU<JgBsi<TCk&mH%UC%#72ic
zvC-)yxL5slOL+nsrCm-}cQq8w($7AptbL*^o_3<F{i3W{RMz``8}5BS!|`+!aQvK4
z7tKMVbkM2cU_;?8`Z?sp9BL@MK|e>GI**DvnJ`6JZ^CPQS7F%i;#csi>xa&~Tnvcy
z?>DSD`;L^wnf+e;$*b8=h2K~%SFoG~n2f)FNX5SAb!Povu+~!+Q10_Vy&+k8x(;_e
zy;iWa9df}Nyr%x0Trdu**5k_@7;P~XErmkV^0Y+4IN(j2|I4bS9_7u^+qL9l+jTG6
z_1ix}yOw-hyI6Je*68h8_Ob1{5AAyUkI=4VAJ;C{7QHiiyOw@zyLO;m@BR_mwe;iK
z#R{tTSVo^%C9fS8@*101qbd88Dfzd&rS0|9qW8~{){;WVJgg=@|LMfG!>T1Le!#Ly
z08>D$zoC4wkra;Us99nsDL#1<DL#2$DL#42DL#2SC_d#z6Q8_!6ra3*q?*ofP5%og
zEEban0GRYtw)bM%#j{Uxdf~MvIYM{>N)i!Xe&SEASbTED;*%>DpH{^ma>ZYf_#KHF
z`vr7+>uNx(vV=1nC31dU3S-%Ol90L1I*L=G1lAf3S4FYfurmg=p)JSF4huSf{@^~J
z@P<n$vh<0wV(vZMld7jwfhw!(oakeSo_$VqAIvxAoD<#8{#`hlJ^NGW${41?U)e;R
zhFOa+-?piLr(!*Js#|HDns}eu0_cQ3ab67M_?=HbK@6r6IUj%rdpfXMb3V82FI;WI
zEUL5Hb&uVyAmXdrbdPA$0&de+exEk2wcCW_#!rEtU7v)XU7{^l|Nd=R?QY98qqgM*
zZ|OHqTXug^TXu`KEd2e)YI$Jvv0|O@wcNJ!@5Iv{aM4A-f5qJ&Q!(qA7suRljTOyH
zVzzN2<{E37ud4!MRrAtnFxE9M<8DlLT6d9yxm%S_sc~M;bNz3Ak1l?KHrho4-LZ4G
z^hf0q5tmEE?MnX9hElnqkIykzFv5R&?jmtig`d+;u}E-#xkS+}`ZTCra|71Wu`*_9
z=$%HHqEWV87qx4fGSgnhw$U=io<XREt75PQ+M=A>L{m+y_!LcKTV)~?lXWX0Q<RM0
z-_m+AB!bp^uejLG4!J7Q^LL{l)MYZlYr6th*>YJ8s^d2e536g3hs8e%SRKE9l#V}m
zZpZh!I=+`W&ZhV{#O98#SFHT3`0zcbe&<v7_(7}3TqJ^`$9#>)-D6JwBlP&j7*0jj
zOAX-Yry>+T+NlUdk9sO1;?F%5q4-fwML2%GQd-UNi^q&SE#YZabzE{&496u4M`^M+
z^r&jC9d*umNp&;rxDn?iBb(<wLy=9BhbTA4tV5K2?n9J+Z*1&X1XgrQ42LM=$`?;t
zl}Z;@rKa6LKR2YN-9$e(;Yg*20WL0IoL`kne#YY=xO_d%KAzS*1W&QKcj`0m)O!lI
z1oJ3k1%8O^dO0I3xo(h_TsN@w)D0<$fFT2?rzoB30#l+odD}|$QWQa~i8*)C*T(Eq
z)s<kYx5g|X36?9_>sc{%TMVkef5!cu^9(5x<JsKnQ(ZW!SrqhitPGcP^(dpQUg=my
zfk|zXJRQsF<C3;ZJRRL6DJ>5-ds@n+?r`?;D6Iv{L~ywsEZw2!pH*>cP@d4S0!X~w
zVf)?T((5=;UB~T9h$y4*x@y6$cVL%G*bNTs@+#Oq2X>i+?RQ|8Rl#noYQqu0ZgQ3$
zwBZP5*5(-Tf++6Lil?yIj5c3UGjG*<I=^^@myJQQH-{D0NXzG@FIF3aYV$B(&PJ3%
zQ54gKiw}SceJ)hgf*OG|!jh`K)ER5`WH&V^`8VtNjO)#M8Lse4(%HA`mGQ)?JdX?y
zf5$uSg3o$9<NoZ=Js$7=CXdqSxxdNd{i0_}ED-SdAEn{XA6L7DqAmB~cnZK(6TEND
z96TqbU#1K(#)R=~yGFw$vI!7~zlb`i@|wf8*mIdso>Au(o>50ndz#XoR;LZB6FUag
zGSt2uy+kc5;1L$SUh`+Xk~&HsDVbl_D-@AmsN$<noVj77ECO1n7CustTRcayESz0h
z=P6HgAhNG09<(CFwnSzndrMe!0&bD0g%Gtn$FPe+ajz7Q4Eap<h~cNMiba%r&0ZM!
zHeRKn=<6v|8aS{6E_4e!M9Q%S#*NlfI3`lJ`>crVK5kNX9d3i=Ug9}m6lF5CgmxqN
ze?d6=lIqVrr`l=R=TtR!LM{5UCsYMfMqJ^!Bc?@s{<E+M;Wtiv%^vCa@*-Q6>>9p-
z-18WY($yMAmQ^G3ys9QAdp$H36KE{hAp_Gqm6basfwQNm&Nqne;?F3aGBpU%3$*O&
zuy@)U^^`(92G>7&3mhW2I~0#q?LI~9e*45VVEbAdq15b}i9KAUYbKutFtJnq(t)OY
z?L0i(5h$I)3rUYP@IxsJapog)N2~#vVU10{ZwCA8o1@kIHz<B{VSJZ1Dw(h%zx(ms
zg9j|RmGH-0<Q%2-N-sZFnP+~<PSUv%rN`s&lTvoKtr*Iz345tQG!@xd@|*R7*S=X#
zp9D$q84_|STm~1)^aVWmN%O!M1w+Jpiup_CF@pq0g!eUvB{K2S7{K>wH^xXJd%voR
zHz^#N9(6Q@uW=1BMA1*3)WlVo+zUiJnHN-LIw*pQrwY<2v=|0%ZyO$_jtkCG)TD<3
zCIp(9{8VA9LSJr%#HIKIE8OZVDZN-yw#9In<Y&ZhUa!yHoXXss@&F}xC;P@!=Ejt#
z^CvCsno&5e(tM;Ma9Q?-aN&k9KIUkJIqXO2#&F?Aib)qv5<vcz6nH5WSjkdRuvm)W
zF48Zot4L$mi|3F*G=qCcU-IDbN-gtvgZ0#<a4PGs@SKJNGm~F(OX10JU*_RPJoE>@
zx~D=0NN&t-JYWRpve<sz#fyJEE&d02@vo@(oBAKL`2PfkQ8CB-@1B@6dJ|Vx?~PF)
zdW&LR%5dGbu-6LJzBrJ*HSFc*NiEBNEEpOs7@v`G3gRfL3zOYiF?>NEuNb(t;Z0A>
zcGY=5dF@c`wc`NRj>Z-unZ~bQ>hY*z?KnhhM?F>$^^2bEu|VAC-$tF9I5ZK@cwK^H
zg>iUku(mxy1E8lnFT`E=y7pN0$}(iyYe()yHS;2|+KXF=?K0Oc`sDI&5+&WCo7ok0
z9=R<15f>U0bIP2MT~J3A%EiFC@?lLOljaXm3r(QznnjAk4}+s{!Ee&kgNW04NlSZ3
zOi$2osCBhgxG#W+t2A~e7!uzkT9~ve0J<DT@_@zUB4Bb6!Q}K$<|)hs%x1h7*cb5T
z>*saW4;I6a(9B{O<{y~~T<f>A$KYJO7-RRj?NQN^Bs+Pc$k$bB6r9qq&;|gr7|lKr
zRf-|J6~>LHk76kMB*jJPm(r|3B5Vpgj)FbGeuCJs;H@EMKS{xU^a;d&h;izPzl0OX
zb>TF7b}a_E@m<)-q`R`~!b&lSv!f~kmaDbjS*-(AtF^zvt99Vq)f&E{0$8p6yjmlG
zb(&Xe1gchRM7URL6H9d?FV&_|^pCzym+h47ZDC%e1J$eaj+hqo`5)o!@^`U5H?;@&
zT$>hk6tgWV-<3%8(AZK8u_JzVvfZC+YHRY~{x6&uY}5)H@qpVVjnC2orPB=@Ds0lY
z<?s^>$4+oHhA_P8a!2|#c7m`@;}Q1T&sNsOS;C=l4j_fS>4}0&S0NP?VEm#O_@?qX
zJS<z(#!O|0E%(J7bIf%RoOjwgq{D6|`G0Za2I;$8Tyl2|=j7u0L^&TdGVjtZVgsP|
z#H6uCo)*Ln;mig$*4WFHoyT|j!baxp@rr9#^7{BL0@=sa!+iS)S0AN+Q~#4HUyow<
zyDGn*_wi#aWBvXx?Upx&%ax8zfIQ%=X8l;r4m#nD2p{4GHX^(!oL5Uv;rLVdzvA$T
zF)$@~;1i%uGSuOiG+8$C$~FvZ?)~vb=Kb*s3pP3GX;_&tV~}{N$-aX`Z>N+qo5LRY
zCZ36AZgf(%xKlQUH(M#NVmiWD{2KHZP637}fZYpHhutL@q6AK&zQe%bK^w~tI#~WM
z!m@!y`KSxa4>@?-2E0A&qL*zz^dlTGMs_|Z1`>S0z;HgwseJ7xvn>o7C|9qnhTW2*
zPD}nDwPY)ss=8WI;i6hlk&g}hj44Lz?D6uM5~KC*27XAE<E8*t9?!Arx(4j^{~@QY
zPK7GF3zZGJDjSMPD{Wlecq|4Rqe)bAb0YI_lQMVEgdYIEUgz<&-qS$RpC1vunOhpY
zX3yNg)@vH@gR%N`43;$a!t>Z*dhU>s4_ZwJwths^p%@uOnG18kW(5UMW?1XBE^MeY
zD;0>bi0vVW%*~A+g7Pxd!Ul-Gx&4im%>G6qG|<Pp<B7^3C>r_jHemyA<U`w_l$Jy|
zC}-M~k+evQ(MD-C|0lsJYJ0pIhfmlze8j=wEa32N;PAK$hfh{f#>k0&qPpCZcDau_
z<#wUmdr<CEu5zEQp7`4_@poY2-v`KN9D>~rf_>Hr??CuDXG-5UVoKlVO#J6R0ZL5#
z7q}(=<eK>V8x1iYnD`+h6B=#e=RzhWOdoR3-wK*LDg&sX;r5WgJmf_iS7irRvw^F7
zfq_#lT)h;-Vf+P>L(}f!<uOXft}uO?{J9%=+k;#$J9yd!JiX$CcO(3&gONQWFtW$N
z+iRZyCGd8d8RieLI&h0VkvH!8Sl+nXK@Aw&Z*0^U4r=BAH9OJC*IlT2gUPcA2crFw
zhfpc~Ak+zNLVYu)c*Xq}<|)6errWpd3QecNxu|e2DttQze`x9Q#nXCH`M+<ySJ=;W
z^rWWsBD}rfQreP1ulNq5Bw-Qteh~HjDB)c<Cwh<D{9|f!>y8GjpVGS7XuYpGxKjjc
zJ_Ea&N>k=olc)8O^LmWZ0Dt$0z@P|BG4O+<Z7%-5OL~Uepx%^`8ER4l&q{m&?3F5h
ztf{JEcW|c&iVOl{AH=-0$GcGx!odEp7;${xFTRI}4A4k?)6U40oT#W(HcLMWDmPrD
z`|Na|JAKef_uJ`yD;@Sw8^svIzo`{VB4o_I-FhYl4?DN9fTs<??n*Oo!3U<fqB9mQ
z{*$J*)~0y~%*^+sGQV!3O)*UMXiZS+n%Lg1*;9JFsZeRERH$Qx0r@-Fghz~v45`+A
zwi=Q?6?_ixrx%|DZ&7_Eb0EyaP?1>u&?dYm9KyR2gtrf5^AQu?&A9r!8kDvNl(srG
zZ4Cl@5m=L&wibbX2&_#_yA^@`2;7>Qb{hisBXC=4+U*D&kfeKiYT7!456bYm)U*u<
zACln>scC%(KY+}Asc9P#IE=u?)U?eA9FdTlLHB24xbpf<qK(^A&7Q*XCi*q9gl2<2
zO2?aMu~X&_<k!i>buzKpL!Xq)i{sn@O#NY6r8VDWRMG|syum7IgHuwgGRWS3Ov74m
zX{9#!3-$DgG44(t7q19*#{UR~ZX8kQthm+Z&9czVR-v1Jzdm=xUCd#294DavP6SMq
zw;p8<09C9}da^0a%DUEv8*u8>`bY!fdRiZCpt;{#7LZ@11fyZlD4l3Z*EZw1T(bdz
zp4Li35Bft{AWE3TJ2*Q;927x<j*&UZ3}j9mT<m}%+CWSsIT0*_+VT{5L{jjGvIve4
z3G%Dmye7X!hG>@L*3<X;6v<urzblo;o293la6frO_O(^nZ><X5<|=FpeQ)`s!gz|!
zjr)lu?B(7JrRSc*5Ud7=2y;gpS|4iok>a#_tgGEaBANbGe&lspihN}&pVeTPqxaKy
ze+udrk>2_Q?Ua$z>c>P^KZbIf=xftRaIQ?1J-ISowP?+YTfE~Lhj+{a?>GqFF+XlC
zT6bW+9>e6lBQ<R+0t0gLZpGwX5VuZLc+q+QnXii5a>E0V8?JVf=rwU{7@M(vJ=9Qo
zwy9YWbor2=%fSX2-!m815?uP1#A+ngm;4<90X8W;)R1}ZTvGCQu8l+P`5Vsb9<r@+
zPHjz@m{asi6AHq6?O2xHOc8?_2sv)L@Ynu8c>44qMkpIo*w}mC!QOme?+_5MIBvP5
z=mwydHo>{hM0)B1rQ-<FSHztQ=PTp#xY6+e_h?vtlmWbo0U+y^9t}%ZrDgGflW<Or
zid5m63<unCRX%WU$JX$r1u9y^EG@mz)cF-*d-WB{aU++5d);3FMCQdNPv$G=>P>OW
zKLSM?>?<sLJPZ=L*{QnhRDBD_>LS)^WslRIa#efEVHq>BJ-zPslwIvv?X;&{-JUgZ
z`v$!MvRliL;x@YxwxDi};|R48Yy4LR%9+z451%(>j)grGVPrR}fV!<3YA`IJel4Lk
zG1TpGc(j<Mu<I>}SlOSR=>rDZ5i77ifBx>3Y3xU5ke_)FNHW<8*y#B$sLKDSlV6a7
zDIJ5Y1EHxkgs)TbUj9`|W5>gMzUrd34RIf>W-&;zVZ*FU$ZStRE#7BG|JEJdPux${
zXb|%6h1sSY39x0`XeWGFov_JHm>sD~*c|sqRqccq82twH{F9(To75gicYY0u=sGB(
zCqWT?39d{$6>irn@Flkt(v)G8jz*W_zy-i&F$h;pQA~KaDH>wH_;>MarBs@RGRFcQ
z6eskeRE^a1wny;fLQ64%bDCnH7#1qjVx$-nU!ugKR&xb0gKrpZ-%!xpVgTe?^yThM
z8N~oMCv#^?%U%^xa!&yRZBK<&ZZt`hI->JkK6tf!Zmf!)7JU>h`X^@I9qZ*x_fR={
z>7{Vdm%S&YLaL@J;<BgsD+bWQ>QY1*St`RQ-J^pb@oQGh-o@FcLSFVAwI%KksM`Mn
znkNCx7m_fX|Ec7i^ffPYbDd`<%&R17gqLSV4{EIBpTtq7+3c}8$j&7%fM`?H_{{6V
zd7T%Mj1BEF_rqU7AK29-HGIqfD;4jEYeZ3CeDgsFZSx~If8QFfas#@}MVWWTs~m5f
z1m)fpclK&`$F-Qxzfk3KB0s1mfVY+L!RMpsYNTv@S25&U%_NS43WVa^2k#8<Mkhi=
zAMIBDls6C{C5kVrJr&v?G}>`ypLoWg3Zf5BOBa1LZ-N+vV_<)ouvPT;W{jxP@obnv
z6$&lo;B&;?o})?1j>oA8B4Uce3qH?=1vR&{2ShRagw=C)EIT7BhJ?f0Fx)qv3L_U_
zSW_Ofw>V+i;=q8ZSs|FjpL3cH=8DTGr^0*NqeZ<KEu0Dmqd}dZV;`I5D+ciz99)+3
zp#%n+a9WI%9*lOpNQ=@`TnB2K>g{+2d(#&%MEAtuTyrk(nZAZ&=a<5r7Y^Vt<mb7;
z(+AnRRJrs#O%wEv@512HEIM;4+%x9s;bB~}84}JoUkt+;=NQ`==hxU<9}ZvnzJ=eH
zd``IHG(-uqlnQ7Ur*tH@@Qxl0aUfn~mWoD5xb1N$DR>omCY(PR&b*|7u!%%>xM=Ra
zxG%_3db)Eev5=`m$5XxZ>C5d%;jnQ>%8Lmm93K;Q{EQvImMIy^`b)Jb?BRE39FIFb
zz-YphG-QRH7Y>=FQ(A>RQo<cKXk<EwwSst1(RAUk(4q`q>8=2hp!7%dNs6WtaR?-`
zYz&Bk+x?aNq-`}>6k1lBmFW5GeiMQ0(*bV<yt3%WjmPXW0VOe!&kz`}L7X{r5TF8z
zGXRu3v@4FiGVD%i$`LWV0xi<3VK{kt4gcr=a$Cn~_U+&ZgRik?hd3^3UyktUuzZUB
zRo4&@^%$AKfQLV6$FWs2aCjxp!-h=o7?YXggHa5oNu3n7>=ofQl8>P($V0X7jjLju
zX~d|Ga_N;YMh&M7u5sQU*Jzx-MNrNVi>qH^poN#>qQ5gD1e6Gsp%R8k#%602fcP&}
zr|<*Z_cJ4#47u~C+c2hv<htEc*bAc}O$S6*rPFJJdeNPvselhE<UrgP(R}xKCB39O
zzivGv|8lrJ>>?k$ta*x9FB1^X`!pb`i!Wwz5}09E>7^#HJ%p#X2NFY=UIEG3H2mM&
zJH0)We;KU57~<uhE2{9*N8+v%t(CtCGr9X1<-(t;Rd+YKu|JUbdvL~lY+KDVni2P<
zsE+$m3asR?uJDor9)h(6U6SPonJEMS?`QZ6-0=R<;V~?Awi8f`&3_j6>u}f;hh8>m
z)90I@&o@AjhdAXgfZ4APluK`fv-dX&kDqUZT`n)bPEy`;n%m{21xsZ-z-*?*A*(mT
zY0v~tf?RZUB<>GszHIqo9IP&#PJCmkX|V`@ZfeD57ffb;TJxz4TIDO5cg8B{Z&4HX
z`S__EV$YZQroai)gK@m^ei4=HCWMMB;LGhy0YTZFDM*J$<M7P?8Mv^1FiO0ZXb?gM
z%^$Blp)3~qP#mtB8*R+J1<bw8Gy5GZZyoOfix2be>id|+?}mY>a_Oz=SzIo?T@^7%
z9Q&QH&7Ov+g%uO+!)v(Ke0_uw+vp&cYNv957p~}e4d{Q=h2wJEM>uXHT+muUv{}Qq
z*|1=Aer?dfaSI+Zx0=$@&hKAlk4L@Y9l^3;5`s12)<CZjhuO<miGfPT``q~tu;!iN
zBPrgMvWENp5uB@B`XHP=!Ck4u{a$&=e*{!+yXf1QFvCxjBJwd;uLj~ln*TosN2<6e
z#-^Ttcu$u)VrCwqHKIL4%TLfs4Oj3qj_BQ3rk{Y7mncc26+U!nfRA<t<KCb!YZrq(
zjKS`VpuZpSV4tP`{T;I+xZBqi!Lb;tnEn#o>Ws*4b$)Gt88!aU9AKbaniZ)Uep>Ro
zA_iJTr92k*tJ1g3M<dB**pB$xJd7b@%Oq5twNdqJ7pfkQ`-ypfotd|dDwF8E0{_Lh
zl1_{~U~&iqPdL%VoWdp908J@o+fR%j`?(Rq#FdPRc@bb@4tjq)4tv^fpxtvLBZr=#
z`EL&IF3M@jg8Ako%!_b)sJ18L0V=0;lyb_VzlN2AyDTa{!Aq&=^+}r1{($XbZQ7}D
zo`oEe0dZD_-JlPq3b~i%cJON24n7&qy&{9xQ1C=J_bLZZgz-0ZAru%-g>$djkx%j8
z)Mb>=*fBqnJM9L)7T_<3bH8y%E<)t%;oR%)$i;~KZ8-OaJ8}sk-wWs7bVpu?$PdH0
z-?}50B62n`@U&~g@C<L!?Y+damR`URk9=JnVdVg&Jm)A-7DU+ApQO_T5rlBeN0VLi
z{WUKKgIM$jkWlj%C}TlHtPMl>gcs!+%Zu{Y2T7VGuE#>DrY2t$o|LUDP|Uu-1^>CL
z;Eyfn`Ev?F0Wb2F9<s|@a?qC3pnU_!d#p~OUG}uSP{=(7?c82y<6dHg#GiuC?+h5F
zT>)H|&rfdsb%WW{`glXnrOFfzAvyCl4uM3Z$MZ7h<VOzf3#4l!Q1WgHAW(Rx$tc}m
z#T{=zfa0jOR~Y5+88x}}$p$Xw)i^u|Qj}q4-)&+~3a`cCjc=FmK$PE=N^bFZrtM1Q
ze$n;|PhnSzV$%8lkuI06i)0u0H4aXq;8G{}GYT$qf;kE<cY@O>*zE)_q2Nj<_)Q9~
za)NmZ-rxj(PQmM);NMYju@n3$1($G;I(wSMhKtyY;o6AOIeEwwZs7Pve7;o47%8Pw
zV@p`R>Gd04A+s3&$wP#plZ2tp$%9yTn>~14TMB|S6s=D+)Q;zYdYXZTNPc~<Nx>7s
ziy~fm7aE^n*{`$Y{RO$<!ixdeEg2Q59ud!?^+vq=)e7o@&vzVka;|?Bt)V|W`n9Ic
zQzPi(Sy3(a9Ta*_gmQaQ)POxHuWW}!Q?;L!G=&IBL7kInyUmR@N$8-Tgpk7Niz<IJ
z4inESdG|9JT8Ycs{Zzv9qt{c(yx-*Myd3-Y51Ks9O5L}`TQH?FO{m6~`LM}T`lzY(
z#fG}i^FCaH`z3fiH%}H`f%r%{xoK8=e#=8Mk!IHJl+k*sA+wt{a_2V0hJPy#f0o~t
z@Gp)652rCbpbEmjK^Rya@#glYXo1P@Ptj(VM6;VBURm1PyaT#~r_D>El}2fxhMxq)
zN8xM}oH_6VsrV=iH}TV>t*<uFC$-JYu82TVdxr}e!v(!23UZ~s8;9M=*Bo9@TR+;k
z;VCeRJ<a)L2@|OZ(ENLGHSF`Rl;ajce@)R}6FoG<Q^7v0`{EPI5E8z6B3_JCfF14Z
zPZa}ZW<M~7$zh@v`P>h`G$LC^JBSIR(^ZJ%eZpL&7-GVbI{<;p_v6mf7FxT;<MW$y
z#)oF7ktbHUFO{vNH0E%9(l82~O};x|x1{E~cnu3wrP)MCFbO_8W@^fGrai3{Zy%;l
zB{M7S5!6X7FlqW3nVZF6V>7{nf3rRKAMiXpBvGnSf8Q7}3yjh`2}uj@Bnn+=1IDwj
zkMHjmuSjz64e<!G1nct^W)oO{HCX>huzp`*4uPGLuTRyA*jE#Ux#>TAYM)_oFizsP
zTm)qNha4Yf`6RnC0-5h4o^>f)bQgT)9q#!62{2e=h_#)K!;Q`sIB}bcCux~i)bT9{
z+X0Hnls1(38TM)RJLi0blV3CyS3~J@SN&WnB=PT~!tHY4b_%#3GTbH{p(QfVnQT(p
zBS_y}UyR5LedmiDd#o76zQE_@3w+*SWc<$IVec=8hnEcx(-*M<!fvIsK_QlZ5i0?m
zwup1DcN;J(THk8`ROZHrie6VreIK9WJ(1(x20%GE)+0v^=V*Pu0bwWYZbiNf{S6vA
zD08454L}1bp0o;xC#{MByv)UqTD3smP@53Neb7)0I)&ZEwhn%1$XgXwzDA0EI8ga>
z%Yh0zPLYmqcGvSu9iL%S<TG`wNC~xmFusT8b*LCF8CnkwEgY%rla5pvOxAp+p%}7i
zCc$0u6QAMm6Qgr7PX2j?*`r{q&GcblGFD2xO6JP6^k9OgUMM#a-iJhZMUBf~s5JtL
zeXBT7AB})oEuh$&ivxAG3d+p?EHe-giaOk-HTfXoYj_NTpJTIFqn~e?Qdj&=UcR8v
znHVuihDT14SqZSbYrS$QCweuzg@Kh>>QM~(qZtqMRa!e65zO2I{0%u!*Adip4%Dnh
z1kZt5NKgv_^_MtjSg157sQWxUph|D;YAj;pG-1l(AM?uaaO*V<B9023P08mJxtxkz
z?o>Rd5y5kyZXl=|05y@J<~AZIyx6eE0jiqMd0Ve+?2?&b64#Yb{p==$`9|)oMkDi9
zqcV4hM7c`l8o$!{9X!9JLzW<xG}rHi_omULVPr2Gv>Pk>SPGyY!P92**j$Jch@nIr
zT5Tb9Rf$`tSlpVEzya|%yg8PJ>^|Fvzp35W$y|e-%-jSH*lS6IzaJv}yhd@Rem|u6
zD-+d6^$DDqkCP@@*t-gg(adcTh4mHl6Sj(VEw(fZ5{`lHT2yvbLZfy3O~vA?d@^(i
z)QZGhjr{#7;qPk@_dwT1+Uk|gdZ^=rW><SC@eRysT7y4>s~_?>&1YYn@Z&U%uQfrh
z*HZNJArjQs_#@O&a8f9k+(DB&6b$CC#>q<yAKVuVP>#1ZGe7NR+f#N^*SesQ<5erZ
z2Cvy$2YUg+V(HA-*4g8;&-uN?x3+3kF_r2Nj1TOQSl}Ls6&Q&%K+ZKh5?`W`IDnD3
zN{+;V)U<;LUoFE2Q_~J1e2okr!bmMlz-N67LvtwAy1W5y$6$Jpz!Rpt3rc71j38=J
z0x#Zu1yPy1NKl+a0yxz7haz4!(81ceGvcM$gzW+Q4%5V;+!L%#TAaYfYCQ7GgG!UA
zwm{3ai9OnVaLKSFp+z;{dxA62=+4FI>LoZM`#BcRd^?U{?xxBwA)Y}J%T?*j)oB);
zeVJ<@!{AObT9u_%eTVtF4}3kPSbQCvE3+`o+lC^4m99<C<tra^=hEn;>n>yCwyj#a
zZmf7oJhLe6DI8I)VsXx3oy7)o52lJF31%Nmd2#gQfCd?~7pJ1FhkSKk$K5V}<{oPL
z&q*F+!y3vO5?KvMhJdeyuKj&)>uu*113y+W<$7=SDxZ@0DHpS_(JE#K6_ck0$|@#o
z7Zd(n#f%<}h3l!ayl~M7T*sq4hDVuOD@K{|>G3S()blu1HbOjq=zuI^kP8^(UIO_$
z7nuYdG9k$2E`r)lkU#x21cm7<3937RHzHd3xdncb@a@PH{3p$1Or!0$RH`;qL1cDu
zTES#mk*G3Jy**MkJJzG)D-&L!5HEj!fe*e{*G1^R14vp$lffVPzpm@m<t)ME=L^j%
zZp>vi5+}oJM)iE3PAwf6)7f~13j5IhNa4U3`63U%0D=oH)<tZ7Q73nm53lKfelRAu
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

diff --git a/static/tinymce1.3/plugins/powerpaste/img/spinner_96.gif b/static/tinymce1.3/plugins/powerpaste/img/spinner_96.gif
deleted file mode 100644
index 24af6375eed5580d1beea62eb864f75e4f1876f7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13707
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

diff --git a/static/tinymce1.3/plugins/powerpaste/js/wordimport.js b/static/tinymce1.3/plugins/powerpaste/js/wordimport.js
deleted file mode 100644
index 0c05b1a7..00000000
--- a/static/tinymce1.3/plugins/powerpaste/js/wordimport.js
+++ /dev/null
@@ -1,381 +0,0 @@
-/**
- * Word Import JavaScript Library
- * Copyright (c) 2013-2015 Ephox Corp. All rights reserved.
- * This software is provided "AS IS," without a warranty of any kind.
- */
-function com_ephox_keurig_Keurig(){var Pb='',Qb='" for "gwt:onLoadErrorFn"',Rb='" for "gwt:onPropertyErrorFn"',Sb='"><\/script>',Tb='#',Ub='&',Vb='/',Wb='90BA12EED4B8175F02A135767FCD6360',Xb=':',Yb=':1',Zb=':2',$b=':3',_b=':4',ac=':5',bc=':6',cc=':7',dc=':8',ec=':9',fc='<script id="',gc='=',hc='?',ic='Bad handler "',jc='DOMContentLoaded',kc='SCRIPT',lc='Single-script hosted mode not yet implemented. See issue ',mc='Unexpected exception in locale detection, using default: ',nc='_',oc='__gwt_Locale',pc='__gwt_marker_com.ephox.keurig.Keurig',qc='base',rc='clear.cache.gif',sc='com.ephox.keurig.Keurig',tc='content',uc='default',vc='en',wc='gecko',xc='gecko1_8',yc='gwt.codesvr=',zc='gwt.hosted=',Ac='gwt.hybrid',Bc='gwt:onLoadErrorFn',Cc='gwt:onPropertyErrorFn',Dc='gwt:property',Ec='http://code.google.com/p/google-web-toolkit/issues/detail?id=2079',Fc='ie10',Gc='ie8',Hc='ie9',Ic='img',Jc='locale',Kc='locale=',Lc='meta',Mc='msie',Nc='name',Oc='safari',Pc='unknown',Qc='user.agent',Rc='webkit';var k=Pb,l=Qb,m=Rb,n=Sb,o=Tb,p=Ub,q=Vb,r=Wb,s=Xb,t=Yb,u=Zb,v=$b,w=_b,A=ac,B=bc,C=cc,D=dc,F=ec,G=fc,H=gc,I=hc,J=ic,K=jc,L=kc,M=lc,N=mc,O=nc,P=oc,Q=pc,R=qc,S=rc,T=sc,U=tc,V=uc,W=vc,X=wc,Y=xc,Z=yc,$=zc,_=Ac,ab=Bc,bb=Cc,cb=Dc,db=Ec,eb=Fc,fb=Gc,gb=Hc,hb=Ic,ib=Jc,jb=Kc,kb=Lc,lb=Mc,mb=Nc,nb=Oc,ob=Pc,pb=Qc,qb=Rc;var rb=window,sb=document,tb,ub,vb=k,wb={},xb=[],yb=[],zb=[],Ab=0,Bb,Cb;if(!rb.__gwt_stylesLoaded){rb.__gwt_stylesLoaded={}}if(!rb.__gwt_scriptsLoaded){rb.__gwt_scriptsLoaded={}}function Db(){var b=false;try{var c=rb.location.search;return (c.indexOf(Z)!=-1||(c.indexOf($)!=-1||rb.external&&rb.external.gwtOnLoad))&&c.indexOf(_)==-1}catch(a){}Db=function(){return b};return b}
-function Eb(){if(tb&&ub){tb(Bb,T,vb,Ab)}}
-function Fb(){var e,f=Q,g;sb.write(G+f+n);g=sb.getElementById(f);e=g&&g.previousSibling;while(e&&e.tagName!=L){e=e.previousSibling}function h(a){var b=a.lastIndexOf(o);if(b==-1){b=a.length}var c=a.indexOf(I);if(c==-1){c=a.length}var d=a.lastIndexOf(q,Math.min(c,b));return d>=0?a.substring(0,d+1):k}
-;if(e&&e.src){vb=h(e.src)}if(vb==k){var i=sb.getElementsByTagName(R);if(i.length>0){vb=i[i.length-1].href}else{vb=h(sb.location.href)}}else if(vb.match(/^\w+:\/\//)){}else{var j=sb.createElement(hb);j.src=vb+S;vb=h(j.src)}if(g){g.parentNode.removeChild(g)}}
-function Gb(){var b=document.getElementsByTagName(kb);for(var c=0,d=b.length;c<d;++c){var e=b[c],f=e.getAttribute(mb),g;if(f){if(f==cb){g=e.getAttribute(U);if(g){var h,i=g.indexOf(H);if(i>=0){f=g.substring(0,i);h=g.substring(i+1)}else{f=g;h=k}wb[f]=h}}else if(f==bb){g=e.getAttribute(U);if(g){try{Cb=eval(g)}catch(a){alert(J+g+m)}}}else if(f==ab){g=e.getAttribute(U);if(g){try{Bb=eval(g)}catch(a){alert(J+g+l)}}}}}}
-function Hb(a,b){return b in xb[a]}
-function Ib(a){var b=wb[a];return b==null?null:b}
-function Jb(a,b){var c=zb;for(var d=0,e=a.length-1;d<e;++d){c=c[a[d]]||(c[a[d]]=[])}c[a[e]]=b}
-function Kb(a){var b=yb[a](),c=xb[a];if(b in c){return b}var d=[];for(var e in c){d[c[e]]=e}if(Cb){Cb(a,d,b)}throw null}
-yb[ib]=function(){var b=null;var c=V;try{if(!b){var d=location.search;var e=d.indexOf(jb);if(e>=0){var f=d.substring(e+7);var g=d.indexOf(p,e);if(g<0){g=d.length}b=d.substring(e+7,g)}}if(!b){b=Ib(ib)}if(!b){b=rb[P]}if(b){c=b}while(b&&!Hb(ib,b)){var h=b.lastIndexOf(O);if(h<0){b=null;break}b=b.substring(0,h)}}catch(a){alert(N+a)}rb[P]=c;return b||V};xb[ib]={'default':0,en:1};yb[pb]=function(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(qb)!=-1}())return nb;if(function(){return b.indexOf(lb)!=-1&&sb.documentMode>=10}())return eb;if(function(){return b.indexOf(lb)!=-1&&sb.documentMode>=9}())return gb;if(function(){return b.indexOf(lb)!=-1&&sb.documentMode>=8}())return fb;if(function(){return b.indexOf(X)!=-1}())return Y;return ob};xb[pb]={gecko1_8:0,ie10:1,ie8:2,ie9:3,safari:4};com_ephox_keurig_Keurig.onScriptLoad=function(a){com_ephox_keurig_Keurig=null;tb=a;Eb()};if(Db()){alert(M+db);return}Fb();Gb();try{var Lb;Jb([V,Y],r);Jb([V,eb],r+t);Jb([V,fb],r+u);Jb([V,gb],r+v);Jb([V,nb],r+w);Jb([W,Y],r+A);Jb([W,eb],r+B);Jb([W,fb],r+C);Jb([W,gb],r+D);Jb([W,nb],r+F);Lb=zb[Kb(ib)][Kb(pb)];var Mb=Lb.indexOf(s);if(Mb!=-1){Ab=Number(Lb.substring(Mb+1))}}catch(a){return}var Nb;function Ob(){if(!ub){ub=true;Eb();if(sb.removeEventListener){sb.removeEventListener(K,Ob,false)}if(Nb){clearInterval(Nb)}}}
-if(sb.addEventListener){sb.addEventListener(K,function(){Ob()},false)}var Nb=setInterval(function(){if(/loaded|complete/.test(sb.readyState)){Ob()}},50)}
-com_ephox_keurig_Keurig();(function () {var $gwt_version = "2.6.1";var $wnd = window;var $doc = $wnd.document;var $moduleName, $moduleBase;var $stats = $wnd.__gwtStatsEvent ? function(a) {$wnd.__gwtStatsEvent(a)} : null;var $strongName = '90BA12EED4B8175F02A135767FCD6360';function A(){}
-function Z(){}
-function Wo(){}
-function ub(){}
-function uk(){}
-function ik(){}
-function mk(){}
-function qk(){}
-function yk(){}
-function Jk(){}
-function Ng(){}
-function Xg(){}
-function fh(){}
-function Ah(){}
-function Ch(){}
-function $n(){}
-function xg(a){}
-function _b(){Kb()}
-function md(){kd()}
-function pd(){kd()}
-function wd(){td()}
-function jf(){hf()}
-function pf(){of()}
-function vf(){uf()}
-function Ef(){Df()}
-function Of(){Nf()}
-function uh(){jh()}
-function db(){bb(this)}
-function Sl(){Ql(this)}
-function _l(){Wl(this)}
-function am(){Wl(this)}
-function Mm(a){this.b=a}
-function Zm(a){this.b=a}
-function W(a){this.b=a}
-function Gc(a){this.b=a}
-function Lc(a){this.b=a}
-function Rn(a){this.b=a}
-function tn(a){this.c=a}
-function Wd(a,b){a.i=b}
-function yh(a,b){a.b+=b}
-function Xd(a,b){a.h=a.i=b}
-function Ic(a,b){yn(a.b,b)}
-function Dg(){return zg}
-function Ql(a){a.b=new Ah}
-function Wl(a){a.b=new Ah}
-function mc(){this.b=new Do}
-function Jc(){this.b=new Fn}
-function Do(){this.b=new Fn}
-function fg(){fg=Wo;eg=new A}
-function xb(){xb=Wo;wb=new _b}
-function Ec(){Cc();return sc}
-function cg(){Tj().w(this)}
-function cl(){cg.call(this)}
-function Fk(){cg.call(this)}
-function Uk(){cg.call(this)}
-function Wk(){cg.call(this)}
-function Zk(){cg.call(this)}
-function eo(){cg.call(this)}
-function oo(){cg.call(this)}
-function Gk(a){dg.call(this,a)}
-function Xk(a){dg.call(this,a)}
-function $k(a){dg.call(this,a)}
-function gl(a){Xk.call(this,a)}
-function hm(a){dg.call(this,a)}
-function ae(a){this.b=xl(a+Ap)}
-function ic(){this.c=(Cc(),wc)}
-function Qo(a,b,c){Dm(a.b,b,c)}
-function Sf(a,b){a.b[a.c++]=b}
-function Ud(a,b){return a.i+=b}
-function Pd(a,b){return a.f[b]}
-function Io(a,b){return a.e[b]}
-function Am(b,a){return b.f[Pp+a]}
-function dk(b,a){return b.exec(a)}
-function ak(a){return new $j[a]}
-function bk(){return !!$stats}
-function Dn(a){return Eh(a.b,a.c)}
-function rn(a){return a.b<a.c.J()}
-function Qd(a,b){return a.f[b]<=32}
-function Gd(a,b){return Hd(a,b,a.k)}
-function Kd(a,b){return Ld(a,b,a.k)}
-function Rg(a){return Vg((Tj(),a))}
-function Mo(a){No.call(this,a,0)}
-function cn(a,b){this.c=a;this.b=b}
-function jo(a,b){this.b=a;this.c=b}
-function Rl(a,b){yh(a.b,b);return a}
-function Xl(a,b){yh(a.b,b);return a}
-function Co(a,b){yn(a.b,b);return b}
-function Ln(a,b,c){a.splice(b,c)}
-function Yl(a,b){return ll(a.b.b,b)}
-function Fg(a,b){return Bh(a,b,null)}
-function Dh(a){return Eh(a,a.length)}
-function Wh(a){return a==null?null:a}
-function Cm(b,a){return Pp+a in b.f}
-function ol(b,a){return b.indexOf(a)}
-function Gg(a){$wnd.clearTimeout(a)}
-function dg(a){this.f=a;Tj().w(this)}
-function Fn(){this.b=Hh(Mj,$o,0,0,0)}
-function Tl(a){Ql(this);yh(this.b,a)}
-function bm(a){Wl(this);yh(this.b,a)}
-function T(a,b){L();this.c=a;this.b=b}
-function Nc(a,b){return b<256&&a.b[b]}
-function Qh(a,b){return a.cM&&a.cM[b]}
-function Jo(a,b){return ek(a.c,a.b,b)}
-function Al(a){return Hh(Oj,$o,1,a,0)}
-function Sg(a){return parseInt(a)||-1}
-function Cg(a){return a.$H||(a.$H=++tg)}
-function Ph(a,b){return a.cM&&!!a.cM[b]}
-function _c(a,b){return a.b[b>=128?0:b]}
-function fk(a,b){return new RegExp(a,b)}
-function Vh(a){return a.tM==Wo||Ph(a,1)}
-function ll(b,a){return b.charCodeAt(a)}
-function ln(a,b){(a<0||a>=b)&&on(a,b)}
-function Th(a,b){return a!=null&&Ph(a,b)}
-function ek(c,a,b){return a.replace(c,b)}
-function pl(c,a,b){return c.indexOf(a,b)}
-function ql(b,a){return b.lastIndexOf(a)}
-function Yn(){Yn=Wo;Xn=new $n}
-function Kg(){Kg=Wo;Jg=new Ng}
-function Vo(){Vo=Wo;Uo=new So}
-function Ll(){Ll=Wo;Il={};Kl={}}
-function ge(){ge=Wo;fe=xl('class=')}
-function Ve(){Ve=Wo;Ue=xl(yp);Te=xl(zp)}
-function kd(){kd=Wo;ed();jd=xl('style=')}
-function Qc(){Qc=Wo;Pc=xl('<v:imagedata ')}
-function Re(){Re=Wo;Qe=xl('/*');Pe=xl('*/')}
-function Sc(a,b){return Sd(a,b)&&Ed(a,62)}
-function wl(c,a,b){return c.substr(a,b-a)}
-function Zl(a,b,c){return zh(a.b,b,c,op),a}
-function $l(a,b,c,d){zh(a.b,b,c,d);return a}
-function An(a,b){ln(b,a.c);return a.b[b]}
-function Ho(a){a.e=dk(a.c,a.b);return !!a.e}
-function Pk(a){var b=$j[a.d];a=null;return b}
-function jg(a){return a==null?null:a.name}
-function ig(a){return a==null?null:a.message}
-function To(a,b){return a!=null?a[b]:null}
-function wg(a,b,c){return a.apply(b,c);var d}
-function rl(c,a,b){return c.lastIndexOf(a,b)}
-function El(a){return String.fromCharCode(a)}
-function So(){this.b=new ho;new ho;new ho}
-function De(a){Be();this.b=xe;this.b=a?ye:xe}
-function Dc(a,b,c){this.d=a;this.c=c;this.b=b}
-function Vd(a,b,c){a.f=b;a.k=c;a.h=a.i=0}
-function Mn(a,b,c,d){a.splice(b,c,d)}
-function Tf(a,b,c,d){fm(b,c,a.b,a.c,d);a.c+=d}
-function yn(a,b){Jh(a.b,a.c++,b);return true}
-function Wg(){try{null.a()}catch(a){return a}}
-function og(a){var b;return b=a,Vh(b)?b.cZ:Ei}
-function Qk(a){return typeof a=='number'&&a>0}
-function vl(b,a){return b.substr(a,b.length-a)}
-function Uh(a){return a!=null&&a.tM!=Wo&&!Ph(a,1)}
-function zh(a,b,c,d){a.b=wl(a.b,0,b)+d+vl(a.b,c)}
-function Hl(a,b){zl(a.length,b);return Cl(a,0,b)}
-function Og(a,b){!a&&(a=[]);a[a.length]=b;return a}
-function Tg(a,b){a.length>=b&&a.splice(0,b);return a}
-function ue(){ue=Wo;te=xl(pp);se=xl('<\/span')}
-function Ne(){Ne=Wo;Me=xl('xmlns');Le=xl('<html')}
-function td(){td=Wo;ed();rd=xl('\n\r{');sd=xl(' \t,')}
-function L(){L=Wo;J=(Yn(),Yn(),Xn);K=new W(J)}
-function hf(){hf=Wo;oe();ue();cf();gf=new Oc('<\n\r')}
-function Mh(){Mh=Wo;Kh=[];Lh=[];Nh(new Ch,Kh,Lh)}
-function jh(){jh=Wo;Error.stackTraceLimit=128}
-function Vf(a){this.b=Hh(Jj,cp,-1,a,1);this.c=0}
-function Zc(a,b){var c;c=a.f;Vd(a,b.b,b.c);b.b=c;b.c=0}
-function ng(a,b){var c;return c=a,Vh(c)?c.eQ(b):c===b}
-function pg(a){var b;return b=a,Vh(b)?b.hC():Cg(b)}
-function P(a,b){L();return new T(new W(a),new W(b))}
-function Dm(a,b,c){return !b?Fm(a,c):Em(a,b,c,~~Cg(b))}
-function go(a,b){return Wh(a)===Wh(b)||a!=null&&ng(a,b)}
-function Eo(a,b){return Wh(a)===Wh(b)||a!=null&&ng(a,b)}
-function on(a,b){throw new $k('Index: '+a+', Size: '+b)}
-function de(){de=Wo;be=new Oc(Bp);ce=new Oc(' \t\r\n')}
-function uf(){uf=Wo;oe();ue();cf();ge();tf=new Oc('<c\n\r')}
-function cf(){cf=Wo;af=new Oc(' >\r\n\t');bf=new Oc(Bp)}
-function Ad(){Ad=Wo;yd=xl(yp);xd=xl(zp);Re();zd=new wd}
-function Ol(){if(Jl==256){Il=Kl;Kl={};Jl=0}++Jl}
-function bb(a){if(!ab){ab=true;Vo();Qo(Uo,ci,a);cb(a)}}
-function Eg(a){$wnd.setTimeout(function(){throw a},0)}
-function Hg(){return Fg(function(){sg!=0&&(sg=0);vg=-1},10)}
-function tl(c,a,b){b=Bl(b);return c.replace(RegExp(a,dq),b)}
-function ml(a,b){if(!Th(b,1)){return false}return String(a)==b}
-function Rh(a,b){if(a!=null&&!Qh(a,b)){throw new Uk}return a}
-function sn(a){if(a.b>=a.c.J()){throw new oo}return a.c.T(a.b++)}
-function em(a){$k.call(this,'String index out of range: '+a)}
-function il(a,b,c){this.b=Rp;this.e=a;this.c=b;this.d=c}
-function zb(a,b){xb();this.b=rb(new ub,a);this.c=b;this.d=true}
-function Ko(a,b){var c;this.b=b;this.c=fk((c=a.b,c.source),dq)}
-function Hh(a,b,c,d,e){var f;f=Gh(e,d);Ih(a,b,c,f);return f}
-function Lk(a,b,c){var d;d=new Jk;d.e=a+b;Qk(c)&&Rk(c,d);return d}
-function Ih(a,b,c,d){Mh();Oh(d,Kh,Lh);d.cZ=a;d.cM=b;d.qI=c;return d}
-function nl(a,b,c,d){var e;for(e=0;e<b;++e){c[d++]=a.charCodeAt(e)}}
-function Ag(a,b,c){var d;d=yg();try{return wg(a,b,c)}finally{Bg(d)}}
-function xn(a,b,c){(b<0||b>a.c)&&on(b,a.c);Mn(a.b,b,0,c);++a.c}
-function Uf(a){for(;a.c>0;a.c--){if(a.b[a.c-1]>32){break}}}
-function Fm(a,b){var c;c=a.c;a.c=b;if(!a.d){a.d=true;++a.e}return c}
-function Fh(a,b){var c,d;c=a;d=Gh(0,b);Ih(c.cZ,c.cM,c.qI,d);return d}
-function of(){of=Wo;le();$e();Je();Ne();Qc();nf=new Oc('<x\n\r')}
-function $e(){$e=Wo;Ze=xl('<![if');Ye=xl(Cp);Xe=xl('<![endif]>')}
-function le(){le=Wo;ke=xl('<!--[if');je=xl(Cp);ie=xl('<![endif]-->')}
-function qg(a){return a.toString?a.toString():'[JavaScriptObject]'}
-function Xh(a){return ~~Math.max(Math.min(a,2147483647),-2147483648)}
-function Sh(a){if(a!=null&&(a.tM==Wo||Ph(a,1))){throw new Uk}return a}
-function zl(a,b){if(b<0){throw new em(b)}if(b>a){throw new em(b)}}
-function Bn(a,b,c){for(;c<a.c;++c){if(Eo(b,a.b[c])){return c}}return -1}
-function Cn(a,b){var c;c=(ln(b,a.c),a.b[b]);Ln(a.b,b,1);--a.c;return c}
-function Nk(a,b){var c;c=new Jk;c.e=a+b;Qk(0)&&Rk(0,c);c.c=2;return c}
-function Ok(a,b){var c;c=new Jk;c.e=op+a;Qk(b)&&Rk(b,c);c.c=1;return c}
-function Eh(a,b){var c,d;c=a;d=c.slice(0,b);Ih(c.cZ,c.cM,c.qI,d);return d}
-function xl(a){var b,c;c=a.length;b=Hh(Jj,cp,-1,c,1);nl(a,c,b,0);return b}
-function Ao(a){var b;b=a.b.c;if(b>0){return An(a.b,b-1)}else{throw new eo}}
-function Bo(a){var b;b=a.b.c;if(b>0){return Cn(a.b,b-1)}else{throw new eo}}
-function gb(a,b,c){var d;d=hb(a,b,c);if(d>3*c){throw new Wk}else{return d}}
-function Zb(a,b){var c,d;c=Ub(a,Gb,b,wp);d=Ub(a,Jb,c,xp);return d==null?b:d}
-function xm(a,b){return b==null?a.d:Th(b,1)?Cm(a,Rh(b,1)):Bm(a,b,~~pg(b))}
-function ym(a,b){return b==null?a.c:Th(b,1)?Am(a,Rh(b,1)):zm(a,b,~~pg(b))}
-function R(a,b){return U(a.c.b,b.c.b)&&(L(),U(Rh(a.b.b,25),Rh(b.b.b,25)))}
-function Nn(a,b,c,d){Array.prototype.splice.apply(a,[b,c].concat(d))}
-function Oh(a,b,c){Mh();for(var d=0,e=b.length;d<e;++d){a[b[d]]=c[d]}}
-function Nh(a,b,c){var d=0,e;for(var f in a){if(e=a[f]){b[d]=f;c[d]=e;++d}}}
-function Gm(e,a,b){var c,d=e.f;a=Pp+a;a in d?(c=d[a]):++e.e;d[a]=b;return c}
-function Mk(a,b,c,d){var e;e=new Jk;e.e=a+b;Qk(c)&&Rk(c,e);e.c=d?8:0;return e}
-function G(a,b){var c,d;d=new am(a.length*b);for(c=0;c<b;c++){yh(d.b,a)}return d.b.b}
-function Bh(a,b,c){var d=$wnd.setTimeout(function(){a();c!=null&&xg(c)},b);return d}
-function Go(a,b,c){Rl(b,wl(a.b,a.d,a.e.index));yh(b.b,c);a.d=a.c.lastIndex;return a}
-function ho(){this.b=[];this.f={};this.d=false;this.c=null;this.e=0}
-function hg(a){fg();cg.call(this);this.b=op;this.c=a;this.b=op;Tj().u(this)}
-function Bg(a){a&&Mg((Kg(),Jg));--sg;if(a){if(vg!=-1){Gg(vg);vg=-1}}}
-function Yj(a){if(Th(a,24)){return a}return a==null?new hg(null):Wj(a)}
-function re(a){if(!Yd(a)){return false}if(a.i==a.h){return false}a.h=a.i;return true}
-function Ed(a,b){var c;for(c=a.i;c<a.k;c++){if(a.f[c]==b){a.i=c;return true}}return false}
-function Jd(a,b){var c;for(c=a.i;c<a.k;c++){if(Nc(b,a.f[c])){a.i=c;return true}}return false}
-function Fd(a,b,c){var d;for(d=a.i;d<c;d++){if(a.f[d]==b){a.i=d;return true}}return false}
-function jm(a,b){var c;while(a.N()){c=a.O();if(b==null?c==null:ng(b,c)){return a}}return null}
-function Mg(a){var b,c;if(a.c){c=null;do{b=a.c;a.c=null;c=Pg(b,c)}while(a.c);a.c=c}}
-function Lg(a){var b,c;if(a.b){c=null;do{b=a.b;a.b=null;c=Pg(b,c)}while(a.b);a.b=c}}
-function Pb(a){var b,c;b=a.b>1?' start="'+a.b+tp:op;c=a.c;return sp+c.b+b+c.c+'><li>'}
-function Rm(a){var b;b=new Fn;a.d&&yn(b,new Zm(a));wm(a,b);vm(a,b);this.b=new tn(b)}
-function X(a){var b,c,d;d=new Fn;for(c=new tn(a);c.b<c.c.J();){b=Rh(sn(c),25);zn(d,b)}return d}
-function rb(a,b){var c,d;d=tl(b,'&#39;',"'");a.b=new bm(d);c=true;while(c){c=tb(a)}return a.b.b.b}
-function mb(a,b){var c,d,e;e=pl(a,Fl(32),b);d=pl(a,Fl(62),b);c=e<d&&e!=-1?e:d;return wl(a,b,c)}
-function U(a,b){if(a==null||b==null){throw new Xk('No nulls permitted')}return ng(a,b)}
-function Ck(a,b,c){c&&(a=a.replace(new RegExp('\\.\\*',dq),'[\\s\\S]*'));return new RegExp(a,b)}
-function ib(a,b,c){if(a.b.b.length>0&&a.b.b.charCodeAt(0)==b){zh(a.b,0,1,op);return c}else{return 0}}
-function hb(a,b,c){var d;d=0;while(a.b.b.length>0&&a.b.b.charCodeAt(0)==b){zh(a.b,0,1,op);d+=c}return d}
-function zn(a,b){var c,d;c=b.K();d=c.length;if(d==0){return false}Nn(a.b,a.c,0,c);a.c+=d;return true}
-function We(a){if(!Sd(a,Ue)){return false}if(!Gd(a,Te)){return false}Xd(a,a.i+Te.length);return true}
-function Se(a){if(!Sd(a,Qe)){return false}a.i+=2;if(!Gd(a,Pe)){return false}Xd(a,a.i+2);return true}
-function Xj(a){var b;if(Th(a,13)){b=Rh(a,13);if(b.c!==(fg(),eg)){return b.c===eg?null:b.c}}return a}
-function Wb(a){var b,c;b=new tn(a.b);while(b.b<b.c.J()){c=Rh(sn(b),11);if(Xb(c)){return false}}return true}
-function Td(a,b,c){var d,e,f;for(e=0,f=c.length;e<f;++e){d=c[e];if(Rd(a,b,d)){return true}}return false}
-function Kk(a,b,c,d){var e;e=new Jk;e.e=a+b;Qk(c!=0?-c:0)&&Rk(c!=0?-c:0,e);e.c=4;e.b=d;return e}
-function Tj(){switch(Sj){case 0:case 5:return new fh;case 4:case 9:return new uh;}return new Xg}
-function zg(c){return function(){try{return Ag(c,this,arguments);var b}catch(a){throw a}}}
-function Wj(b){var c=b.__gwt$exception;if(!c){c=new hg(b);try{b.__gwt$exception=c}catch(a){}}return c}
-function qe(a,b){var c;c=0;while(a.length>b+c&&null!=String.fromCharCode(a[b+c]).match(/[A-Z\d]/i)){++c}return c}
-function _f(a){var b,c,d;c=Hh(Nj,$o,23,a.length,0);for(d=0,b=a.length;d<b;++d){if(!a[d]){throw new cl}c[d]=a[d]}}
-function Wc(){Wc=Wo;Uc=Ih(Lj,$o,12,[new pf,new Ef,new vf,new jf]);Vc=Ih(Lj,$o,12,[new pf,new Of,new jf])}
-function Df(){Df=Wo;cf();Ad();Cf=new De(false);de();Af=new md;Bf=new ae(Jp);zf=new Oc('<lsovwxp')}
-function Nf(){Nf=Wo;cf();Ve();Mf=new De(true);de();Jf=new pd;Kf=new ae('class');Lf=new ae(Jp);If=new Oc('<lscovwxp')}
-function Je(){Je=Wo;Fe=xl('<meta');Ge=xl('name=');Ie=xl('ProgId');Ee=xl('Generator');He=xl('Originator')}
-function M(a){var b;b=yb(Rh(a.c.b,1));return P(b.c.b,X(new Rn(Ih(Mj,$o,0,[Rh(a.b.b,25),Rh(b.b.b,25)]))))}
-function Lb(a,b){var c;if(Wb(b)){Jh(a.b,a.c++,b)}else{c=new tn(b.b);while(c.b<c.c.J()){yn(a,new Gc(Rh(sn(c),11).b))}}}
-function wm(e,a){var b=e.f;for(var c in b){if(c.charCodeAt(0)==58){var d=new cn(e,c.substring(1));a.G(d)}}}
-function Od(a,b){var c;c=b;for(;c>=0;c--){if(a.f[c]==62){return false}if(a.f[c]==60){a.i=c;return true}}return false}
-function Yd(a){var b,c;for(c=a.i;c<a.k;c++){b=a.f[c];if(b!=32&&b!=9&&b!=13&&b!=10){a.i=c;return true}}return false}
-function Nl(a){Ll();var b=Pp+a;var c=Kl[b];if(c!=null){return c}c=Il[b];c==null&&(c=Ml(a));Ol();return Kl[b]=c}
-function Hk(a){if(a>=48&&a<58){return a-48}if(a>=97&&a<97){return a-97+10}if(a>=65&&a<65){return a-65+10}return -1}
-function jb(a,b,c,d){if(a.b.b.length>1&&a.b.b.charCodeAt(0)==b&&a.b.b.charCodeAt(1)==c){zh(a.b,0,2,op);return d}else{return 0}}
-function Ob(a,b){var c,d,e;e=new Ko(Db,b);e.e=dk(e.c,e.b);if(e.e){d=Io(e,e.e[1]==null?2:1);c=_k(d);return c==0?1:c}else{return a}}
-function Ld(a,b,c){var d,e,f,g;for(g=a.i;g<c;g++){for(e=0,f=b.length;e<f;++e){d=b[e];if(d==a.f[g]){a.i=g;return true}}}return false}
-function yg(){var a;if(sg!=0){a=(new Date).getTime();if(a-ug>2000){ug=a;vg=Hg()}}if(sg++==0){Lg((Kg(),Jg));return true}return false}
-function gwtOnLoad(b,c,d,e){$moduleName=c;$moduleBase=d;Sj=e;if(b)try{mp(Vj)()}catch(a){b(c)}else{mp(Vj)()}}
-function No(a,b){var c,d;this.b=(c=false,d=op,(b&1)!=0&&(d+='m'),(b&2)!=0&&(d+=Dp),(b&32)!=0&&(c=true),Ck(a,d,c))}
-function Oc(a){var b;this.b=Hh(Pj,ap,-1,256,2);for(b=0;b<a.length;b++){a.charCodeAt(b)<256&&(this.b[a.charCodeAt(b)]=true)}}
-function Zd(a){this.j=Ih(Qj,bp,2,[]);this.f=Hh(Jj,cp,-1,a.length,1);nl(a,a.length,this.f,0);this.k=a.length;this.h=this.i=0}
-function En(a,b){var c;b.length<a.c&&(b=Fh(b,a.c));for(c=0;c<a.c;++c){Jh(b,c,a.b[c])}b.length>a.c&&Jh(b,a.c,null);return b}
-function Sd(a,b){var c,d;c=b.length-1;if((d=a.i+c)>=a.k){return false}do{if(b[c--]!=a.f[d--]){return false}}while(c>=0);return true}
-function Rd(a,b,c){var d,e;e=b;d=c.length-1;if((e+=d)>=a.k){return false}do{if(c[d--]!=a.f[e--]){return false}}while(d>=0);return true}
-function ld(a,b,c){var d;if(!Sd(b,jd)){return false}d=b.h;if(!Od(b,d)){return false}b.i=d;return Md(b)&&fd(a,b,c,d,b.e,b.d,b.b)}
-function tb(a){var b,c,d,e;c=a.b.b.b.indexOf('mso-number-format:');if(c<0){return false}d=c+18;b=sb(a,d);e=d-18;e>-1&&Zl(a.b,e,b);return true}
-function Bl(a){var b;b=0;while(0<=(b=a.indexOf('\\',b))){a.charCodeAt(b+1)==36?(a=wl(a,0,b)+'$'+vl(a,++b)):(a=wl(a,0,b)+vl(a,++b))}return a}
-function kh(a,b){var c;c=eh(a,b);if(c.length==0){return (new Xg).A(b)}else{c[0].indexOf('anonymous@@')==0&&(c=Tg(c,1));return c}}
-function zm(h,a,b){var c=h.b[b];if(c){for(var d=0,e=c.length;d<e;++d){var f=c[d];var g=f.P();if(h.M(a,g)){return f.Q()}}}return null}
-function Bm(h,a,b){var c=h.b[b];if(c){for(var d=0,e=c.length;d<e;++d){var f=c[d];var g=f.P();if(h.M(a,g)){return true}}}return false}
-function kc(a,b){var c;if(b.c==(Cc(),uc)||b.c==Ac){if(Ho(new Ko(gc,a))||Ho(new Ko(cc,a))){c=fb(a);if(c==b.b+1){return true}}}return false}
-function Id(a,b,c,d){var e,f,g;g=a.k-d+1;for(f=a.i;f<g;f++){for(e=0;e<d;e++){if(b[c+e]!=a.f[f+e]){break}}if(e==d){a.i=f;return true}}return false}
-function Hd(a,b,c){var d,e,f,g;d=b.length;g=c-b.length+1;for(f=a.i;f<g;f++){for(e=0;e<d;e++){if(b[e]!=a.f[f+e]){break}}if(e==d){a.i=f;return true}}return false}
-function vm(h,a){var b=h.b;for(var c in b){var d=parseInt(c,10);if(c==d){var e=b[d];for(var f=0,g=e.length;f<g;++f){a.G(e[f])}}}}
-function eh(a,b){var c,d,e,f;e=Uh(b)?Sh(b):null;f=e&&e.stack?e.stack.split('\n'):[];for(c=0,d=f.length;c<d;c++){f[c]=a.v(f[c])}return f}
-function Cl(a,b,c){var d=op;for(var e=b;e<c;){var f=Math.min(e+10000,c);d+=String.fromCharCode.apply(null,a.slice(e,f));e=f}return d}
-function Oe(a,b){if(!Sd(a,Me)){return false}if(!Nd(a)){return false}if(!Rd(a,a.m,Le)){return false}if(!Md(a)){return false}Xd(a,a.b);Uf(b);return true}
-function me(a){if(!Sd(a,ke)){return false}Ud(a,ke.length);if(!Gd(a,je)){return false}Ud(a,je.length);if(!Gd(a,ie)){return false}Xd(a,a.i+ie.length);return true}
-function hn(a,b){var c,d;for(c=0,d=a.b.length;c<d;++c){if(b==null?(ln(c,a.b.length),a.b[c])==null:ng(b,(ln(c,a.b.length),a.b[c]))){return c}}return -1}
-function Uj(){switch(Sj){case 4:case 9:return new yk;case 1:case 6:return new mk;case 3:case 8:return new uk;case 2:case 7:return new qk;}return new ik}
-function yl(c){if(c.length==0||c[0]>fq&&c[c.length-1]>fq){return c}var a=c.replace(/^([\u0000-\u0020]*)/,op);var b=a.replace(/[\u0000-\u0020]*$/,op);return b}
-function Gh(a,b){var c=new Array(b);if(a==3){for(var d=0;d<b;++d){c[d]={l:0,m:0,h:0}}}else if(a>0&&a<3){var e=a==1?0:false;for(var d=0;d<b;++d){c[d]=e}}return c}
-function sl(d,a,b){var c;if(a<256){c=al(a);c='\\x'+'00'.substring(c.length)+c}else{c=String.fromCharCode(a)}return d.replace(RegExp(c,dq),String.fromCharCode(b))}
-function Rk(a,b){var c;b.d=a;if(a==2){c=String.prototype}else{if(a>0){var d=Pk(b);if(d){c=d.prototype}else{d=$j[a]=function(){};d.cZ=b;return}}else{return}}c.cZ=b}
-function Fl(a){var b,c;if(a>=65536){b=55296+(~~(a-65536)>>10&1023)&65535;c=56320+(a-65536&1023)&65535;return El(b)+El(c)}else{return String.fromCharCode(a&65535)}}
-function Ro(a){var b,c,d,e,f;f=ul(a,'\\.',0);e=$wnd;b=0;for(c=f.length-1;b<c;b++){if(!ml(f[b],'client')){e[f[b]]||(e[f[b]]={});e=To(e,f[b])}}d=To(e,f[b]);return d}
-function sb(a,b){var c,d,e,f,g,h;e=b;f=b-18>-1;d=false;g=0;while(f){c=Yl(a.b,e);c==34&&g!=92&&(d=!d);(h=c==59&&!d,e==a.b.b.b.length-1||h)&&(f=false);++e;g=c}return e}
-function oe(){oe=Wo;ne=new ad(Ih(Oj,$o,1,['font','span','b',Dp,'u','sub','sup','em','strong','samp','acronym','cite','code','dfn','kbd','tt','s','ins','del','var']))}
-function el(){el=Wo;dl=Ih(Jj,cp,-1,[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122])}
-function Be(){Be=Wo;ze=xl('<link');Ae=xl('rel=');xe=Ih(Qj,bp,2,[xl(Ep),xl(Fp),xl(Gp),xl(Hp),xl(Ip)]);ye=Ih(Qj,bp,2,[xl(Ep),xl(Fp),xl(Gp),xl(Hp),xl(Ip),xl('stylesheet')])}
-function al(a){var b,c,d;b=Hh(Jj,cp,-1,8,1);c=(el(),dl);d=7;if(a>=0){while(a>15){b[d--]=c[a&15];a>>=4}}else{while(d>0){b[d--]=c[a&15];a>>=4}}b[d]=c[a&15];return Cl(b,d,8)}
-function yb(a){var b,c,d;c='Content before importing MS-Word lists:\r\n'+a;d=Qb(wb,a);b='Content after importing MS-Word lists:\r\n'+d;return P(d,new Rn(Ih(Oj,$o,1,[c,b])))}
-function km(a){var b,c,d,e;d=new Sl;b=null;yh(d.b,Sp);c=a.I();while(c.N()){b!=null?(yh(d.b,b),d):(b=gq);e=c.O();yh(d.b,e===a?'(this Collection)':op+e)}yh(d.b,Tp);return d.b.b}
-function Ub(a,b,c,d){var e,f,g,h;f=new Ko(b,c);f.e=dk(f.c,f.b);if(f.e){e=f.e[1];h=f.e[2];g=ek(f.c,f.b,sp+d+e+"><li style='list-style: none;'><"+d+h+vp);return Zb(a,g)}return c}
-function _e(a,b){var c,d;if(!Sd(a,Ze)){return false}if(!Gd(a,Ye)){return false}c=a.i+Ye.length;if(!Gd(a,Xe)){return false}d=a.i;Tf(b,a.f,c,d-c);Xd(a,a.i+Xe.length);return true}
-function _d(a,b,c){if(!Sd(b,a.b)){return false}if(!Od(b,b.h)){return false}if(!Qd(b,b.h-1)){return false}b.i=b.h+a.b.length-1;if(!Md(b)){return false}Uf(c);b.h=b.i=b.b;return true}
-function Xc(a,b){Wc();var c,d,e,f,g;c=new Zd(a);e=new Vf(a.length);g=b==1?Vc:Uc;d=g.length-1;for(f=0;f<d;f++){Yc(c,e,g[f]);Zc(c,e)}while(Yc(c,e,g[d])){Zc(c,e)}return Hl(e.b,e.c)}
-function gg(a){var b;if(a.d==null){b=a.c===eg?null:a.c;a.e=b==null?Lp:Uh(b)?jg(Sh(b)):Th(b,1)?Mp:og(b).e;a.b=a.b+Kp+(Uh(b)?ig(Sh(b)):b+op);a.d=Np+a.e+') '+(Uh(b)?Rg(Sh(b)):op)+a.b}}
-function Sb(a,b){var c,d,e;e=new _l;for(c=0;c<a;c++){d=Rh(Bo(b.b),6).c;yh(e.b,'<\/');Xl(e,d.b);e.b.b+=vp;(b.b.b.c==0?(hc(),fc):Rh(Ao(b.b),6))!=(hc(),fc)&&(yh(e.b,up),e)}return e.b.b}
-function Vg(b){var c=op;try{for(var d in b){if(d!='name'&&d!='message'&&d!='toString'){try{var e=d!='__gwt$exception'?b[d]:'<skipped>';c+='\n '+d+Kp+e}catch(a){}}}}catch(a){}return c}
-function ck(a){return $stats({moduleName:$moduleName,sessionId:$sessionId,subSystem:'startup',evtGroup:'moduleStartup',millis:(new Date).getTime(),type:'onModuleLoadStart',className:a})}
-function Qg(a){var b,c,d;d=op;a=yl(a);b=a.indexOf(Np);c=a.indexOf('function')==0?8:0;if(b==-1){b=ol(a,Fl(64));c=a.indexOf('function ')==0?9:0}b!=-1&&(d=yl(wl(a,c,b)));return d.length>0?d:Op}
-function Pg(b,c){var d,e,f,g;for(e=0,f=b.length;e<f;e++){g=b[e];try{g[1]?g[0].U()&&(c=Og(c,g)):g[0].U()}catch(a){a=Yj(a);if(Th(a,24)){d=a;Eg(Th(d,13)?Rh(d,13).s():d)}else throw Xj(a)}}return c}
-function Qb(a,b){var c,d,e;c=(d=new Ko(new No('<\/?u[0-9]:p>',33),b),ek(d.c,d.b,op));c=Rb(a,c);c=Jo(new Ko(Ib,c),'$1');c=(e=new Ko(new No('style *?=[\'"](;?)[\'"]',32),c),ek(e.c,e.b,op));return c}
-function Tb(a,b,c){var d,e;if(b>0){for(d=0;d<b;d++){Co(c.b,a)}return G(Pb(a),b)}else{if(ml(a.c.b,(c.b.b.c==0?(hc(),fc):Rh(Ao(c.b),6)).c.b)){return '<li>'}else{e=Sb(1,c)+Pb(a);Co(c.b,a);return e}}}
-function $b(a,b,c,d,e){var f,g,h;h=b;g=new _l;if(b>=c){yh(g.b,up);Xl(g,Sb(b-c,a))}f=a.b.b.c==0?(hc(),fc):Rh(Ao(a.b),6);if(b==c&&f.c!=e.c){Xl(g,Sb(b,a));h=0}Xl(g,Tb(e,c-h,a));yh(g.b,d);return g.b.b}
-function Ce(a,b){if(!Sd(b,ze)){return false}Wd(b,b.h+ze.length);if(!Nd(b)){return false}if(!Hd(b,Ae,b.l)){return false}if(!Md(b)){return false}if(!Td(b,b.e,a.b)){return false}Xd(b,b.l+1);return true}
-function ee(a,b){var c,d;c=a.f;d=a.h;if(c[d+1]!=58){return false}if(!Nc(be,c[d])){return false}if(!Nc(ce,c[d-1])){return false}if(!Nd(a)){return false}if(!Md(a)){return false}Xd(a,a.b);Uf(b);return true}
-function Yb(a){var b,c,d,e,f,g;e=a;if(a.indexOf(pp)==0){c=a.indexOf(rp);if(c>0){d=ol(a,Fl(62))+1;b=wl(a,d,c);g=new Mo('^(?:&nbsp;|\\s)*$');f=new Ko(g,b);f.e=dk(f.c,f.b);!!f.e&&(e=vl(a,c+7))}}return e}
-function Ml(a){var b,c,d,e;b=0;d=a.length;e=d-4;c=0;while(c<e){b=a.charCodeAt(c+3)+31*(a.charCodeAt(c+2)+31*(a.charCodeAt(c+1)+31*(a.charCodeAt(c)+31*b)))|0;c+=4}while(c<d){b=b*31+ll(a,c++)}return b|0}
-function Em(j,a,b,c){var d=j.b[c];if(d){for(var e=0,f=d.length;e<f;++e){var g=d[e];var h=g.P();if(j.M(a,h)){var i=g.Q();g.R(b);return i}}}else{d=j.b[c]=[]}var g=new jo(a,b);d.push(g);++j.e;return null}
-function nb(a){var b,c,d,e;c=new Mo('(class=)([^>[ \\t\\n\\x0B\\f\\r]]*)');b=new Ko(c,a);e=new Sl;while(b.e=dk(b.c,b.b),!!b.e){d=b.e[2];d=d.toLowerCase();Go(b,e,b.e[1]+d)}Rl(e,vl(b.b,b.d));return e.b.b}
-function Jh(a,b,c){if(c!=null){if(a.qI>0&&!Qh(c,a.qI)){throw new Fk}else if(a.qI==-1&&(c.tM==Wo||Ph(c,1))){throw new Fk}else if(a.qI<-1&&!(c.tM!=Wo&&!Ph(c,1))&&!Qh(c,-a.qI)){throw new Fk}}return a[b]=c}
-function hc(){hc=Wo;bc=new Mo('([\xB7\xA7\u2022\u2043\u25A1o-]|\xD8|&middot;|<img[^>]*>)');gc=new Mo('[A-Z]+');cc=new Mo('[a-z]+');ec=new Mo('X?(?:IX|IV|V?I{0,3})');dc=new Mo('x?(?:ix|iv|v?i{0,3})');fc=new ic}
-function _j(a,b,c){var d=$j[a];if(d&&!d.cZ){_=d.prototype}else{!d&&(d=$j[a]=function(){});_=d.prototype=b<0?{}:ak(b);_.cM=c}for(var e=3;e<arguments.length;++e){arguments[e].prototype=_}if(d.cZ){_.cZ=d.cZ;d.cZ=null}}
-function Nd(a){for(a.m=a.i;a.m>=0;a.m--){if(a.f[a.m]==62){return false}if(a.f[a.m]==60){break}}if(a.m<0){return false}for(a.l=a.i;a.l<a.k;a.l++){if(a.f[a.l]==60){return false}if(a.f[a.l]==62){return true}}return false}
-function fb(a){var b,c,d,e,f;f=a.toLowerCase();if(f.length==0){return 1}else if(f.length==1){c=f.charCodeAt(0);e=c+1-97}else{e=0;for(d=0;d<f.length;d++){c=ll(f,f.length-1-d);b=fb(String.fromCharCode(c))*Xh(Math.pow(26,d));e+=b}}return e}
-function Ke(a){var b,c;if(!Sd(a,Fe)){return false}if(!Ed(a,62)){return false}b=a.i;Wd(a,a.h+Fe.length);if(!Hd(a,Ge,b)){return false}c=a.i+Ge.length;a.f[c]==34&&++c;if(Rd(a,c,Ie)||Rd(a,c,Ee)||Rd(a,c,He)){a.h=a.i=b+1;return true}return false}
-function ef(a){var b,c;if((a.i>=a.k?0:a.f[a.i])!=64){return false}b=a.h;a.i+=1;c=a.f[b+1];if(!(null!=String.fromCharCode(c).match(/[A-Z]/i))&&c!=95){return false}if(!Ed(a,123)){return false}if(!Ed(a,125)){return false}Xd(a,a.i+1);return true}
-function vd(a,b,c){var d,e,f,g;e=c;a.i=b;if(!Fd(a,46,c)){return}do{a.i+=1}while(Fd(a,46,c));d=a.i;Ld(a,sd,c)&&(e=a.i);if(e==d){return}f=a.j;g=f.length;a.j=Hh(Qj,bp,2,g+1,0);g!=0&&fm(f,0,a.j,0,g);a.j[g]=Hh(Jj,cp,-1,e-d,1);fm(a.f,d,a.j[g],0,e-d)}
-function Xb(a){var b,c,d,e,f,g,h;c=a.b;g=new Ko(Hb,c);g.e=dk(g.c,g.b);if(g.e){f=g.e[2];h=new Ko(Eb,f);h.e=dk(h.c,h.b);if(h.e){e=h.e[1];b=h.e[2];d=new Ko(new Mo('^\\d\\.'),e);d.e=dk(d.c,d.b);if(!!d.e&&f.indexOf(e+b)!=-1){return true}}}return false}
-function ob(b,c,d){var e,f,g;try{g=b?(Wc(),Tc):1;e=Xc(d,g);e=pb(e);b&&!c&&(e=nb(e));return L(),L(),new T(new W(e),K)}catch(a){a=Yj(a);if(Th(a,20)){f=a;return L(),P(op,new Rn(Ih(Oj,$o,1,['Failed to clean MS Office HTML.\n'+f.r()])))}else throw Xj(a)}}
-function Cd(a,b){var c,d,e,f,g;if(!Sd(a,yd)){return false}g=a.i;if(!Gd(a,xd)){return false}c=a.i+xd.length;d=b.c;Tf(b,yd,0,yd.length);e=a.k;Vd(a,a.f,a.i);Xd(a,g+yd.length);f=Bd(a,b);Vd(a,a.f,e);if(f){Tf(b,xd,0,xd.length);a.h=a.i=c}else{b.c=d;a.h=a.i=g}return f}
-function ad(a){var b,c,d,e,f,g,h;this.b=Hh(Rj,$o,3,128,0);for(c=0,d=a.length;c<d;++c){b=a[c];g=xl(b);e=g[0];e>=128&&(e=0);if(this.b[e]==null){this.b[e]=Ih(Qj,bp,2,[g])}else{h=this.b[e];f=h.length;this.b[e]=Hh(Qj,bp,2,f+1,0);fm(h,0,this.b[e],0,f);this.b[e][f]=g}}}
-function Rc(a,b){var c,d,e,f;if(!Sc(a,Pc)){return false}d=a.i;c=a.h+Pc.length;a.i=c;a.h=a.i=c;e=xl('<img ');Tf(b,e,0,e.length);f=xl('o:title="');if(!Hd(a,f,d)){return true}Tf(b,a.f,c,a.i-c);Wd(a,a.i+f.length);if(!Fd(a,34,d)){return true}Wd(a,a.i+1);Xd(a,a.i);return true}
-function Vb(a){var b,c,d,e;e=new Fn;d=null;for(c=0;c<a.c;c++){b=(ln(c,a.c),Rh(a.b[c],10));if(Th(b,8)){if(!Ho(new Ko(Fb,Rh(b,8).b))||c+1>=a.c||!Th((ln(c+1,a.c),a.b[c+1]),11)||!d){if(d){Lb(e,d);d=null}Jh(e.b,e.c++,b)}}else{!d&&(d=new Jc);Ic(d,Rh(b,11))}}!!d&&Lb(e,d);return e}
-function he(a,b){var c,d;if(a.j.length==0){return false}if(!Sd(a,fe)){return false}if(!Nd(a)){return false}if(!Md(a)){return false}c=a.d-a.e;for(d=0;d<a.j.length;d++){if(a.j[d].length==c){if(Rd(a,a.e,a.j[d])){break}}}if(d==a.j.length){return false}Xd(a,a.b);Uf(b);return true}
-function Bd(a,b){var c,d,e,f;d=false;f=32;c=a.i>=a.k?0:a.f[a.i];while(c!=0){e=false;switch(c){case 64:e=ef(a);break;case 47:e=Se(a);}!e&&(f==10||f==13)&&(e=ud(zd,a,b));if(e){d=true;f=b.c==0?0:b.b[b.c-1];a.i=a.h;c=a.i>=a.k?0:a.f[a.i]}else{Sf(b,f=c);c=(a.i=++a.h)>=a.k?0:a.f[a.i]}}return d}
-function Mb(a,b,c,d,e){var f,g,h,i,j;i=sl(yl(e),10,32);i.lastIndexOf(rp)!=-1&&i.lastIndexOf(rp)==i.length-rp.length&&(i=wl(i,0,i.length-7));while(i.indexOf(sp)==0){h=ol(i,Fl(62));i=vl(i,h+1)}g=ol(i,Fl(60));i=vl(i,g);i=Yb(i);f=new Ko(Cb,i);i=ek(f.c,f.b,op);j=new jc('-',(hc(),fc));Xl(c,$b(a,b,d,i,j))}
-function lh(a,b){var c,d,e,f,g,h,i,j,k,l;l=Hh(Nj,$o,23,b.length,0);for(f=0,g=l.length;f<g;f++){k=ul(b[f],Qp,0);i=-1;c=-1;e=Rp;if(k.length==2&&k[1]!=null){j=k[1];h=ql(j,Fl(58));d=rl(j,Fl(58),h-1);e=wl(j,0,d);if(h!=-1&&d!=-1){i=Sg(wl(j,d+1,h));c=Sg(vl(j,h+1))}}l[f]=new il(k[0],e+np+c,a.C(i<0?-1:i))}_f(l)}
-function _k(a){var b,c,d,e,f;if(a==null){throw new gl(Lp)}d=a.length;e=d>0&&(a.charCodeAt(0)==45||a.charCodeAt(0)==43)?1:0;for(b=e;b<d;b++){if(Hk(a.charCodeAt(b))==-1){throw new gl(eq+a+tp)}}f=parseInt(a,10);c=f<-2147483648;if(isNaN(f)){throw new gl(eq+a+tp)}else if(c||f>2147483647){throw new gl(eq+a+tp)}return f}
-function ve(a,b){var c,d,e,f;if(!Sd(a,te)){return false}f=a.h+te.length;for(;f<a.k;f++){c=a.f[f];if(c==62){break}if(c!=32&&c!=10&&c!=9&&c!=13){return false}}e=a.i=f+1;if(!Gd(a,se)){return false}d=a.i;a.i=e;if(Hd(a,te,d)){return false}Wd(a,d+se.length);if(!Ed(a,62)){return false}Tf(b,a.f,e,d-e);Xd(a,a.i+1);return true}
-function ed(){ed=Wo;dd=new ad(Ih(Oj,$o,1,['font-color','horiz-align','language','list-image-','mso-','page:','separator-image','tab-stops','tab-interval','text-underline','text-effect','text-line-through','table-border-color-dark','table-border-color-light','vert-align','vnd.ms-excel.']));cd=new ad(Ih(Oj,$o,1,['mso-list']))}
-function Yc(a,b,c){var d,e,f,g,h,i,j;j=a.k;e=a.f;a.h=a.i=0;f=32;d=c.p();h=0;i=0;g=false;while(i<j){for(;h<j;h++){f=e[h];if(f<256&&d[f]){break}}if(h>=j){fm(e,i,b.b,b.c,j-i);b.c+=j-i;break}(f==10||f==13)&&++h;h!=i&&(fm(e,i,b.b,b.c,h-i),b.c+=h-i);if(h==j){break}a.i=a.h=h;if(c.q(a,b,f)){g=true;i=h=a.i=a.h}else{i=h;f!=10&&f!=13&&++h}}return g}
-function fd(a,b,c,d,e,f,g){var h,i,j,k,l,m;l=d;m=e;k=c.c;b.i=e;i=false;j=false;while(m<f){if(!Yd(b)||b.i>=f){break}h=a.o(b);if(h){i=true;m!=l&&Tf(c,b.f,l,m-l);if(Fd(b,59,f)){l=m=b.i+=1}else{l=f;break}}else{j=true;if(Fd(b,59,f)){m=b.i+=1}else{break}}}if(j&&!i){return false}if(j&&i){g!=l&&Tf(c,b.f,l,g-l)}else{c.c=k;Uf(c)}b.h=b.i=g;return true}
-function Cc(){Cc=Wo;wc=new Dc('NO_TYPE',op,op);zc=new Dc('UNORDERED',xp,op);yc=new Dc('SQUARE',xp,' type="square"');tc=new Dc('CIRCLE',xp,' type="circle"');xc=new Dc('NUMERIC',wp,op);Bc=new Dc('UPPER_ROMAN',wp,' type="I"');vc=new Dc('LOWER_ROMAN',wp,' type="i"');Ac=new Dc('UPPER_ALPHA',wp,' type="A"');uc=new Dc('LOWER_ALPHA',wp,' type="a"');sc=Ih(Kj,$o,7,[wc,zc,yc,tc,xc,Bc,vc,Ac,uc])}
-function ud(a,b,c){var d,e,f,g,h,i,j,k,l;i=b.i;if(b.f[b.i+-1]!=10&&b.f[b.i+-1]!=13){return false}d=b.i>=b.k?0:b.f[b.i];if(d==123||d==125){return false}f=b.i;if(!Kd(b,rd)){return false}e=b.i;if((b.i>=b.k?0:b.f[b.i])!=123){if(!Yd(b)){return false}if((b.i>=b.k?0:b.f[b.i])!=123){return false}}l=b.i+1;if(!Ed(b,125)){return false}j=b.i;k=j+1;g=c.c;h=fd(a,b,c,i,l,j,k);h&&c.c<=g&&vd(b,f,e);return h}
-function pe(a){var b,c,d,e,f,g;d=a.h+1;b=a.f[d];if(b>127){return false}g=ne.b[b];if(g==null){return false}f=qe(a.f,d);for(c=0;c<g.length;c++){if(Rd(a,d,g[c])&&f==g[c].length){break}}if(c==g.length){return false}e=g[c];a.i=d+e.length;if(!Ed(a,62)){return false}d=a.i+1;if(a.f[d++]!=60||a.f[d++]!=47){return false}if(!Rd(a,d,e)){return false}a.i=d+e.length;if(!Ed(a,62)){return false}Xd(a,a.i+1);return true}
-function df(a,b){var c,d,e,f,g,h;f=a.h;if(a.f[f+2]!=58||a.f[f]!=60){return false}if(!Nc(bf,a.f[f+1])){return false}h=f+1;a.i=f+3;if(!Jd(a,af)){return false}g=a.i-h;if(!Ed(a,62)){return false}if(Pd(a,a.i-1)==47){Xd(a,a.i+1);return true}e=a.i+1;while(Id(a,a.f,h,g)){d=a.i-1;c=a.f[d];if(c==60){return false}if(c==47&&Pd(a,--d)==60){if(!Ed(a,62)){return false}Tf(b,a.f,e,d-e);Xd(a,a.i+1);return true}++a.i}return false}
-function ul(l,a,b){var c=new RegExp(a,dq);var d=[];var e=0;var f=l;var g=null;while(true){var h=c.exec(f);if(h==null||f==op||e==b-1&&b>0){d[e]=f;break}else{d[e]=f.substring(0,h.index);f=f.substring(h.index+h[0].length,f.length);c.lastIndex=0;if(g==f){d[e]=f.substring(0,1);f=f.substring(1)}g=f;e++}}if(b==0&&l.length>0){var i=d.length;while(i>0&&d[i-1]==op){--i}i<d.length&&d.splice(i,d.length-i)}var j=Al(d.length);for(var k=0;k<d.length;++k){j[k]=d[k]}return j}
-function Md(a){var b,c;for(b=a.i;b<a.k;b++){if(a.f[b]==62){return false}if(a.f[b]==61){break}}if(b==a.k){return false}a.c=++b;c=a.f[b];if(c==34||c==39){a.e=++b;for(;b<a.k;b++){if(a.f[b]==62){return false}if(a.f[b]==c){break}}if(b==a.k){return false}a.d=b;a.b=b+1;a.i=a.e;return true}else{a.e=a.c;for(;b<a.k;b++){if(a.f[b]==62){break}if(a.f[b]==32){break}if(a.f[b]==9){break}if(a.f[b]==13){break}if(a.f[b]==10){break}}if(b==a.k){return false}a.d=a.b=b;return true}}
-function kb(b){var c,d,e,f,g,h,i;d=0;c=new Tl(b.toLowerCase());e=false;try{d=(f=(g=0,g+=gb(c,109,1000),g+=jb(c,99,109,900),g+=ib(c,100,500),g+=jb(c,99,100,400),g),f=(h=f,h+=gb(c,99,100),h+=jb(c,120,99,90),h+=ib(c,108,50),h+=jb(c,120,108,40),h),f=(i=f,i+=gb(c,120,10),i+=jb(c,105,120,9),i+=ib(c,118,5),i+=jb(c,105,118,4),i),f+=gb(c,105,1),f)}catch(a){a=Yj(a);if(Th(a,21)){e=true}else throw Xj(a)}if(e||c.b.b.length>0){throw new Xk(b+' is not a parsable roman numeral')}return d}
-function Vj(){var a,b,c;bk()&&ck('com.google.gwt.useragent.client.UserAgentAsserter');a=Rh(Uj(),15);b=a.D();c=a.F();ml(b,c)||($wnd.alert('ERROR: Possible problem with your *.gwt.xml module file.\nThe compile time user.agent value ('+b+') does not match the runtime user.agent value ('+c+'). Expect more errors.\n'),undefined);bk()&&ck('com.google.gwt.user.client.DocumentModeAsserter');gk();bk()&&ck('com.ephox.keurig.client.Keurig');Vo();new db;$wnd.gwtInited&&$wnd.gwtInited()}
-function pb(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,q;d=new bm(a);b=d.b.b.length;while(b>-1){b=rl(d.b.b,'<p',b);c=pl(d.b.b,'<\/p>',b);if(b>-1&&c>-1){q=wl(d.b.b,b,c);m=q.indexOf(pp);if(m>-1){l=ol(q,Fl(62));if(l+1==m){f=pl(q,Fl(62),m);n=wl(q,m,f+1);e=n.indexOf(qp);if(e>-1){h=q.lastIndexOf(rp);if(7+h==q.length){i=wl(q,0,ol(q,Fl(62))+1);k=i.indexOf(qp);if(k>-1){j=mb(q,k);o=mb(n,e);if(!ml(j,o)){g=q.length-7;$l(d,g+b,q.length+b,op);$l(d,m+b,m+n.length+b,op);$l(d,k+b,k+j.length+b,o)}}}}}}}--b}return d.b.b}
-function Rb(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,q,r,s,t,u,v;g=Nb(b);v=Vb(g);s=new mc;u=new _l;for(f=new tn(v);f.b<f.c.J();){e=Rh(sn(f),10);if(Th(e,8)){Xl(u,Rh(e,8).b)}else{h=new tn(Rh(e,9).b);j=0;k=new _l;i=(hc(),fc);while(h.b<h.c.J()){r=Rh(sn(h),11);q=new Ko(Hb,r.b);q.e=dk(q.c,q.b);if(q.e){c=q.e[1];m=Ob(j,c);t=q.e[2];n=new Ko(Eb,t);n.e=dk(n.c,n.b);if(n.e){d=n.e[1];l=Jo(new Ko(Bb,n.e[2]),op);o=new jc(d,i);i=o;Xl(k,$b(s,j,m,l,o))}else{Mb(s,j,k,m,t)}j=m}}yh(k.b,up);Xl(k,Sb(j,s));Xl(u,Zb(a,k.b.b))}}return u.b.b}
-function fm(a,b,c,d,e){var f,g,h,i,j,k,l,m,n;if(a==null||c==null){throw new cl}m=og(a);i=og(c);if((m.c&4)==0||(i.c&4)==0){throw new Gk('Must be array types')}l=m.b;g=i.b;if(!((l.c&1)!=0?l==g:(g.c&1)==0)){throw new Gk('Array types must match')}n=a.length;j=c.length;if(b<0||d<0||e<0||b+e>n||d+e>j){throw new Zk}if(((l.c&1)==0||(l.c&4)!=0)&&m!=i){k=Rh(a,22);f=Rh(c,22);if(Wh(a)===Wh(c)&&b<d){b+=e;for(h=d+e;h-->d;){Jh(f,h,k[--b])}}else{for(h=d+e;d<h;){Jh(f,d++,k[b++])}}}else{Array.prototype.splice.apply(c,[d,e].concat(a.slice(b,b+e)))}}
-function Nb(a){var b,c,d,e,f,g,h,i,j;e=new Fn;h=new Ko(Hb,a);f=0;while(h.e=dk(h.c,h.b),!!h.e){j=h.e[1];b=new Ko(Db,j);b.e=dk(b.c,b.b);if(b.e){i=!h.e||h.e.length<1?-1:h.e.index;if(i>f){d=new Gc(wl(a,f,i));Jh(e.b,e.c++,d)}g=new Lc(wl(a,!h.e||h.e.length<1?-1:h.e.index,!h.e||h.e.length<1?-1:h.e.index+h.e[0].length));Jh(e.b,e.c++,g)}else{c=(!h.e||h.e.length<1?-1:h.e.index)>f?f:!h.e||h.e.length<1?-1:h.e.index;d=new Gc(wl(a,c,!h.e||h.e.length<1?-1:h.e.index+h.e[0].length));Jh(e.b,e.c++,d)}f=!h.e||h.e.length<1?-1:h.e.index+h.e[0].length}if(f<a.length){d=new Gc(vl(a,f));Jh(e.b,e.c++,d)}return e}
-function cb(h){var e=(Vo(),Ro('com.ephox.keurig.WordCleaner'));var f,g=h;$wnd.com.ephox.keurig.WordCleaner=mp(function(){var a,b=this,c=arguments;c.length==1&&g.n(c[0])?(a=c[0]):c.length==0&&(a=new Z);b.g=a;a['__gwtex_wrap']=b;return b});f=$wnd.com.ephox.keurig.WordCleaner.prototype=new Object;$wnd.com.ephox.keurig.WordCleaner.cleanDocument=mp(function(a,b){var c,d;return c=new zb(a,b),d=M(ob(c.c,c.d,c.b)),Rh(d.c.b,1)});$wnd.com.ephox.keurig.WordCleaner.yury=mp(function(a,b){var c;return c=b?(Wc(),Tc):1,Xc(a,c)});if(e)for(p in e)$wnd.com.ephox.keurig.WordCleaner[p]===undefined&&($wnd.com.ephox.keurig.WordCleaner[p]=e[p])}
-function jc(a,b){hc();var c,d,e,f,g,h;f=new Ko(bc,a);f.e=dk(f.c,f.b);if(f.e){g=f.e[1];this.c=ml(g,'\xA7')?(Cc(),yc):ml(g,'o')?(Cc(),tc):(Cc(),zc)}else{e=new Ko(new Mo('\\(?(\\d+|[a-zA-Z]+)(?:\\)|\\.)?'),a);e.e=dk(e.c,e.b);if(e.e){c=e.e[1];if(kc(c,b)){this.c=Ho(new Ko(gc,c))?(Cc(),Ac):(Cc(),uc);this.b=fb(c)}else{d=new Ko(dc,c);d.e=dk(d.c,d.b);if(!!d.e&&d.e[0].length!=0){this.c=(Cc(),vc);this.b=kb(c)}else{h=new Ko(ec,c);h.e=dk(h.c,h.b);if(!!h.e&&h.e[0].length!=0){this.c=(Cc(),Bc);this.b=kb(c)}else{if(Ho(new Ko(cc,c))){this.c=(Cc(),uc);this.b=fb(c)}else if(Ho(new Ko(gc,c))){this.c=(Cc(),Ac);this.b=fb(c)}else{this.c=(Cc(),xc);this.b=_k(c)}}}}}else{this.c=(Cc(),zc)}}}
-function Kb(){Kb=Wo;Ib=new No('mso\\-list:.*?([;"\'])',32);Db=new No('style=["\'].*?mso\\-list:(?:([0-9]+)|.*?level([0-9]+)).*?["\']',32);Gb=new Mo('<ol([^>]*)><li><ol([^>]*)>');Jb=new Mo('<ul([^>]*)><li><ul([^>]*)>');Eb=new No('^[ \\t\\n\\x0B\\f\\r]*(?:<[^>]*>)*?(?:<span[^>]*>[ \\t\\n\\x0B\\f\\r]*){0,3}(?:&nbsp;|\\s)*(?:<\/span[^>]*>[ \\t\\n\\x0B\\f\\r]*)?([\xB7\xA7\u2022\u2043\u25A1o-]|\xD8|&middot;|<img[^>]*>|\\(?(?:\\d+|[a-zA-z]+)(?:\\)|\\.)?)(?:&nbsp;|\\s)*(?:<span[^>]*>[ \\t\\n\\x0B\\f\\r]*)?(?:&nbsp;|\\s)*(?:<\/span[^>]*>[ \\t\\n\\x0B\\f\\r]*){0,3}(.*?)$',32);Hb=new No('<p([^>]*)>(.*?)<\/p>[ \\t\\n\\x0B\\f\\r]*',32);Fb=new Mo('<p[^>]*>(?:<[^>]*>|[ \\t\\n\\x0B\\f\\r])*&nbsp;(?:<[^>]*>|[ \\t\\n\\x0B\\f\\r])*<\/p>');Cb=new Mo('^(?:<\/[^>]+>)*');Bb=new Mo('<a\\sname="OLE_LINK\\d">|<\/a>')}
-function gk(){var a,b,c;b=$doc.compatMode;a=Ih(Oj,$o,1,[Vp]);for(c=0;c<a.length;c++){if(ml(a[c],b)){return}}a.length==1&&ml(Vp,a[0])&&ml('BackCompat',b)?"GWT no longer supports Quirks Mode (document.compatMode=' BackCompat').<br>Make sure your application's host HTML page has a Standards Mode (document.compatMode=' CSS1Compat') doctype,<br>e.g. by using &lt;!doctype html&gt; at the start of your application's HTML page.<br><br>To continue using this unsupported rendering mode and risk layout problems, suppress this message by adding<br>the following line to your*.gwt.xml module file:<br>&nbsp;&nbsp;&lt;extend-configuration-property name=\"document.compatMode\" value=\""+b+'"/&gt;':"Your *.gwt.xml module configuration prohibits the use of the current doucment rendering mode (document.compatMode=' "+b+"').<br>Modify your application's host HTML page doctype, or update your custom 'document.compatMode' configuration property settings."}
-var op='',fq=' ',tp='"',Np='(',Up=')',gq=', ',Pp=':',Kp=': ',sp='<',up='<\/li>',rp='<\/span>',zp='<\/style>',pp='<span',yp='<style',Ap='=',vp='>',np='@',Qp='@@',Vp='CSS1Compat',Fp='Edit-Time-Data',Ep='File-List',eq='For input string: "',Gp='Ole-Object-Data',Hp='Original-File',Ip='Preview',Mp='String',Rp='Unknown',Sp='[',jq='[Ljava.lang.',Tp=']',Cp=']>',Op='anonymous',qq='com.ephox.functional.data.immutable.',oq='com.ephox.keurig.client.',pq='com.ephox.tord.guts.',sq='com.ephox.tord.lists.',uq='com.ephox.tord.lists.data.',rq='com.ephox.tord.wordhtmlfilter.',iq='com.google.gwt.core.client.',lq='com.google.gwt.core.client.impl.',kq='com.google.gwt.useragent.client.',qp='dir=',dq='g',bq='gecko',Wp='gecko1_8',Dp='i',$p='ie10',aq='ie8',_p='ie9',hq='java.lang.',nq='java.util.',tq='java.util.regex.',Jp='lang',Zp='msie',Lp='null',wp='ol',mq='org.timepedia.exporter.client.',Bp='ovwxp',Yp='safari',xp='ul',cq='unknown',Xp='webkit';var _,$j={},bp={3:1,16:1,22:1},cp={2:1,16:1},ip={26:1},kp={27:1},_o={4:1},lp={16:1,25:1},Zo={},ap={16:1},gp={16:1,20:1,21:1,24:1},dp={12:1},ep={16:1,20:1,24:1},fp={15:1},$o={16:1,22:1},jp={28:1},hp={17:1};_j(1,-1,Zo,A);_.eQ=function B(a){return this===a};_.gC=function C(){return this.cZ};_.hC=function D(){return Cg(this)};_.tS=function F(){return this.cZ.e+np+al(this.hC())};_.toString=function(){return this.tS()};_.tM=Wo;_j(4,1,{});_j(5,1,_o);_.eQ=function N(a){return Th(a,4)&&R(this,Rh(a,4))};_.hC=function O(){return 42};_.tS=function Q(){return 'value: '+this.c.b+', log: '+Rh(this.b.b,25)};var J,K;_j(8,5,_o,T);_j(10,4,{},W);_j(13,1,{5:1},Z);_j(14,1,{},db);_.n=function eb(a){return a!=null&&Th(a,5)};var ab=false;_j(16,1,{});_.c=false;_.d=false;_j(17,1,{},ub);_j(18,16,{},zb);var wb;_j(19,1,{},_b);var Bb,Cb,Db,Eb,Fb,Gb,Hb,Ib,Jb;_j(20,1,{6:1},ic,jc);_.b=0;var bc,cc,dc,ec,fc,gc;_j(21,1,{},mc);_j(23,1,{16:1,18:1,19:1});_.eQ=function pc(a){return this===a};_.hC=function qc(){return Cg(this)};_.tS=function rc(){return this.d};_j(22,23,{7:1,16:1,18:1,19:1},Dc);var sc,tc,uc,vc,wc,xc,yc,zc,Ac,Bc;_j(24,1,{8:1,10:1},Gc);_j(25,1,{9:1,10:1},Jc);_j(26,1,{10:1,11:1},Lc);_j(27,1,{},Oc);var Pc;var Tc=0,Uc,Vc;_j(30,1,{},ad);_j(31,1,{});_.o=function gd(a){var b,c,d;c=a.i>=a.k?0:a.f[a.i];d=_c(cd,c);if(d!=null&&Td(a,a.i,d)){return false}b=_c(dd,c);return b!=null&&Td(a,a.i,b)};var cd,dd;_j(32,31,{},md);var jd;_j(33,32,{},pd);_.o=function od(a){var b,c;b=a.i>=a.k?0:a.f[a.i];c=_c((ed(),cd),b);return c==null||!Td(a,a.i,c)};_j(34,31,{},wd);var rd,sd;var xd,yd,zd;_j(36,1,{},Zd);_.b=0;_.c=0;_.d=0;_.e=0;_.h=0;_.i=0;_.k=0;_.l=0;_.m=0;_j(37,1,{},ae);var be,ce;var fe;var ie,je,ke;var ne;var se,te;_j(44,1,{},De);var xe,ye,ze,Ae;var Ee,Fe,Ge,He,Ie;var Le,Me;var Pe,Qe;var Te,Ue;var Xe,Ye,Ze;var af,bf;_j(52,1,dp,jf);_.p=function kf(){return gf.b};_.q=function lf(a,b,c){switch(c){case 60:if(pe(a)){return true}a.i=a.h;if(ve(a,b)){return true}a.i=a.h;return df(a,b);case 13:case 10:return re(a);}return false};var gf;_j(53,1,dp,pf);_.p=function qf(){return nf.b};_.q=function rf(a,b,c){switch(c){case 60:if(Rc(a,b)){return true}a.i=a.h;if(me(a)){return true}a.i=a.h;if(_e(a,b)){return true}a.i=a.h;return Ke(a);case 120:return Oe(a,b);case 13:case 10:return re(a);}return false};var nf;_j(54,1,dp,vf);_.p=function wf(){return tf.b};_.q=function xf(a,b,c){switch(c){case 60:if(pe(a)){return true}a.i=a.h;if(ve(a,b)){return true}a.i=a.h;return df(a,b);case 13:case 10:return re(a);case 99:return he(a,b);}return false};var tf;_j(55,1,dp,Ef);_.p=function Ff(){return zf.b};_.q=function Gf(a,b,c){switch(c){case 60:if(df(a,b)){return true}a.i=a.h;if(Cd(a,b)){return true}a.i=a.h;if(Ce(Cf,a)){return true}a.i=a.h;return false;case 111:case 118:case 119:case 120:case 112:return ee(a,b);case 115:return ld(Af,a,b);case 108:return _d(Bf,a,b);}return false};var zf,Af,Bf,Cf;_j(56,1,dp,Of);_.p=function Pf(){return If.b};_.q=function Qf(a,b,c){switch(c){case 60:if(df(a,b)){return true}a.i=a.h;if(We(a)){return true}a.i=a.h;if(Ce(Mf,a)){return true}a.i=a.h;return false;case 115:return ld(Jf,a,b);case 99:return _d(Kf,a,b);case 108:return _d(Lf,a,b);case 111:case 118:case 119:case 120:case 112:return ee(a,b);}return false};var If,Jf,Kf,Lf,Mf;_j(57,1,{},Vf);_.tS=function Wf(){return Hl(this.b,this.c)};_.c=0;_j(63,1,{16:1,24:1});_.r=function ag(){return this.f};_.tS=function bg(){var a,b;a=this.cZ.e;b=this.r();return b!=null?a+Kp+b:a};_j(62,63,ep);_j(61,62,ep);_j(60,61,{13:1,16:1,20:1,24:1},hg);_.r=function kg(){gg(this);return this.d};_.s=function lg(){return this.c===eg?null:this.c};var eg;_j(67,1,{});var sg=0,tg=0,ug=0,vg=-1;_j(69,67,{},Ng);var Jg;_j(72,1,{},Xg);_.t=function Yg(){var a={};var b=[];var c=arguments.callee.caller.caller;while(c){var d=this.v(c.toString());b.push(d);var e=Pp+d;var f=a[e];if(f){var g,h;for(g=0,h=f.length;g<h;g++){if(f[g]===c){return b}}}(f||(a[e]=[])).push(c);c=c.caller}return b};_.u=function Zg(a){var b,c,d,e;d=this.A(a.c===(fg(),eg)?null:a.c);e=Hh(Nj,$o,23,d.length,0);for(b=0,c=e.length;b<c;b++){e[b]=new il(d[b],null,-1)}_f(e)};_.v=function $g(a){return Qg(a)};_.w=function _g(a){var b,c,d,e;d=Tj().t();e=Hh(Nj,$o,23,d.length,0);for(b=0,c=e.length;b<c;b++){e[b]=new il(d[b],null,-1)}_f(e)};_.A=function ah(a){return []};_j(74,72,{},fh);_.t=function gh(){return Tg(this.A(Wg()),this.B())};_.A=function hh(a){return eh(this,a)};_.B=function ih(){return 2};_j(73,74,{});_.t=function mh(){var a;a=Tg(kh(this,Wg()),3);a.length==0&&(a=Tg((new Xg).t(),1));return a};_.u=function nh(a){var b;b=kh(this,a.c===(fg(),eg)?null:a.c);lh(this,b)};_.v=function oh(a){var b,c,d,e;if(a.length==0){return Op}e=yl(a);e.indexOf('at ')==0&&(e=vl(e,3));c=e.indexOf(Sp);c!=-1&&(e=yl(wl(e,0,c))+yl(vl(e,e.indexOf(Tp,c)+1)));c=e.indexOf(Np);if(c==-1){c=e.indexOf(np);if(c==-1){d=e;e=op}else{d=yl(vl(e,c+1));e=yl(wl(e,0,c))}}else{b=e.indexOf(Up,c);d=wl(e,c+1,b);e=yl(wl(e,0,c))}c=ol(e,Fl(46));c!=-1&&(e=vl(e,c+1));return (e.length>0?e:Op)+Qp+d};_.w=function ph(a){var b;b=Tj().t();lh(this,b)};_.A=function qh(a){return kh(this,a)};_.C=function rh(a){return a};_.B=function sh(){return 3};_j(75,73,{},uh);_.C=function vh(a){return -1};_j(76,1,{});_j(77,76,{},Ah);_.b=op;_j(81,1,{},Ch);_.qI=0;var Kh,Lh;var Sj=-1;_j(95,1,fp,ik);_.D=function jk(){return Wp};_.F=function kk(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Xp)!=-1}())return Yp;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=10}())return $p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=9}())return _p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=8}())return aq;if(function(){return b.indexOf(bq)!=-1}())return Wp;return cq};_j(96,1,fp,mk);_.D=function nk(){return $p};_.F=function ok(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Xp)!=-1}())return Yp;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=10}())return $p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=9}())return _p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=8}())return aq;if(function(){return b.indexOf(bq)!=-1}())return Wp;return cq};_j(97,1,fp,qk);_.D=function rk(){return aq};_.F=function sk(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Xp)!=-1}())return Yp;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=10}())return $p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=9}())return _p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=8}())return aq;if(function(){return b.indexOf(bq)!=-1}())return Wp;return cq};_j(98,1,fp,uk);_.D=function vk(){return _p};_.F=function wk(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Xp)!=-1}())return Yp;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=10}())return $p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=9}())return _p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=8}())return aq;if(function(){return b.indexOf(bq)!=-1}())return Wp;return cq};_j(99,1,fp,yk);_.D=function zk(){return Yp};_.F=function Ak(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Xp)!=-1}())return Yp;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=10}())return $p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=9}())return _p;if(function(){return b.indexOf(Zp)!=-1&&$doc.documentMode>=8}())return aq;if(function(){return b.indexOf(bq)!=-1}())return Wp;return cq};_j(100,1,{});_.tS=function Dk(){return qg(this.b)};_j(101,61,ep,Fk,Gk);_j(103,1,{},Jk);_.tS=function Sk(){return ((this.c&2)!=0?'interface ':(this.c&1)!=0?op:'class ')+this.e};_.c=0;_.d=0;_j(104,61,ep,Uk);_j(105,61,gp,Wk,Xk);_j(106,61,ep,Zk,$k);_j(110,61,ep,cl);var dl;_j(112,105,gp,gl);_j(113,1,{16:1,23:1},il);_.tS=function jl(){return this.b+'.'+this.e+Np+(this.c!=null?this.c:'Unknown Source')+(this.d>=0?Pp+this.d:op)+Up};_.d=0;_=String.prototype;_.cM={1:1,16:1,17:1,18:1};_.eQ=function Dl(a){return ml(this,a)};_.hC=function Gl(){return Nl(this)};_.tS=_.toString;var Il,Jl=0,Kl;_j(115,1,hp,Sl,Tl);_.tS=function Ul(){return this.b.b};_j(116,1,hp,_l,am,bm);_.tS=function cm(){return this.b.b};_j(117,106,ep,em);_j(119,61,ep,hm);_j(120,1,{});_.G=function lm(a){throw new hm('Add not supported on this collection')};_.H=function mm(a){var b;b=jm(this.I(),a);return !!b};_.K=function nm(){return this.L(Hh(Mj,$o,0,this.J(),0))};_.L=function om(a){var b,c,d;d=this.J();a.length<d&&(a=Fh(a,d));c=this.I();for(b=0;b<d;++b){Jh(a,b,c.O())}a.length>d&&Jh(a,d,null);return a};_.tS=function pm(){return km(this)};_j(122,1,ip);_.eQ=function sm(a){var b,c,d,e,f;if(a===this){return true}if(!Th(a,26)){return false}e=Rh(a,26);if(this.e!=e.e){return false}for(c=new Rm((new Mm(e)).b);rn(c.b);){b=Rh(sn(c.b),27);d=b.P();f=b.Q();if(!(d==null?this.d:Th(d,1)?Cm(this,Rh(d,1)):Bm(this,d,~~pg(d)))){return false}if(!Eo(f,d==null?this.c:Th(d,1)?Am(this,Rh(d,1)):zm(this,d,~~pg(d)))){return false}}return true};_.hC=function tm(){var a,b,c;c=0;for(b=new Rm((new Mm(this)).b);rn(b.b);){a=Rh(sn(b.b),27);c+=a.hC();c=~~c}return c};_.tS=function um(){var a,b,c,d;d='{';a=false;for(c=new Rm((new Mm(this)).b);rn(c.b);){b=Rh(sn(c.b),27);a?(d+=gq):(a=true);d+=op+b.P();d+=Ap;d+=op+b.Q()}return d+'}'};_j(121,122,ip);_.M=function Hm(a,b){return Wh(a)===Wh(b)||a!=null&&ng(a,b)};_.d=false;_.e=0;_j(124,120,jp);_.eQ=function Km(a){var b,c,d;if(a===this){return true}if(!Th(a,28)){return false}c=Rh(a,28);if(c.b.e!=this.J()){return false}for(b=new Rm(c.b);rn(b.b);){d=Rh(sn(b.b),27);if(!this.H(d)){return false}}return true};_.hC=function Lm(){var a,b,c;a=0;for(b=this.I();b.N();){c=b.O();if(c!=null){a+=pg(c);a=~~a}}return a};_j(123,124,jp,Mm);_.H=function Nm(a){var b,c,d;if(Th(a,27)){b=Rh(a,27);c=b.P();if(xm(this.b,c)){d=ym(this.b,c);return go(b.Q(),d)}}return false};_.I=function Om(){return new Rm(this.b)};_.J=function Pm(){return this.b.e};_j(125,1,{},Rm);_.N=function Sm(){return rn(this.b)};_.O=function Tm(){return Rh(sn(this.b),27)};_j(127,1,kp);_.eQ=function Wm(a){var b;if(Th(a,27)){b=Rh(a,27);if(Eo(this.P(),b.P())&&Eo(this.Q(),b.Q())){return true}}return false};_.hC=function Xm(){var a,b;a=0;b=0;this.P()!=null&&(a=pg(this.P()));this.Q()!=null&&(b=pg(this.Q()));return a^b};_.tS=function Ym(){return this.P()+Ap+this.Q()};_j(126,127,kp,Zm);_.P=function $m(){return null};_.Q=function _m(){return this.b.c};_.R=function an(a){return Fm(this.b,a)};_j(128,127,kp,cn);_.P=function dn(){return this.b};_.Q=function en(){return Am(this.c,this.b)};_.R=function fn(a){return Gm(this.c,this.b,a)};_j(129,120,{25:1});_.S=function jn(a,b){throw new hm('Add not supported on this list')};_.G=function kn(a){this.S(this.J(),a);return true};_.eQ=function mn(a){var b,c,d,e,f;if(a===this){return true}if(!Th(a,25)){return false}f=Rh(a,25);if(this.J()!=f.J()){return false}d=this.I();e=f.I();while(d.b<d.c.J()){b=sn(d);c=sn(e);if(!(b==null?c==null:ng(b,c))){return false}}return true};_.hC=function nn(){var a,b,c;b=1;a=this.I();while(a.b<a.c.J()){c=sn(a);b=31*b+(c==null?0:pg(c));b=~~b}return b};_.I=function pn(){return new tn(this)};_j(130,1,{},tn);_.N=function un(){return rn(this)};_.O=function vn(){return sn(this)};_.b=0;_j(131,129,lp,Fn);_.S=function Gn(a,b){xn(this,a,b)};_.G=function Hn(a){return yn(this,a)};_.H=function In(a){return Bn(this,a,0)!=-1};_.T=function Jn(a){return An(this,a)};_.J=function Kn(){return this.c};_.K=function On(){return Dn(this)};_.L=function Pn(a){return En(this,a)};_.c=0;_j(132,129,lp,Rn);_.H=function Sn(a){return hn(this,a)!=-1};_.T=function Tn(a){return ln(a,this.b.length),this.b[a]};_.J=function Un(){return this.b.length};_.K=function Vn(){return Dh(this.b)};_.L=function Wn(a){var b,c;c=this.b.length;a.length<c&&(a=Fh(a,c));for(b=0;b<c;++b){Jh(a,b,this.b[b])}a.length>c&&Jh(a,c,null);return a};var Xn;_j(134,129,lp,$n);_.H=function _n(a){return false};_.T=function ao(a){throw new Zk};_.J=function bo(){return 0};_j(135,61,ep,eo);_j(136,121,{16:1,26:1},ho);_j(137,127,kp,jo);_.P=function ko(){return this.b};_.Q=function lo(){return this.c};_.R=function mo(a){var b;b=this.c;this.c=a;return b};_j(138,61,ep,oo);_j(140,129,lp);_.S=function ro(a,b){xn(this.b,a,b)};_.G=function so(a){return yn(this.b,a)};_.H=function to(a){return Bn(this.b,a,0)!=-1};_.T=function uo(a){return An(this.b,a)};_.I=function vo(){return new tn(this.b)};_.J=function wo(){return this.b.c};_.K=function xo(){return Dn(this.b)};_.L=function yo(a){return En(this.b,a)};_.tS=function zo(){return km(this.b)};_j(139,140,lp,Do);_j(142,1,{},Ko);_.b=null;_.d=0;_j(143,100,{},Mo,No);_j(145,1,{});_j(144,145,{},So);var Uo;var mp=Dg();var bj=Lk(hq,'Object',1),Fi=Lk(iq,'Scheduler',67),Ei=Lk(iq,'JavaScriptObject$',64),Mj=Kk(jq,'Object;',150,bj),Ij=Ok('boolean',' Z'),Pj=Kk(op,'[Z',152,Ij),ij=Lk(hq,'Throwable',63),Yi=Lk(hq,'Exception',62),cj=Lk(hq,'RuntimeException',61),dj=Lk(hq,'StackTraceElement',113),Nj=Kk(jq,'StackTraceElement;',153,dj),Ni=Lk('com.google.gwt.lang.','SeedUtil',88),Xi=Lk(hq,'Enum',23),Yh=Ok('char',' C'),Jj=Kk(op,'[C',154,Yh),Wi=Lk(hq,'Class',103),hj=Lk(hq,Mp,2),Oj=Kk(jq,'String;',151,hj),Vi=Lk(hq,'ClassCastException',104),Di=Lk(iq,'JavaScriptException',60),fj=Lk(hq,'StringBuilder',116),Ui=Lk(hq,'ArrayStoreException',101),Oi=Lk(kq,'UserAgentImplGecko1_8',95),Si=Lk(kq,'UserAgentImplSafari',99),Pi=Lk(kq,'UserAgentImplIe10',96),Ri=Lk(kq,'UserAgentImplIe9',98),Qi=Lk(kq,'UserAgentImplIe8',97),_i=Lk(hq,'NullPointerException',110),Zi=Lk(hq,'IllegalArgumentException',105),Mi=Lk(lq,'StringBufferImpl',76),Hj=Lk(mq,'ExporterBaseImpl',145),Gj=Lk(mq,'ExporterBaseActual',144),Ki=Lk(lq,'StackTraceCreator$Collector',72),Ji=Lk(lq,'StackTraceCreator$CollectorMoz',74),Ii=Lk(lq,'StackTraceCreator$CollectorChrome',73),Hi=Lk(lq,'StackTraceCreator$CollectorChromeNoSourceMap',75),Li=Lk(lq,'StringBufferImplAppend',77),Gi=Lk(lq,'SchedulerImpl',69),tj=Lk(nq,'AbstractMap',122),pj=Lk(nq,'AbstractHashMap',121),kj=Lk(nq,'AbstractCollection',120),uj=Lk(nq,'AbstractSet',124),mj=Lk(nq,'AbstractHashMap$EntrySet',123),lj=Lk(nq,'AbstractHashMap$EntrySetIterator',125),sj=Lk(nq,'AbstractMapEntry',127),nj=Lk(nq,'AbstractHashMap$MapEntryNull',126),oj=Lk(nq,'AbstractHashMap$MapEntryString',128),zj=Lk(nq,'HashMap',136),bi=Lk(oq,'WordCleaner_ExporterImpl',14),ci=Lk(oq,'WordCleaner',13),Aj=Lk(nq,'MapEntryImpl',137),ej=Lk(hq,'StringBuffer',115),rj=Lk(nq,'AbstractList',129),vj=Lk(nq,'ArrayList',131),qj=Lk(nq,'AbstractList$IteratorImpl',130),di=Lk(pq,'OfficeImportFunction',16),fi=Lk(pq,'WordImportFunction',18),_h=Lk(qq,'Logged',5),$h=Lk(qq,'Logged$6',8),Zh=Lk('com.ephox.functional.closures.','Thunk',4),wi=Nk(rq,'ReplacementRuleSet'),Lj=Kk('[Lcom.ephox.tord.wordhtmlfilter.','ReplacementRuleSet;',155,wi),jj=Lk(hq,'UnsupportedOperationException',119),yi=Lk(rq,'StepOne',53),Ai=Lk(rq,'StepTwoFilterStyles',55),zi=Lk(rq,'StepThree',54),xi=Lk(rq,'StepLast',52),Bi=Lk(rq,'StepTwoRemoveStyles',56),Qj=Kk(op,'[[C',156,Jj),ti=Lk(rq,'ReadBuffer',36),Ci=Lk(rq,'WriteBuffer',57),ei=Lk(pq,'Scrub',17),gi=Lk(sq,'ListImporter',19),Ti=Lk('com.googlecode.gwtx.java.util.impl.client.','PatternImpl',100),Fj=Lk(tq,'Pattern',143),Ej=Lk(tq,'Matcher',142),xj=Lk(nq,'Collections$EmptyList',134),ai=Lk('com.ephox.functional.factory.','Thunks$1',10),wj=Lk(nq,'Arrays$ArrayList',132),ni=Lk(rq,'CharMap',27),vi=Lk(rq,'RemoveLink',44),pi=Lk(rq,'ModifySingleStyle',31),ri=Lk(rq,'ModifyStyleAttribute',32),ui=Lk(rq,'RemoveAttributeByName',37),qi=Lk(rq,'ModifyStyleAttributeOnlyUsingMustKeepList',33),$i=Lk(hq,'IndexOutOfBoundsException',106),Bj=Lk(nq,'NoSuchElementException',138),gj=Lk(hq,'StringIndexOutOfBoundsException',117),Rj=Kk(op,'[[[C',157,Qj),oi=Lk(rq,'IndexedStrings',30),si=Lk(rq,'ModifyStyleDefinition',34),hi=Lk(sq,'ListInfoStack',21),ii=Lk(sq,'ListInfo',20),mi=Lk(uq,'ListItemData',26),ki=Lk(uq,'ContentData',24),li=Lk(uq,'ListAggregationData',25),aj=Lk(hq,'NumberFormatException',112),ji=Mk(sq,'ListTagAndType',22,Ec),Kj=Kk('[Lcom.ephox.tord.lists.','ListTagAndType;',158,ji),Dj=Lk(nq,'Vector',140),Cj=Lk(nq,'Stack',139),yj=Lk(nq,'EmptyStackException',135);if (com_ephox_keurig_Keurig) com_ephox_keurig_Keurig.onScriptLoad(gwtOnLoad);})();
diff --git a/static/tinymce1.3/plugins/powerpaste/plugin.js b/static/tinymce1.3/plugins/powerpaste/plugin.js
deleted file mode 100644
index c9305569..00000000
--- a/static/tinymce1.3/plugins/powerpaste/plugin.js
+++ /dev/null
@@ -1,19069 +0,0 @@
-// import '../stable/plugins.min.js'
-/* Ephox PowerPaste plugin
- *
- * Copyright 2010-2015 Ephox Corporation.  All rights reserved.
- *
- * Version: 2.1.0.0
- */
-(function () {
-
-  if (this.ephox)
-    var old = this.ephox.bolt;
-
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
-
-var register = function (id) {
-  var module = dem(id);
-  var fragments = id.split('.');
-  var target = Function('return this;')();
-  for (var i = 0; i < fragments.length - 1; ++i) {
-    if (target[fragments[i]] === undefined)
-      target[fragments[i]] = {};
-    target = target[fragments[i]];
-  }
-  target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
-  var dependencies = defs[id].dependencies;
-  var definition = defs[id].definition;
-  var instances = [];
-  for (var i = 0; i < dependencies.length; ++i)
-    instances.push(dem(dependencies[i]));
-  defs[id].instance = definition.apply(null, instances);
-  if (defs[id].instance === undefined)
-     throw 'required module [' + id + '] could not be defined (definition function returned undefined)';
-};
-
-var def = function (id, dependencies, definition) {
-  if (typeof id !== 'string')
-    throw 'invalid module definition, module id must be defined and be a string';
-  if (dependencies === undefined)
-    throw 'invalid module definition, dependencies must be specified';
-  if (definition === undefined)
-    throw 'invalid module definition, definition function must be specified';
-  defs[id] = {
-    dependencies: dependencies,
-    definition: definition,
-    instance: undefined
-  };
-};
-
-var dem = function (id) {
-  if (defs[id] === undefined)
-    throw 'required module [' + id + '] is not defined';
-  if (defs[id].instance === undefined)
-    instantiate(id);
-  return defs[id].instance;
-};
-
-var req = function (ids, callback) {
-  var instances = [];
-  for (var i = 0; i < ids.length; ++i)
-    instances.push(dem(ids[i]));
-  callback.apply(null, callback);
-};
-
-var ephox = this.ephox || {};
-
-ephox.bolt = {
-  module: {
-    api: {
-      define: def,
-      require: req,
-      demand: dem
-    }
-  }
-};
-
-
-// This is here to give hints to minification
-// ephox.bolt.module.api.define
-var eeephox_def_eeephox = def;
-// ephox.bolt.module.api.require
-var eeephox_req_eeephox = req;
-// ephox.bolt.module.api.demand
-var eeephox_dem_eeephox = dem;
-
-/*jsc
-["ephox.powerpaste.util.NodeUtil","ephox.powerpaste.i18n.I18n","ephox.powerpaste.alien.Once","ephox.powerpaste.PowerPastePlugin","ephox.powerpaste.settings.Defaults","ephox.powerpaste.styles.Styles","ephox.powerpaste.legacy.data.tokens.Helper","ephox.powerpaste.legacy.data.tokens.Tokenizer","ephox.powerpaste.legacy.data.tokens.Serializer","ephox.powerpaste.legacy.data.tokens.Filter","ephox.powerpaste.legacy.data.tokens.Attributes","ephox.powerpaste.legacy.data.tokens.Token","ephox.powerpaste.legacy.data.Insert","ephox.powerpaste.legacy.wordimport.WordOnlyFilters","ephox.powerpaste.legacy.wordimport.WordImport","ephox.powerpaste.legacy.wordimport.CommonFilters","ephox.powerpaste.legacy.filters.list.Emitter","ephox.powerpaste.legacy.filters.list.Lists","ephox.powerpaste.legacy.filters.list.ListTypes","ephox.powerpaste.legacy.filters.list.ListStates","ephox.powerpaste.legacy.filters.list.CommentHeuristics","ephox.powerpaste.legacy.filters.StripImages","ephox.powerpaste.legacy.filters.FilterInlineStyles","ephox.powerpaste.legacy.filters.StripBookmarks","ephox.powerpaste.legacy.filters.StripScripts","ephox.powerpaste.legacy.filters.StripLangAttribute","ephox.powerpaste.legacy.filters.Text","ephox.powerpaste.legacy.filters.StripTocLinks","ephox.powerpaste.legacy.filters.StripNoAttributeA","ephox.powerpaste.legacy.filters.InferListTags","ephox.powerpaste.legacy.filters.StripOPTags","ephox.powerpaste.legacy.filters.StripFormattingAttributes","ephox.powerpaste.legacy.filters.StripEmptyStyleAttributes","ephox.powerpaste.legacy.filters.StripEmptyInlineElements","ephox.powerpaste.legacy.filters.StripNamespaceDeclarations","ephox.powerpaste.legacy.filters.StripClassAttributes","ephox.powerpaste.legacy.filters.StripMetaAndLinkElements","ephox.powerpaste.legacy.filters.StripVMLAttributes","ephox.powerpaste.legacy.tinymce.Clipboard","ephox.powerpaste.legacy.tinymce.Settings","ephox.powerpaste.legacy.tinymce.Util","ephox.powerpaste.legacy.tinymce.BrowserFilters","ephox.powerpaste.tinymce.ModernPowerDrop","ephox.powerpaste.tinymce.ModernTinyDialog","ephox.powerpaste.tinymce.ModernPowerPaste","ephox.powerpaste.tinymce.ErrorDialog","ephox.powerpaste.tinymce.LegacyPowerPaste","ephox.powerpaste.tinymce.LegacyTinyDialog","ephox.powerpaste.tinymce.UndoRewriter","ephox.powerpaste.tinymce.TinyPowerPaste","ephox.powerpaste.imageupload.UploaderFactory","ephox.powerpaste.imageupload.TinyUploader","ephox.powerpaste.imageupload.EphoxUploader","ephox.powerpaste.imageupload.UploadError","global!document","global!tinymce","ephox.compass.Arr","ephox.peanut.Fun","ephox.perhaps.Option","ephox.salmon.api.Ephemera","ephox.sugar.api.Element","ephox.sugar.api.Elements","ephox.sugar.api.InsertAll","ephox.sugar.api.SelectorFilter","ephox.salmon.api.BlobCache","ephox.salmon.api.ImageTracker","ephox.salmon.api.UploadUtils","ephox.salmon.api.Uploaders","ephox.sugar.api.Attr","global!setTimeout","ephox.hermes.api.ImageAsset","ephox.hermes.api.ImageExtract","ephox.cement.api.Cement","ephox.sugar.api.Insert","ephox.sugar.api.Remove","ephox.sugar.api.SelectorExists","ephox.sugar.api.SelectorFind","ephox.porkbun.Event","ephox.porkbun.Events","ephox.sugar.api.DomEvent","global!Array","global!String","ephox.salmon.style.Styles","ephox.classify.Type","ephox.compass.Obj","global!Error","global!console","ephox.sugar.api.Traverse","ephox.sugar.api.PredicateFilter","ephox.sugar.api.Selectors","ephox.sugar.impl.ClosestOrAncestor","ephox.numerosity.api.URL","ephox.scullion.Struct","ephox.highway.Merger","ephox.scullion.ADT","ephox.perhaps.Result","ephox.salmon.ui.UploadUi","ephox.salmon.services.UploadCommon","ephox.salmon.services.UploadDirect","ephox.salmon.services.UploadFunction","ephox.hermes.utils.ImageExtract","ephox.cement.flash.Flash","ephox.cement.smartpaste.MergeSettings","ephox.cement.smartpaste.PasteBroker","ephox.limbo.api.RtfImage","ephox.plumber.tap.function.BlockTap","ephox.porkbun.SourceEvent","ephox.sloth.api.Paste","ephox.sugar.impl.FilteredEvent","ephox.flour.style.Resolver","ephox.scullion.Immutable","ephox.scullion.Immutable2","ephox.scullion.MixedBag","ephox.sugar.alien.Recurse","ephox.sugar.api.Compare","ephox.sugar.api.Body","ephox.bud.NodeTypes","ephox.numerosity.core.Global","ephox.sugar.api.Class","ephox.numerosity.api.FormData","ephox.violin.Strings","ephox.jax.plain.Ajax","ephox.numerosity.api.JSON","ephox.yuri.api.Resolver","ephox.epithet.Id","ephox.fred.PlatformDetection","ephox.numerosity.api.FileReader","ephox.bowerbird.api.Rtf","ephox.cement.flash.Correlation","ephox.cement.flash.FlashDialog","ephox.sugar.api.Css","ephox.sugar.api.Node","ephox.sugar.api.PredicateFind","ephox.sugar.api.Replication","ephox.cement.style.Styles","ephox.cement.smartpaste.Inspection","ephox.cement.smartpaste.PasteHandlers","ephox.perhaps.Options","global!RegExp","ephox.plumber.tap.control.BlockControl","ephox.plumber.tap.wrap.Tapped","ephox.scullion.BagUtils","global!Object","ephox.peanut.Thunk","ephox.epithet.Resolve","ephox.sugar.alien.Toggler","ephox
-jsc*/
-ephox.bolt.module.api.define("global!document", [], function () { return document; });
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.util.NodeUtil',
-  [
-    'global!document'
-  ],
-  function(document){
-    var nodeToString = function ( node ) {
-      var tmpNode = document.createElement( "div" );
-      tmpNode.appendChild( node.cloneNode( true ) );
-      var str = tmpNode.innerHTML;
-      tmpNode = node = null; // prevent memory leaks in IE
-      return str;
-    };
-
-    return {
-      nodeToString: nodeToString
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!tinymce", [], function () { return tinymce; });
-(function (define, require, demand) {
-define('ephox.powerpaste.i18n.I18n',
-
-  [
-    'global!tinymce'
-  ],
-
-  function(tinymce) {
-    var missingFlash = function() {
-      return "Your browser security settings may be preventing images from being imported.";
-    };
-
-    var flashClipboard = function() {
-      return tinymce.Env.mac && tinymce.Env.webkit ? missingFlash() + " <a href=\"https://support.ephox.com/entries/59328357-Safari-6-1-and-7-Flash-Sandboxing\" style=\"text-decoration: underline\">More information on paste for Safari</a>" :
-      missingFlash();
-    };
-
-    var english = {
-      "cement.dialog.paste.title": "Paste Formatting Options",
-      "cement.dialog.paste.instructions": "Choose to keep or remove formatting in the pasted content.",
-      "cement.dialog.paste.merge": "Keep Formatting",
-      "cement.dialog.paste.clean": "Remove Formatting",
-      "cement.dialog.flash.title": "Local Image Import",
-      "cement.dialog.flash.trigger-paste": "Trigger paste again from the keyboard to paste content with images.",
-      "cement.dialog.flash.missing": "Adobe Flash is required to import images from Microsoft Office. Install the <a href=\"http://get.adobe.com/flashplayer/\" target=\"_blank\">Adobe Flash Player</a>.",
-      "cement.dialog.flash.press-escape": "Press <span class=\"ephox-polish-help-kbd\">ESC</span> to ignore local images and continue editing.",
-      "loading.wait" : "Please wait...",
-      "flash.clipboard.no.rtf": flashClipboard(),
-      "safari.imagepaste": "Safari does not support direct paste of images. <a href=\"https://support.ephox.com/entries/88543243-Safari-Direct-paste-of-images-does-not-work\" style=\"text-decoration: underline\">More information on image pasting for Safari</a>",
-      "error.code.images.not.found": "The images service was not found: (",
-      "error.imageupload": "Image failed to upload: (",
-      "error.full.stop": ").",
-      "errors.local.images.disallowed": "Local image paste has been disabled. Local images have been removed from pasted content."
-    };
-
-    var getEnglishText = function(key) {
-      return english[key];
-    };
-
-    var translate = function (key) {
-      //This function acts as a shim between tiny's translation engine, which uses raw strings
-      //and cement's, which works off string pointers
-      return tinymce.translate(getEnglishText(key));
-    };
-
-    return {
-      translate: translate
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.alien.Once',
-
-  [
-
-  ],
-
-  function () {
-    // Maybe belongs in peanut.Fun?
-    return function (f) {
-      var called = false;
-      return function () {
-        if (!called) {
-          called = true;
-          f.apply(null, arguments);
-        }
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!Array", [], function () { return Array; });
-ephox.bolt.module.api.define("global!String", [], function () { return String; });
-(function (define, require, demand) {
-define(
-  'ephox.compass.Arr',
-
-  [
-    'global!Array',
-    'global!String'
-  ],
-
-  function (Array, String) {
-    var eqC = function(x) {
-      return function(y) {
-        return x === y;
-      };
-    };
-
-    var isTrue = eqC(true);
-
-    var contains = function(xs, x) {
-      return exists(xs, eqC(x));
-    };
-
-    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 r = [];
-      for (var i = 0; i < xs.length; i++) {
-        var x = xs[i];
-        r.push(f(x, i, xs));
-      }
-      return r;
-    };
-
-    var each = function(xs, f) {
-      for (var i = 0; i < xs.length; i++) {
-        var x = xs[i];
-        f(x, i, xs);
-      }
-    };
-
-    var partition = function(xs, pred) {
-      var pass = [];
-      var fail = [];
-      for (var i = 0; i < xs.length; 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; i < xs.length; i++) {
-        var x = xs[i];
-        if (pred(x, i, xs)) {
-          r.push(x);
-        }
-      }
-      return r;
-    };
-
-    /*
-     * Groups an array into contiguous arrays of like elements. Whether an element is like or not depends on f.
-     *
-     * f is a function that derives a value from an element - e.g. true or false, or a string.
-     * Elements are like if this function generates the same value for them (according to ===).
-     *
-     *
-     * Order of the elements is preserved. Arr.flatten() on the result will return the original list, as with Haskell groupBy function.
-     *  For a good explanation, see the group function (which is a special case of groupBy)
-     *  http://hackage.haskell.org/package/base-4.7.0.0/docs/Data-List.html#v:group
-     */
-    var groupBy = function (xs, f) {
-      if (xs.length === 0) {
-        return [];
-      } else {
-        var wasType = f(xs[0]); // initial case for matching
-        var r = [];
-        var group = [];
-
-        each(xs, function (x) {
-          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 indexOf = function(xs, x) {
-      if (arguments.length !== 2)
-        throw 'Expected 2 arguments to indexOf';
-      return findIndex(xs, eqC(x));
-    };
-
-    var foldr = function (xs, f, acc) {
-      return foldl(reverse(xs), f, acc);
-    };
-
-    var foldl = function (xs, f, acc) {
-      each(xs, function (x) {
-        acc = f(acc, x);
-      });
-      return acc;
-    };
-
-    var find = function(xs, pred) {
-      if (arguments.length !== 2)
-        throw 'Expected 2 arguments to find';
-      for (var i = 0; i < xs.length; i++) {
-        var x = xs[i];
-        if (pred(x, i, xs)) {
-          return x;
-        }
-      }
-      return undefined;
-    };
-
-    var findOr = function (xs, f, default_) {
-      var r = find(xs, f);
-      return r !== undefined ? r : default_;
-    };
-
-    var findOrDie = function (xs, f, message) {
-      var r = find(xs, f);
-      if (r === undefined)
-        throw message || 'Could not find element in array: ' + String(xs);
-      return r;
-    };
-
-    var findIndex = function (xs, pred) {
-      var fn = pred || isTrue;
-
-      for (var i = 0; i < xs.length; ++i)
-        if (fn(xs[i]) === true)
-          return i;
-
-      return -1;
-    };
-
-    var flatten = function (xs) {
-      var r = [];
-      for (var i = 0; i < xs.length; ++i)
-        r = r.concat(xs[i]);
-      return r;
-    };
-
-    var bind = function (xs, f) {
-      var output = map(xs, f);
-      return flatten(output);
-    };
-
-    var forall = function (xs, pred) {
-      var fn = pred || isTrue;
-      for (var i = 0; i < xs.length; ++i)
-        if (fn(xs[i], i) !== true)
-          return false;
-      return true;
-    };
-
-    var exists = function (xs, pred) {
-      var fn = pred || isTrue;
-      for (var i = 0; i < xs.length; ++i)
-        if (fn(xs[i]) === true)
-          return true;
-      return false;
-    };
-
-    var equal = function (a1, a2) {
-      return a1.length === a2.length && forall(a1, function (x, i) {
-        return x === a2[i];
-      });
-    };
-
-    var reverse = function (xs) {
-      var r = Array.prototype.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 = {};
-      each(xs, function(x, i) {
-        r[String(x)] = f(x, i);
-      });
-      return r;
-    };
-
-    return {
-      map: map,
-      each: each,
-      partition: partition,
-      filter: filter,
-      groupBy: groupBy,
-      indexOf: indexOf,
-      foldr: foldr,
-      foldl: foldl,
-      find: find,
-      findIndex: findIndex,
-      findOr: findOr,
-      findOrDie: findOrDie,
-      flatten: flatten,
-      bind: bind,
-      forall: forall,
-      exists: exists,
-      contains: contains,
-      equal: equal,
-      reverse: reverse,
-      chunk: chunk,
-      difference: difference,
-      mapToObject: mapToObject
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.peanut.Fun',
-
-  [
-    'global!Array'
-  ],
-
-  function (Array) {
-    var noop = function () { };
-
-    var compose = function (fa, fb) {
-      return function () {
-        return fa(fb.apply(null, arguments));
-      };
-    };
-
-    var constant = function (value) {
-      return function () {
-        return value;
-      };
-    };
-
-    var identity = function (x) {
-      return x;
-    };
-
-    var tripleEquals = function(a, b) {
-      return a === b;
-    };
-
-    var curry = function (f) {
-      var slice = Array.prototype.slice;
-      var args = slice.call(arguments, 1);
-      return function () {
-        var all = args.concat(slice.call(arguments, 0));
-        return f.apply(null, all);
-      };
-    };
-
-    var not = function (f) {
-      return function () {
-        return !f.apply(null, arguments);
-      };
-    };
-
-    var die = function (msg) {
-      return function () {
-        throw msg;
-      };
-    };
-
-    var apply = function (f) {
-      return f();
-    };
-
-    return {
-      noop: noop,
-      compose: compose,
-      constant: constant,
-      identity: identity,
-      tripleEquals: tripleEquals,
-      curry: curry,
-      not: not,
-      die: die,
-      apply: apply
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.perhaps.Option',
-
-  [
-    'ephox.peanut.Fun'
-  ],
-
-  function (Fun) {
-
-    /** some :: a -> Option a */
-    var some = function (value) {
-      return option(function (n, s) {
-        return s(value);
-      });
-    };
-
-    /** none :: () -> Option a */
-    var none = function () {
-      return option(function (n, s) {
-        return n();
-      });
-    };
-
-    /** from :: undefined|null|a -> Option a */
-    var from = function (value) {
-      return value === null || value === undefined ? none() : some(value);
-    };
-
-    /** option :: (() -> t, a -> t) -> Option a */
-    var option = function (fold) {
-
-      /** is :: this Option a -> a -> Boolean */
-      var is = function (v) {
-        return fold(Fun.constant(false), function (o) {
-          return o === v;
-        });
-      };
-
-      /** isSome :: this Option a -> () -> Boolean */
-      var isSome = function () {
-        return fold(Fun.constant(false), Fun.constant(true));
-      };
-
-      /** isNone :: this Option a -> () -> Boolean */
-      var isNone = Fun.not(isSome);
-
-      /** getOr :: this Option a -> a -> a */
-      var getOr = function (value) {
-        return fold(Fun.constant(value), Fun.identity);
-      };
-
-      /** getOrThunk :: this Option a -> (() -> a) -> a */
-      var getOrThunk = function (f) {
-        return fold(f, Fun.identity);
-      };
-
-      /** getOrDie :: this Option a -> String -> a */
-      var getOrDie = function (msg) {
-        return fold(Fun.die(msg || 'error: getOrDie called on none.'), Fun.identity);
-      };
-
-      /** or :: this Option a -> Option a -> Option a
-       *  if some: return self
-       *  if none: return opt
-       */
-      var or = function (opt) {
-        return fold(Fun.constant(opt), some);
-      };
-
-      /** orThunk :: this Option a -> (() -> Option a) -> Option a
-       *  Same as "or", but uses a thunk instead of a value
-       */
-      var orThunk = function (f) {
-        return fold(f, some);
-      };
-
-      /** map :: this Option a -> (a -> b) -> Option b
-       *  "fmap" operation on the Option Functor.
-       */
-      var map = function (f) {
-        return bind(function (value) {
-          return some(f(value));
-        });
-      };
-
-      /** ap :: this Option a -> Option (a -> b) -> Option b)
-       *  "apply" operation on the Option Apply/Applicative.
-       *  Equivalent to <*> in Haskell/PureScript.
-       */
-      var ap = function(ofab) {
-        return fold(none, function(a) {
-          return ofab.fold(none, function(fab) {
-            return some(fab(a));
-          });
-        });
-      };
-
-      /** each :: this Option a -> (a -> b) -> Option b */
-      var each = map;
-
-      /** bind :: this Option a -> (a -> Option b) -> Option b
-       *  "bind"/"flatMap" operation on the Option Bind/Monad.
-       *  Equivalent to >>= in Haskell/PureScript; flatMap in Scala.
-       */
-      var bind = function (f) {
-        return fold(none, f);
-      };
-
-      /** flatten :: {this Option (Option a))} -> () -> Option a
-       *  "flatten"/"join" operation on the Option Monad.
-       */
-      var flatten = function () {
-        return fold(none, Fun.identity);
-      };
-
-      /** exists :: this Option a -> (a -> Boolean) -> Boolean */
-      var exists = function (f) {
-        return fold(Fun.constant(false), f);
-      };
-
-      /** forall :: this Option a -> (a -> Boolean) -> Boolean */
-      var forall = function (f) {
-        return fold(Fun.constant(true), f);
-      };
-
-      /** filter :: this Option a -> (a -> Boolean) -> Option a */
-      var filter = function (f) {
-        return fold(none, function (v) {
-          return f(v) ? some(v) : none();
-        });
-      };
-
-      /** equals :: this Option a -> Option a -> Boolean */
-      var equals = function (o) {
-        return fold(o.isNone, o.is);
-      };
-
-      /** equals_ :: this Option a -> (Option a, a -> Boolean) -> Boolean */
-      var equals_ = function (o, elementEq) {
-        return fold(o.isNone, function(x) {
-          return o.fold(
-            Fun.constant(false),
-            Fun.curry(elementEq, x)
-          );
-        });
-      };
-
-      /** toArray :: this Option a -> () -> [a] */
-      var toArray = function () {
-        return fold(Fun.constant([]), function (val) {
-          return [ val ];
-        });
-      };
-
-      var toString = function() {
-        return fold(Fun.constant("none()"), function(a) { return "some(" + a + ")"; });
-      };
-
-      return {
-        is: is,
-        isSome: isSome,
-        isNone: isNone,
-        getOr: getOr,
-        getOrThunk: getOrThunk,
-        getOrDie: getOrDie,
-        or: or,
-        orThunk: orThunk,
-        fold: fold,
-        map: map,
-        each: each,
-        bind: bind,
-        ap: ap,
-        flatten: flatten,
-        exists: exists,
-        forall: forall,
-        equals: equals,
-        equals_: equals_,
-        filter: filter,
-        toArray: toArray,
-        toString: toString
-      };
-    };
-
-    /** equals :: (Option a, Option a) -> Boolean */
-    var equals = function(a, b) {
-      return a.equals(b);
-    };
-
-    /** equals_ :: (Option a, Option a, (a -> a) -> Boolean */
-    var equals_ = function(a, b, elementEq) {
-      return a.equals_(b, elementEq);
-    };
-
-    return {
-      some: some,
-      none: none,
-      from: from,
-      equals: equals,
-      equals_: equals_
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.imageupload.TinyUploader',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Arr, Fun) {
-    return function (editor) {
-
-      var uploadImages = function() {
-        editor.uploadImages();
-      };
-
-      var prepareImages = function (assets) {
-        Arr.each(assets, function (a) {
-          a.fold(function (id, blob, objurl, data) {
-              Arr.each(editor.dom.select('img[src="' + objurl + '"]'), function (img) {
-                editor.dom.setAttrib(img, 'src', data.result);
-              });
-          }, Fun.noop);
-        });
-      };
-
-      var getLocalURL = function (id, blob, objurl, data) {
-        return data.result;
-      };
-
-      return {
-        uploadImages: uploadImages,
-        prepareImages: prepareImages,
-        getLocalURL: getLocalURL
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.tinymce.ErrorDialog',
-  [
-
-  ],
-  function() {
-    return {
-      showDialog: function(editor, errorText){
-
-        var close = function() {
-          win.close();
-        };
-
-        var controls = [{
-          text: 'Ok',
-          onclick: close
-        }];
-
-        var winSettings = {
-          title: "Error",
-          spacing: 10,
-          padding: 10,
-          items: [{
-            type: 'container',
-            html: errorText
-          }],
-          buttons: controls
-        };
-
-        //We could have done something similar through the use of windowmanager.alert
-        //But it appears that alert doesn't allow us to use html.
-        //So we create a custom dialog, again, and use .open instead.
-        win = editor.windowManager.open(winSettings);
-    }
-  };
-});
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.imageupload.UploadError',
-
-  [
-    'ephox.powerpaste.alien.Once',
-    'ephox.powerpaste.i18n.I18n',
-    'ephox.powerpaste.tinymce.ErrorDialog'
-  ],
-
-  function (Once, I18n, ErrorDialog) {
-    return function (editor, url) {
-      var serviceNotFound = function () { return I18n.translate('error.code.images.not.found') +  url + I18n.translate('error.full.stop');};
-
-      var genericError = function () { return I18n.translate('error.imageupload') +  url + I18n.translate('error.full.stop');};
-
-      var showDialog = function (err) {
-        var status = err.status();
-
-        // TODO: status === 0 seems to consistently be a CORS failure. Might be nice to have a better message.
-        var notFound = status === 0 || (status >= 400 || status < 500);
-
-        // TODO: Services give us more details than this. The response should include details (TBIO-1256).
-        // 500+ falls through to generic error for now.
-        var error = notFound ? serviceNotFound : genericError;
-        ErrorDialog.showDialog(editor, error());
-      };
-
-      var instance = function () {
-        // this ensures we only show one banner per upload request, even on multiple failures
-        return Once(showDialog);
-      };
-
-      return {
-        instance: instance
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.flour.style.Resolver',
-
-  [
-    'ephox.compass.Arr'
-  ],
-
-  function (Arr) {
-    var create = function (projectNamespace) {
-      var namespace = cssNamespace(projectNamespace);
-
-      var resolve = function (cssClasses) {
-        var classes = cssClasses.split(' ');
-
-        var resolved = Arr.map(classes, function (cls) {
-          return cssClass(namespace, cls);
-        });
-
-        return resolved.join(' ');
-      };
-
-      return {
-        resolve: resolve
-      };
-    };
-
-    // JavaScript namespaces are of the form "ephox.project"
-    // CSS namespaces are of the form "ephox-project"
-    var cssNamespace = function (namespace) {
-      return namespace.replace(/\./g, '-');
-    };
-
-    // CSS namespaced classes are of the form "css-namespace-class"
-    var cssClass = function (namespace, cls) {
-      return namespace + '-' + cls;
-    };
-
-    return {
-      create: create,
-      cssNamespace: cssNamespace,
-      cssClass: cssClass
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.style.Styles',
-
-  [
-    'ephox.flour.style.Resolver'
-  ],
-
-  function (Resolver) {
-    var styles = Resolver.create('ephox-salmon');
-
-    return {
-      resolve: styles.resolve
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.classify.Type',
-
-  [
-    'global!Array',
-    'global!String'
-  ],
-
-  function (Array, String) {
-    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;
-      };
-    };
-
-    return {
-      isString: isType('string'),
-      isObject: isType('object'),
-      isArray: isType('array'),
-      isNull: isType('null'),
-      isBoolean: isType('boolean'),
-      isUndefined: isType('undefined'),
-      isFunction: isType('function'),
-      isNumber: isType('number')
-    };
-  }
-);
-
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.compass.Obj',
-
-  [
-  ],
-
-  function () {
-    var each = function (obj, f) {
-      for (var i in obj) {
-        if (obj.hasOwnProperty(i)) {
-          var x = obj[i];
-          f(x, i, obj);
-        }
-      }
-    };
-
-    var objectMap = 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(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(obj, function(x, i) {
-        var branch = pred(x, i) ? t : f;
-        branch[i] = x;
-      });
-      return {
-        t: t,
-        f: f
-      };
-    };
-
-    var mapToArray = function (obj, f) {
-      var r = [];
-      each(obj, function(value, name) {
-        r.push(f(value, name));
-      });
-      return r;
-    };
-
-    var find = function (obj, pred) {
-      for (var i in obj) {
-        if (obj.hasOwnProperty(i)) {
-          var x = obj[i];
-          if (pred(x, i, obj))
-            return x;
-        }
-      }
-      return undefined;
-    };
-
-    var keys = function (obj) {
-      return mapToArray(obj, function (v, k) {
-        return k;
-      });
-    };
-
-    var values = function (obj) {
-      return mapToArray(obj, function (v, k) {
-        return v;
-      });
-    };
-
-    var size = function (obj) {
-      return values(obj).length;
-    };
-
-    return {
-      bifilter: bifilter,
-      each: each,
-      map: objectMap,
-      mapToArray: mapToArray,
-      tupleMap: tupleMap,
-      find: find,
-      keys: keys,
-      values: values,
-      size: size
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!Error", [], function () { return Error; });
-ephox.bolt.module.api.define("global!console", [], function () { if (typeof console === "undefined") console = { log: function () {} }; return console; });
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Attr',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Arr',
-    'ephox.compass.Obj',
-    'global!Error',
-    'global!console'
-  ],
-
-  /*
-   * Direct attribute manipulation has been around since IE8, but
-   * was apparently unstable until IE10.
-   */
-  function (Type, Arr, Obj, Error, console) {
-    var rawSet = function (dom, key, value) {
-      /*
-       * JQuery coerced everything to a string, and silently did nothing on text node/null/undefined.
-       *
-       * We fail on those invalid cases, only allowing numbers and booleans.
-       */
-      if (Type.isString(value) || Type.isBoolean(value) || Type.isNumber(value)) {
-        dom.setAttribute(key, value + '');
-      } else {
-        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();
-      Obj.each(attrs, function (v, k) {
-        rawSet(dom, k, v);
-      });
-    };
-
-    var get = function (element, key) {
-      var v = element.dom().getAttribute(key);
-
-      // undefined is the more appropriate value for JS, and this matches JQuery
-      return v === null ? undefined : v;
-    };
-
-    var has = function (element, key) {
-      var dom = element.dom();
-
-      // return false for non-element nodes, no point in throwing an error
-      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
-    };
-
-    var remove = function (element, key) {
-      element.dom().removeAttribute(key);
-    };
-
-    var hasNone = function (element) {
-      var attrs = element.dom().attributes;
-      return attrs === undefined || attrs === null || attrs.length === 0;
-    };
-
-    var clone = function (element) {
-      return Arr.foldl(element.dom().attributes, function (acc, attr) {
-        acc[attr.name] = attr.value;
-        return acc;
-      }, {});
-    };
-
-    return {
-      clone: clone,
-      set: set,
-      setAll: setAll,
-      get: get,
-      has: has,
-      remove: remove,
-      hasNone: hasNone
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.scullion.Immutable2',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.compass.Obj',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Arr, Obj, Fun) {
-
-    var $a = function(args) {
-      return Array.prototype.slice.call(args);
-    };
-
-    var product = function(fields, eqs) {
-
-      var nu = function(/* values */) {
-        var values = $a(arguments);
-        if (fields.length !== values.length)
-          throw 'Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments';
-
-        var struct = {};
-        Arr.each(fields, function (name, i) {
-          struct[name] = Fun.constant(values[i]);
-        });
-        return struct;
-      };
-
-      var eq = function(a, b) {
-        for (var i = 0; i < fields.length; i++) {
-          var qqq = (eqs && eqs[i]) || Fun.tripleEquals;
-          var x = fields[i];
-          if (!qqq(a[x](), b[x]())) {
-            return false;
-          }
-        }
-        return true;
-      };
-
-      var evaluate = function(o) {
-        return Obj.map(o, function(f) {
-          return f();
-        });
-      };
-
-      return {
-        nu: nu,
-        eq: eq,
-        evaluate: evaluate
-      };
-    };
-
-    return {
-      product: product
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.scullion.Immutable',
-
-  [
-    'ephox.scullion.Immutable2'
-  ],
-
-  function (Immutable2) {
-    return function (/* fields */) {
-      return Immutable2.product(arguments).nu;
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.scullion.BagUtils',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Arr'
-  ],
-
-  function (Type, Arr) {
-    var sort = function (arr) {
-      return arr.slice(0).sort();
-    };
-
-    var reqMessage = function (required, keys) {
-      throw 'All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.';
-    };
-
-    var unsuppMessage = function (unsupported) {
-      throw 'Unsupported keys for object: ' + sort(unsupported).join(', ');
-    };
-
-    var validateStrArr = function (label, array) {
-      if (!Type.isArray(array)) throw 'The ' + label + ' fields must be an array. Was: ' + array + '.';
-      Arr.each(array, function (a) {
-        if (!Type.isString(a)) throw 'The value ' + a + ' in the ' + label + ' fields was not a string.';
-      });
-    };
-
-    var invalidTypeMessage = function (incorrect, type) {
-      throw 'All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.';
-    };
-
-    var checkDupes = function (everything) {
-      var sorted = sort(everything);
-      var dupe = Arr.find(sorted, function (s, i) {
-        return i < sorted.length -1 && s === sorted[i + 1];
-      });
-
-      if (dupe !== undefined && dupe !== null) throw 'The field: ' + dupe + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].';
-    };
-
-    return {
-      sort: sort,
-      reqMessage: reqMessage,
-      unsuppMessage: unsuppMessage,
-      validateStrArr: validateStrArr,
-      invalidTypeMessage: invalidTypeMessage,
-      checkDupes: checkDupes
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!Object", [], function () { return Object; });
-(function (define, require, demand) {
-define(
-  'ephox.scullion.MixedBag',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.compass.Obj',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.scullion.BagUtils',
-    'global!Object'
-  ],
-
-  function (Arr, Obj, Fun, Option, BagUtils, Object) {
-
-    return function (required, optional) {
-      var everything = required.concat(optional);
-      if (everything.length === 0) throw 'You must specify at least one required or optional field.';
-
-      BagUtils.validateStrArr('required', required);
-      BagUtils.validateStrArr('optional', optional);
-
-      BagUtils.checkDupes(everything);
-
-      return function (obj) {
-        var keys = Obj.keys(obj);
-
-        // Ensure all required keys are present.
-        var allReqd = Arr.forall(required, function (req) {
-          return Arr.contains(keys, req);
-        });
-
-        if (! allReqd) BagUtils.reqMessage(required, keys);
-
-        var unsupported = Arr.filter(keys, function (key) {
-          return !Arr.contains(everything, key);
-        });
-
-        if (unsupported.length > 0) BagUtils.unsuppMessage(unsupported);
-
-        var r = {};
-        Arr.each(required, function (req) {
-          r[req] = Fun.constant(obj[req]);
-        });
-
-        Arr.each(optional, function (opt) {
-          r[opt] = Fun.constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]): Option.none());
-        });
-
-        return r;
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.scullion.Struct',
-
-  [
-    'ephox.scullion.Immutable',
-    'ephox.scullion.Immutable2',
-    'ephox.scullion.MixedBag'
-  ],
-
-  function (Immutable, Immutable2, MixedBag) {
-    return {
-      immutable: Immutable,
-      immutable2: Immutable2,
-      immutableBag: MixedBag
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.alien.Recurse',
-
-  [
-
-  ],
-
-  function () {
-    /**
-     * Applies f repeatedly until it completes (by returning Option.none()).
-     *
-     * Normally would just use recursion, but JavaScript lacks tail call optimisation.
-     *
-     * This is what recursion looks like when manually unravelled :)
-     */
-    var toArray = 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;
-    };
-
-    return {
-      toArray: toArray
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.bud.NodeTypes',
-
-  [
-
-  ],
-
-  function () {
-    return {
-      ATTRIBUTE:              2,
-      CDATA_SECTION:          4,
-      COMMENT:                8,
-      DOCUMENT:               9,
-      DOCUMENT_TYPE:          10,
-      DOCUMENT_FRAGMENT:      11,
-      ELEMENT:                1,
-      TEXT:                   3,
-      PROCESSING_INSTRUCTION: 7,
-      ENTITY_REFERENCE:       5,
-      ENTITY:                 6,
-      NOTATION:               12
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Element',
-
-  [
-    'ephox.peanut.Fun',
-    'global!Error',
-    'global!console',
-    'global!document'
-  ],
-
-  function (Fun, Error, console, document) {
-    var fromHtml = function (html, scope) {
-      var doc = scope || document;
-      var div = doc.createElement('div');
-      div.innerHTML = html;
-      if (!div.hasChildNodes() || div.childNodes.length > 1) {
-        console.error('HTML does not have a single root node', html);
-        throw 'HTML must have a single root node';
-      }
-      return fromDom(div.childNodes[0]);
-    };
-
-    var fromTag = function (tag, scope) {
-      var doc = scope || document;
-      var node = doc.createElement(tag);
-      return fromDom(node);
-    };
-
-    var fromText = function (text, scope) {
-      var doc = scope || document;
-      var node = doc.createTextNode(text);
-      return fromDom(node);
-    };
-
-    var fromDom = function (node) {
-      if (node === null || node === undefined) throw new Error('Node cannot be not null or undefined');
-      return {
-        dom: Fun.constant(node)
-      };
-    };
-
-    return {
-      fromHtml: fromHtml,
-      fromTag: fromTag,
-      fromText: fromText,
-      fromDom: fromDom
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Selectors',
-
-  [
-    'ephox.bud.NodeTypes',
-    'ephox.compass.Arr',
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.Element',
-    'global!Error',
-    'global!document'
-  ],
-
-  function (NodeTypes, Arr, Option, Element, Error, document) {
-    /*
-     * There's a lot of code here; the aim is to allow the browser to optimise constant comparisons,
-     * instead of doing object lookup feature detection on every call
-     */
-    var STANDARD = 0;
-    var MSSTANDARD = 1;
-    var WEBKITSTANDARD = 2;
-    var FIREFOXSTANDARD = 3;
-
-    var selectorType = (function () {
-      var test = document.createElement('span');
-      // As of Chrome 34 / Safari 7.1 / FireFox 34, everyone except IE has the unprefixed function.
-      // Still check for the others, but do it last.
-      return test.matches !== undefined ? STANDARD :
-             test.msMatchesSelector !== undefined ? MSSTANDARD :
-             test.webkitMatchesSelector !== undefined ? WEBKITSTANDARD :
-             test.mozMatchesSelector !== undefined ? FIREFOXSTANDARD :
-             -1;
-    })();
-
-
-    var ELEMENT = NodeTypes.ELEMENT;
-    var DOCUMENT = NodeTypes.DOCUMENT;
-
-    var is = function (element, selector) {
-      var elem = element.dom();
-      if (elem.nodeType !== ELEMENT) return false; // documents have querySelector but not matches
-
-      // As of Chrome 34 / Safari 7.1 / FireFox 34, everyone except IE has the unprefixed function.
-      // Still check for the others, but do it last.
-      else if (selectorType === STANDARD) return elem.matches(selector);
-      else if (selectorType === MSSTANDARD) return elem.msMatchesSelector(selector);
-      else if (selectorType === WEBKITSTANDARD) return elem.webkitMatchesSelector(selector);
-      else if (selectorType === FIREFOXSTANDARD) return elem.mozMatchesSelector(selector);
-      else throw new Error('Browser lacks native selectors'); // unfortunately we can't throw this on startup :(
-    };
-
-    var bypassSelector = function (dom) {
-      // Only elements and documents support querySelector
-      return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT ||
-              // IE fix for complex queries on empty nodes: http://jsfiddle.net/spyder/fv9ptr5L/
-              dom.childElementCount === 0;
-    };
-
-    var all = function (selector, scope) {
-      var base = scope === undefined ? document : scope.dom();
-      return bypassSelector(base) ? [] : Arr.map(base.querySelectorAll(selector), Element.fromDom);
-    };
-
-    var one = function (selector, scope) {
-      var base = scope === undefined ? document : scope.dom();
-      return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);
-    };
-
-    return {
-      all: all,
-      is: is,
-      one: one
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Compare',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Selectors'
-  ],
-
-  function (Arr, Fun, Selectors) {
-    var eq = function (e1, e2) {
-      return e1.dom() === e2.dom();
-    };
-
-    var member = function (element, elements) {
-      return Arr.exists(elements, Fun.curry(eq, element));
-    };
-
-    return {
-      eq: eq,
-      member: member,
-
-      // Only used by DomUniverse. Remove (or should Selectors.is move here?)
-      is: Selectors.is
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Traverse',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.scullion.Struct',
-    'ephox.sugar.alien.Recurse',
-    'ephox.sugar.api.Compare',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (Type, Arr, Fun, Option, Struct, Recurse, Compare, Element) {
-    // The document associated with the current element
-    var owner = function (element) {
-      return Element.fromDom(element.dom().ownerDocument);
-    };
-
-    var documentElement = function (element) {
-      // TODO: Avoid unnecessary wrap/unwrap here
-      var doc = owner(element);
-      return Element.fromDom(doc.dom().documentElement);
-    };
-
-    // The window element associated with the element
-    var defaultView = function (element) {
-      var el = element.dom();
-      var defaultView = el.ownerDocument.defaultView;
-      return Element.fromDom(defaultView);
-    };
-
-    var parent = function (element) {
-      var dom = element.dom();
-      return Option.from(dom.parentNode).map(Element.fromDom);
-    };
-
-    var findIndex = function (element) {
-      return parent(element).bind(function (p) {
-        // TODO: Refactor out children so we can avoid the constant unwrapping
-        var kin = children(p);
-        var index = Arr.findIndex(kin, function (elem) {
-          return Compare.eq(element, elem);
-        });
-
-        return index > -1 ? Option.some(index) : Option.none();
-      });
-    };
-
-    var parents = function (element, isRoot) {
-      var stop = Type.isFunction(isRoot) ? isRoot : Fun.constant(false);
-      return internalParents(element, stop);
-    };
-
-    var internalParents = function (element, stop) {
-      return parent(element).fold(function () {
-        return [];
-      }, function (v) {
-        var ret = [ v ];
-        return stop(v) ? ret : ret.concat(internalParents(v, stop));
-      });
-    };
-
-    var siblings = function (element) {
-      // TODO: Refactor out children so we can just not add self instead of filtering afterwards
-      var filterSelf = function (elements) {
-        return Arr.filter(elements, function (x) {
-          return !Compare.eq(element, x);
-        });
-      };
-
-      return parent(element).map(children).map(filterSelf).getOr([]);
-    };
-
-    var offsetParent = function (element) {
-      var dom = element.dom();
-      return Option.from(dom.offsetParent).map(Element.fromDom);
-    };
-
-    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) {
-      // This one needs to be reversed, so they're still in DOM order
-      return Arr.reverse(Recurse.toArray(element, prevSibling));
-    };
-
-    var nextSiblings = function (element) {
-      return Recurse.toArray(element, nextSibling);
-    };
-
-    var children = function (element) {
-      var dom = element.dom();
-      return Arr.map(dom.childNodes, Element.fromDom);
-    };
-
-    var child = function (element, index) {
-      var children = element.dom().childNodes;
-      return Option.from(children[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 spot = Struct.immutable('element', 'offset');
-    var leaf = function (element, offset) {
-      var cs = children(element);
-      return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
-    };
-
-    return {
-      owner: owner,
-      defaultView: defaultView,
-      documentElement: documentElement,
-      parent: parent,
-      findIndex: findIndex,
-      parents: parents,
-      siblings: siblings,
-      prevSibling: prevSibling,
-      offsetParent: offsetParent,
-      prevSiblings: prevSiblings,
-      nextSibling: nextSibling,
-      nextSiblings: nextSiblings,
-      children: children,
-      child: child,
-      firstChild: firstChild,
-      lastChild: lastChild,
-      leaf: leaf
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Insert',
-
-  [
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Traverse) {
-    var before = function (marker, element) {
-      var parent = Traverse.parent(marker);
-      parent.each(function (v) {
-        v.dom().insertBefore(element.dom(), marker.dom());
-      });
-    };
-
-    var after = function (marker, element) {
-      var sibling = Traverse.nextSibling(marker);
-      sibling.fold(function () {
-        var parent = Traverse.parent(marker);
-        parent.each(function (v) {
-          append(v, element);
-        });
-      }, function (v) {
-        before(v, element);
-      });
-    };
-
-    var prepend = function (parent, element) {
-      var firstChild = Traverse.firstChild(parent);
-      firstChild.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 appendAt = function (parent, element, index) {
-      Traverse.child(parent, index).fold(function () {
-        append(parent, element);
-      }, function (v) {
-        before(v, element);
-      });
-    };
-
-    var wrap = function (element, wrapper) {
-      before(element, wrapper);
-      append(wrapper, element);
-    };
-
-    return {
-      before: before,
-      after: after,
-      prepend: prepend,
-      append: append,
-      appendAt: appendAt,
-      wrap: wrap
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.InsertAll',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.sugar.api.Insert'
-  ],
-
-  function (Arr, Insert) {
-    var before = function (marker, elements) {
-      Arr.each(elements, function (x) {
-        Insert.before(marker, x);
-      });
-    };
-
-    var after = function (marker, elements) {
-      Arr.each(elements, function (x, i) {
-        var e = i === 0 ? marker : elements[i - 1];
-        Insert.after(e, x);
-      });
-    };
-
-    var prepend = function (parent, elements) {
-      Arr.each(elements.slice().reverse(), function (x) {
-        Insert.prepend(parent, x);
-      });
-    };
-
-    var append = function (parent, elements) {
-      Arr.each(elements, function (x) {
-        Insert.append(parent, x);
-      });
-    };
-
-    return {
-      before: before,
-      after: after,
-      prepend: prepend,
-      append: append
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Remove',
-
-  [
-    'ephox.sugar.api.InsertAll',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (InsertAll, Traverse) {
-    var empty = function (element) {
-      // requires IE 9
-      element.dom().textContent = '';
-    };
-
-    var remove = function (element) {
-      var dom = element.dom();
-      if (dom.parentNode !== null)
-        dom.parentNode.removeChild(dom);
-    };
-
-    var unwrap = function (wrapper) {
-      var children = Traverse.children(wrapper);
-      if (children.length > 0)
-        InsertAll.before(wrapper, children);
-      remove(wrapper);
-    };
-
-    return {
-      empty: empty,
-      remove: remove,
-      unwrap: unwrap
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.peanut.Thunk',
-
-  [
-  ],
-
-  function () {
-
-    var cached = function (f) {
-      var called = false;
-      var r;
-      return function() {
-        if (!called) {
-          called = true;
-          r = f.apply(null, arguments);
-        }
-        return r;
-      };
-    };
-
-    return {
-      cached: cached
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Node',
-
-  [
-    'ephox.bud.NodeTypes'
-  ],
-
-  function (NodeTypes) {
-    var name = function (element) {
-      var r = element.dom().nodeName;
-      return r.toLowerCase();
-    };
-
-    var type = function (element) {
-      return element.dom().nodeType;
-    };
-
-    var value = function (element) {
-      return element.dom().nodeValue;
-    };
-
-    var isType = function (t) {
-      return function (element) {
-        return type(element) === t;
-      };
-    };
-
-    var isComment = function (element) {
-      return type(element) === NodeTypes.COMMENT || name(element) === '#comment';
-    };
-
-    var isElement = isType(NodeTypes.ELEMENT);
-    var isText = isType(NodeTypes.TEXT);
-    var isDocument = isType(NodeTypes.DOCUMENT);
-
-    return {
-      name: name,
-      type: type,
-      value: value,
-      isElement: isElement,
-      isText: isText,
-      isDocument: isDocument,
-      isComment: isComment
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Body',
-
-  [
-    'ephox.peanut.Thunk',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Node',
-    'global!document'
-  ],
-
-  function (Thunk, Element, Node, document) {
-
-    // Node.contains() is very, very, very good performance
-    // http://jsperf.com/closest-vs-contains/5
-    var inBody = function (element) {
-      // Technically this is only required on IE, where contains() returns false for text nodes.
-      // But it's cheap enough to run everywhere and Sugar doesn't have platform detection (yet).
-      var dom = Node.isText(element) ? element.dom().parentNode : element.dom();
-
-      // use ownerDocument.body to ensure this works inside iframes.
-      // Normally contains is bad because an element "contains" itself, but here we want that.
-      return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
-    };
-
-    var body = Thunk.cached(function () {
-      var body = document.body;
-      if (body === null || body === undefined) throw 'Body is not available yet';
-      return Element.fromDom(body);
-    });
-
-    return {
-      body: body,
-      inBody: inBody
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.PredicateFilter',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.sugar.api.Body',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Arr, Body, Traverse) {
-    // maybe TraverseWith, similar to traverse but with a predicate?
-
-    var all = function (predicate) {
-      return descendants(Body.body(), predicate);
-    };
-
-    var ancestors = function (scope, predicate, isRoot) {
-      return Arr.filter(Traverse.parents(scope, isRoot), predicate);
-    };
-
-    var siblings = function (scope, predicate) {
-      return Arr.filter(Traverse.siblings(scope), predicate);
-    };
-
-    var children = function (scope, predicate) {
-      return Arr.filter(Traverse.children(scope), predicate);
-    };
-
-    var descendants = function (scope, predicate) {
-      var result = [];
-
-      // Recurse.toArray() might help here
-      Arr.each(Traverse.children(scope), function (x) {
-        if (predicate(x)) {
-          result = result.concat([ x ]);
-        }
-        result = result.concat(descendants(x, predicate));
-      });
-      return result;
-    };
-
-    return {
-      all: all,
-      ancestors: ancestors,
-      siblings: siblings,
-      children: children,
-      descendants: descendants
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.SelectorFilter',
-
-  [
-    'ephox.sugar.api.PredicateFilter',
-    'ephox.sugar.api.Selectors'
-  ],
-
-  function (PredicateFilter, Selectors) {
-    var all = function (selector) {
-      return Selectors.all(selector);
-    };
-
-    // For all of the following:
-    //
-    // jQuery does siblings of firstChild. IE9+ supports scope.dom().children (similar to Traverse.children but elements only).
-    // Traverse should also do this (but probably not by default).
-    //
-
-    var ancestors = function (scope, selector, isRoot) {
-      // It may surprise you to learn this is exactly what JQuery does
-      // TODO: Avoid all this wrapping and unwrapping
-      return PredicateFilter.ancestors(scope, function (e) {
-        return Selectors.is(e, selector);
-      }, isRoot);
-    };
-
-    var siblings = function (scope, selector) {
-      // It may surprise you to learn this is exactly what JQuery does
-      // TODO: Avoid all the wrapping and unwrapping
-      return PredicateFilter.siblings(scope, function (e) {
-        return Selectors.is(e, selector);
-      });
-    };
-
-    var children = function (scope, selector) {
-      // It may surprise you to learn this is exactly what JQuery does
-      // TODO: Avoid all the wrapping and unwrapping
-      return PredicateFilter.children(scope, function (e) {
-        return Selectors.is(e, selector);
-      });
-    };
-
-    var descendants = function (scope, selector) {
-      return Selectors.all(selector, scope);
-    };
-
-    return {
-      all: all,
-      ancestors: ancestors,
-      siblings: siblings,
-      children: children,
-      descendants: descendants
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.impl.ClosestOrAncestor',
-
-  [
-    'ephox.classify.Type',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Type, Option) {
-    return function (is, ancestor, scope, a, isRoot) {
-      return is(scope, a) ?
-              Option.some(scope) :
-              Type.isFunction(isRoot) && isRoot(scope) ?
-                  Option.none() :
-                  ancestor(scope, a, isRoot);
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.SelectorFind',
-
-  [
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.SelectorFilter',
-    'ephox.sugar.api.Selectors',
-    'ephox.sugar.impl.ClosestOrAncestor'
-  ],
-
-  function (Option, SelectorFilter, Selectors, ClosestOrAncestor) {
-    // It's ridiculous to spend all that time finding everything and then just get the first.
-    // Two suggestions:
-    // * An internal SelectorFilter module that doesn't Element.fromDom() everything
-    // * Re-implement using Selectors.one() instead of Selectors.all()
-
-    var first = function (selector) {
-      return Option.from(SelectorFilter.all(selector)[0]);
-    };
-
-    var ancestor = function (scope, selector, isRoot) {
-      return Option.from(SelectorFilter.ancestors(scope, selector, isRoot)[0]);
-    };
-
-    var sibling = function (scope, selector) {
-      return Option.from(SelectorFilter.siblings(scope, selector)[0]);
-    };
-
-    var child = function (scope, selector) {
-      return Option.from(SelectorFilter.children(scope, selector)[0]);
-    };
-
-    var descendant = function (scope, selector) {
-      return Option.from(SelectorFilter.descendants(scope, selector)[0]);
-    };
-
-    var closest = function (scope, selector, isRoot) {
-      return ClosestOrAncestor(Selectors.is, ancestor, scope, selector, isRoot);
-    };
-
-    return {
-      first: first,
-      ancestor: ancestor,
-      sibling: sibling,
-      child: child,
-      descendant: descendant,
-      closest: closest
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.api.Ephemera',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.salmon.style.Styles',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.SelectorFind'
-  ],
-
-  function (Fun, Styles, Attr, Remove, SelectorFind) {
-    var uploadContainer = Styles.resolve('upload-image-container');
-    var blobId = 'data-' + Styles.resolve('image-blob');
-
-    var cleanup = function (element) {
-      SelectorFind.child(element, 'img').each(cleanImg);
-      Remove.unwrap(element);
-    };
-
-    var cleanImg = function (element) {
-      Attr.remove(element, 'class');
-    };
-
-    return {
-      uploadContainer: Fun.constant(uploadContainer),
-      blobId: Fun.constant(blobId),
-      cleanup: cleanup
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Elements',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Traverse',
-    'global!document'
-  ],
-
-  function (Arr, Element, Traverse, document) {
-    var fromHtml = function (html, scope) {
-      var doc = scope || document;
-      var div = doc.createElement('div');
-      div.innerHTML = html;
-      return Traverse.children(Element.fromDom(div));
-    };
-
-    var fromTags = function (tags, scope) {
-      return Arr.map(tags, function (x) {
-        return Element.fromTag(x, scope);
-      });
-    };
-
-    var fromText = function (texts, scope) {
-      return Arr.map(texts, function (x) {
-        return Element.fromText(x, scope);
-      });
-    };
-
-    var fromDom = function (nodes) {
-      return Arr.map(nodes, Element.fromDom);
-    };
-
-    return {
-      fromHtml: fromHtml,
-      fromTags: fromTags,
-      fromText: fromText,
-      fromDom: fromDom
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define('ephox.powerpaste.tinymce.UndoRewriter',
-  [
-    'ephox.compass.Arr',
-    'ephox.salmon.api.Ephemera',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Elements',
-    'ephox.sugar.api.InsertAll',
-    'ephox.sugar.api.SelectorFilter'
-  ],
-  function(Arr, UiEphemera, Element, Elements, InsertAll, SelectorFilter) {
-    var unwrapHistory = function(editor) {
-      //Start undomanager hack
-      for (var i = 0; i < editor.undoManager.data.length; i ++) {
-        //get the content of every undomanager back stack level
-        var content = editor.undoManager.data[i].content;
-        var temp = Element.fromTag('div');
-        InsertAll.append(temp, Elements.fromHtml(content));
-        //Find uploaded image containers
-        var uploadContainers = SelectorFilter.descendants(temp, '.' + UiEphemera.uploadContainer());
-        //Strip the containers
-        Arr.each(uploadContainers, UiEphemera.cleanup);
-        editor.undoManager.data[i].content = temp.dom().innerHTML;
-      }
-    };
-
-    var resrcHistory = function(editor, b, result) {
-      for (var i = 0; i < editor.undoManager.data.length; i ++) {
-        editor.undoManager.data[i].content = editor.undoManager.data[i].content.split(b.objurl()).join(result.location);
-      }
-    };
-
-    return {
-      unwrapHistory: unwrapHistory,
-      resrcHistory: resrcHistory
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.epithet.Global',
-
-  [
-  ],
-
-  function () {
-    return Function('return this;')();
-  }
-);
-
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.epithet.Resolve',
-
-  [
-    'ephox.epithet.Global'
-  ],
-
-  function (Global) {
-    var path = function (parts, scope) {
-      var o = 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);
-    };
-
-    return {
-      path: path,
-      resolve: resolve
-    };
-  }
-);
-
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.numerosity.core.Global',
-
-  [
-    'ephox.epithet.Resolve'
-  ],
-
-  function (Resolve) {
-    var unsafe = function (name, scope) {
-      return Resolve.resolve(name, scope);
-    };
-
-    var getOrDie = function (name, scope) {
-      var actual = unsafe(name, scope);
-
-      // In theory, TBIO should refuse to load below IE10. But we'll enforce it here too.
-      if (actual === undefined) throw name + ' not available on this browser';
-      return actual;
-    };
-
-    return {
-      getOrDie: getOrDie
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.numerosity.api.URL',
-
-  [
-    'ephox.numerosity.core.Global'
-  ],
-
-  function (Global) {
-    /*
-     * IE10 and above per
-     * https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL
-     *
-     * Also Safari 6.1+
-     * Safari 6.0 has 'webkitURL' instead, but doesn't support flexbox so we
-     * aren't supporting it anyway
-     */
-    var url = function () {
-      return Global.getOrDie('URL');
-    };
-
-    var createObjectURL = function (blob) {
-      return url().createObjectURL(blob);
-    };
-
-    var revokeObjectURL = function (u) {
-      url().revokeObjectURL(u);
-    };
-
-    return {
-      createObjectURL: createObjectURL,
-      revokeObjectURL: revokeObjectURL
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.api.BlobCache',
-
-  [
-    'ephox.compass.Obj',
-    'ephox.numerosity.api.URL',
-    'ephox.perhaps.Option',
-    'ephox.scullion.Struct'
-  ],
-
-  function (Obj, URL, Option, Struct) {
-    var blobInfo = Struct.immutable('id', 'blob', 'objurl', 'data');
-
-    return function () {
-      var blobCache = {};
-
-      var add = function (id, blob, objurl, data) {
-        var info = blobInfo(id, blob, objurl, data);
-        blobCache[id] = info;
-        return info;
-      };
-
-      var get = function (id) {
-        return Option.from(blobCache[id]);
-      };
-
-      var release = function (info) {
-        URL.revokeObjectURL(info.objurl());
-      };
-
-      var lookupByData = function (data) {
-        return Option.from(Obj.find(blobCache, function (c) {
-          return c.data().result === data;
-        }));
-      };
-
-      var remove = function (id) {
-        var o = blobCache[id];
-        delete blobCache[id];
-        if (o !== undefined) release(o);
-      };
-
-      var destroy = function () {
-        Obj.each(blobCache, release);
-        blobCache = {};
-      };
-
-      return {
-        add: add,
-        get: get,
-        remove: remove,
-        lookupByData: lookupByData,
-        destroy: destroy
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.porkbun.Event',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.scullion.Struct'
-  ],
-  function (Arr, Struct) {
-
-    /** :: ([String]) -> Event */
-    return function (fields) {
-      var struct = Struct.immutable.apply(null, fields);
-
-      var handlers = [];
-
-      var bind = function (handler) {
-        if (handler === undefined) {
-          throw 'Event bind error: undefined handler';
-        }
-        handlers.push(handler);
-      };
-
-      var unbind = function(handler) {
-        var index = Arr.indexOf(handlers, handler);
-        if (index !== -1) {
-          handlers.splice(index, 1);
-        }
-      };
-
-      var trigger = function (/* values */) {
-        // scullion does Array prototype slice, we don't need to as well
-        var event = struct.apply(null, arguments);
-        Arr.each(handlers, function (handler) {
-          handler(event);
-        });
-      };
-
-      return {
-        bind: bind,
-        unbind: unbind,
-        trigger: trigger
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.porkbun.Events',
-
-  [
-    'ephox.compass.Obj'
-  ],
-
-  function (Obj) {
-
-    /** :: {name : Event} -> Events */
-    var create = function (typeDefs) {
-      var registry = Obj.map(typeDefs, function (event) {
-        return {
-          bind: event.bind,
-          unbind: event.unbind
-        };
-      });
-
-      var trigger = Obj.map(typeDefs, function (event) {
-        return event.trigger;
-      });
-
-      return {
-        registry: registry,
-        trigger: trigger
-      };
-    };
-    return {
-      create: create
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.api.ImageTracker',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.salmon.style.Styles',
-    'ephox.salmon.api.Ephemera',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.SelectorFilter'
-  ],
-
-  function (Arr, Styles, Ephemera, Event, Events, Attr, SelectorFilter) {
-    var uploadAttr = 'data-' + Styles.resolve('image-upload');
-
-    var findById = function (body, id) {
-      return SelectorFilter.descendants(body, 'img[' + uploadAttr + '="' + id + '"]');
-    };
-
-    var findAll = function (body) {
-      // Find all images that are registered in the blob tracker, but aren't uploading
-      return SelectorFilter.descendants(body, 'img:not([' + uploadAttr + '])[' + Ephemera.blobId() + ']');
-    };
-
-    return function () {
-      var imgStack = [];
-      var response = [];
-
-      var events = Events.create({
-        complete: Event(['response'])
-      });
-
-      var register = function (img, id) {
-        Attr.set(img, uploadAttr, id);
-        imgStack.push(id);
-      };
-
-      var deregister = function (id) {
-        imgStack = Arr.filter(imgStack, function (val, index) {
-          return val !== id;
-        });
-        if (inProgress() === false) finished();
-      };
-
-      var result = function (bool, element) {
-        response.push({
-          'success': bool,
-          'element': element.dom()
-        });
-      };
-
-      var report = function (id, images, success) {
-        Arr.each(images, function (img) {
-          Attr.remove(img, uploadAttr);
-          result(success, img);
-        });
-        deregister(id);
-      };
-
-      var finished = function () {
-        events.trigger.complete(response);
-        response = [];
-      };
-
-      var inProgress = function () {
-        return imgStack.length > 0;
-      };
-
-      var isActive = function (id) {
-        return Arr.contains(imgStack, id);
-      };
-
-      return {
-        findById: findById,
-        findAll: findAll,
-        register: register,
-        report: report,
-        inProgress: inProgress,
-        isActive: isActive,
-        events: events.registry
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.highway.Merger',
-
-  [
-    'ephox.classify.Type'
-  ],
-
-  function (Type) {
-
-    var shallow = function (old, nu) {
-      return nu;
-    };
-
-    var deep = function (old, nu) {
-      var bothObjects = Type.isObject(old) && Type.isObject(nu);
-      return bothObjects ? deepMerge(old, nu) : nu;
-    };
-
-    var baseMerge = function (merger) {
-      return function() {
-        var objects = Array.prototype.slice.call(arguments, 0);
-        if (objects.length === 0) throw "Can't merge zero objects";
-
-        var ret = {};
-        for (var i = 0; i < objects.length; i++) {
-          var curObject = objects[i];
-          // FIX Merger 14/02/2012 Replace with the functional iterators / maps
-          for (var key in curObject) if (Object.prototype.hasOwnProperty.call(curObject, key)) {
-            ret[key] = merger(ret[key], curObject[key]);
-          }
-        }
-        return ret;
-      };
-    };
-
-    var deepMerge = baseMerge(deep);
-    var merge = baseMerge(shallow);
-
-    return {
-      deepMerge: deepMerge,
-      merge: merge
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.scullion.ADT',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Arr',
-    'ephox.compass.Obj',
-    'ephox.peanut.Fun',
-    'global!Array'
-  ],
-
-  function (Type, Arr, Obj, Fun, Array) {
-    /*
-     * Generates a church encoded ADT. No, I'm not going to explain what that is here.
-     *
-     * The aim of this file is to replace the extreme ADT syntax we have been using
-     * (50 lines of code for a simple variant with 4 cases). Specifying the ADT
-     * can now be done in one line per case, and proper validation is included.
-     *
-     * For syntax and use, look at the test code.
-     */
-    var generate = function (cases) {
-      // validation
-      if (!Type.isArray(cases)) {
-        throw 'cases must be an array';
-      }
-      if (cases.length === 0) {
-        throw 'there must be at least one case';
-      }
-      // adt is mutated to add the individual cases
-      var adt = {};
-      Arr.each(cases, function (acase, count) {
-        var keys = Obj.keys(acase);
-
-        // validation
-        if (keys.length !== 1) {
-          throw 'one and only one name per case';
-        }
-
-        var key = keys[0];
-        var value = acase[key];
-
-        // validation
-        if (adt[key] !== undefined) {
-          throw 'duplicate key detected:' + key;
-        } else if (key === 'cata') {
-          throw 'cannot have a case named cata (sorry)';
-        } else if (!Type.isArray(value)) {
-          // this implicitly checks if acase is an object
-          throw 'case arguments must be an array';
-        }
-        //
-        // constructor for key
-        //
-        adt[key] = function () {
-          var args = Array.prototype.slice.call(arguments);
-          // validation
-          if (args.length !== value.length) {
-            throw 'Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + args.length;
-          }
-
-
-          //
-          // the fold function for key
-          //
-          return {
-            fold: function (/* arguments */) {
-              // runtime validation
-              if (arguments.length !== cases.length) {
-                throw 'Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length;
-              }
-              var target = arguments[count];
-              return target.apply(null, args);
-            }
-          };
-        };
-      });
-
-      return adt;
-    };
-    return {
-      generate: generate
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.hermes.api.ImageAsset',
-
-  [
-    'ephox.highway.Merger',
-    'ephox.scullion.ADT'
-  ],
-
-  function (Merger, ADT) {
-    /*
-     * An arbitrary common data structure for handling both local image files
-     * and images from web urls.
-     */
-    var adt = ADT.generate([
-      { 'blob': // Local image. W3C blob object (or File).
-        [       // NOTE File is just a subclass of Blob
-          'id',             // unique ID
-          'blob',           // the entire blob object
-          'objurl',         // an object URL - THIS MUST BE RELEASED WHEN DONE
-          'data'            // FileReader instance - already complete - loaded using readAsDataURL().
-                            //   we're storing this rather than result in the hope it will
-                            //   keep the string native rather than convert to JS
-        ]
-      },
-      { 'url':  ['id', 'url', 'raw'] } // Remote image. JS image object/element loaded via url
-
-    ]);
-
-    var cata = function (subject, onFile, onImage) {
-      return subject.fold(onFile, onImage);
-    };
-
-    return Merger.merge(adt, {
-      cata: cata
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.perhaps.Result',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Fun, Option) {
-    var value = function (r) {
-      return result(function (e, v) {
-        return v(r);
-      });
-    };
-
-    var error = function (message) {
-      return result(function (e, v) {
-        return e(message);
-      });
-    };
-
-    var result = function (fold) {
-
-      var is = function (v) {
-        return fold(Fun.constant(false), function (o) {
-          return o === v;
-        });
-      };
-
-      var isValue = function () {
-        return fold(Fun.constant(false), Fun.constant(true));
-      };
-
-      var isError = Fun.not(isValue);
-
-      var getOr = function (a) {
-        return fold(Fun.constant(a), Fun.identity);
-      };
-
-      var getOrThunk = function (f) {
-        return fold(f, Fun.identity);
-      };
-
-      var getOrDie = function () {
-        return fold(function (m) {
-          Fun.die(m)();
-        }, Fun.identity);
-      };
-
-      var or = function (opt) {
-        return fold(Fun.constant(opt), value);
-      };
-
-      var orThunk = function (f) {
-        return fold(f, value);
-      };
-
-      var map = function (f) {
-        return bind(function (a) {
-          return value(f(a));
-        });
-      };
-
-      var each = map;
-
-      var bind = function (f) {
-        return fold(error, f);
-      };
-
-      var exists = function (f) {
-        return fold(Fun.constant(false), f);
-      };
-
-      var forall = function (f) {
-        return fold(Fun.constant(true), f);
-      };
-
-      var toOption = function () {
-        return fold(Option.none, Option.some);
-      };
-
-      return {
-        is: is,
-        isValue: isValue,
-        isError: isError,
-        getOr: getOr,
-        getOrThunk: getOrThunk,
-        getOrDie: getOrDie,
-        or: or,
-        orThunk: orThunk,
-        fold: fold,
-        map: map,
-        each: each,
-        bind: bind,
-        exists: exists,
-        forall: forall,
-        toOption: toOption
-      };
-    };
-
-    return {
-      value: value,
-      error: error
-    };
-
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.alien.Toggler',
-
-  [
-  ],
-
-  function () {
-    return function (turnOff, turnOn, initial) {
-      var active = initial || false;
-
-      var on = function () {
-        turnOn();
-        active = true;
-      };
-
-      var off = function () {
-        turnOff();
-        active = false;
-      };
-
-      var toggle = function () {
-        var f = active ? off : on;
-        f();
-      };
-
-      var isOn = function () {
-        return active;
-      };
-
-      return {
-        on: on,
-        off: off,
-        toggle: toggle,
-        isOn: isOn
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Class',
-
-  [
-    'ephox.sugar.alien.Toggler',
-    'ephox.sugar.api.Attr'
-  ],
-
-  function (Toggler, Attr) {
-    /*
-     * ClassList is IE10 minimum:
-     * https://developer.mozilla.org/en-US/docs/Web/API/Element.classList
-     *
-     * Note that IE doesn't support the second argument to toggle (at all).
-     * If it did, the toggler could be better.
-     */
-
-    var add = function (element, clazz) {
-      element.dom().classList.add(clazz);
-    };
-
-    var remove = function (element, clazz) {
-      var classList = element.dom().classList;
-      classList.remove(clazz);
-
-      // classList is a "live list", so this is up to date already
-      if (classList.length === 0) {
-        // No more classes left, remove the class attribute as well
-        Attr.remove(element, 'class');
-      }
-    };
-
-    var toggle = function (element, clazz) {
-      return element.dom().classList.toggle(clazz);
-    };
-
-    var toggler = function (element, clazz) {
-      var classList = element.dom().classList;
-      var off = function () {
-        classList.remove(clazz);
-      };
-      var on = function () {
-        classList.add(clazz);
-      };
-      return Toggler(off, on, has(element, clazz));
-    };
-
-    var has = function (element, clazz) {
-      var classList = element.dom().classList;
-      // Cereal has a nasty habit of calling this with a text node >.<
-      return classList !== undefined && classList.contains(clazz);
-    };
-
-    // set deleted, risks bad performance. Be deterministic.
-
-    return {
-      add: add,
-      remove: remove,
-      toggle: toggle,
-      toggler: toggler,
-      has: has
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.ui.UploadUi',
-
-  [
-    'ephox.salmon.api.Ephemera',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.InsertAll',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.SelectorFind',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Ephemera, Class, Element, Insert, InsertAll, Remove, SelectorFind, Traverse) {
-    var removeUi = function (image) {
-      SelectorFind.ancestor(image, '.' + Ephemera.uploadContainer()).each(function (wrapper) {
-        var children = Traverse.children(wrapper);
-        InsertAll.before(wrapper, children);
-        Remove.remove(wrapper);
-      });
-    };
-
-    var addUi = function (image) {
-      var block = Element.fromTag('div');
-      Class.add(block, Ephemera.uploadContainer());
-      Insert.before(image, block);
-      Insert.append(block, image);
-    };
-
-    return {
-      removeUi: removeUi,
-      addUi: addUi
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.api.UploadUtils',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.hermes.api.ImageAsset',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.perhaps.Result',
-    'ephox.salmon.api.Ephemera',
-    'ephox.salmon.ui.UploadUi',
-    'ephox.scullion.ADT',
-    'ephox.scullion.Struct',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.SelectorFind',
-    'global!console'
-  ],
-
-  function (Arr, ImageAsset, Fun, Option, Result, UiEphemera, UploadUi, Adt, Struct, Attr, SelectorFind, console) {
-    var imageBlob = Struct.immutable('image', 'blobInfo');
-
-    var uploadResult = Adt.generate([
-      { 'failure':     [ 'error' ] },
-      { 'success':     [ 'result', 'images', 'blob' ] }
-    ]);
-
-    /* Register any not already active id in the image tracker and return Some if it isn't already active */
-    var prepareForUpload = function (imageTracker, id, image) {
-      // If this ID is already active, don't actually trigger the upload a second time
-      var alreadyActive = imageTracker.isActive(id);
-
-      // Register the id so ImageTracker can find it
-      imageTracker.register(image, id);
-
-      // Add the spinner wrapper.
-      UploadUi.addUi(image);
-
-      // separate the actual upload call so we don't have the img element in closure
-      return !alreadyActive ? Option.some(id) : Option.none();
-    };
-
-    /* With each uploaded image, remove the uploading UI, update its src, and remove from the blob cache.
-     * Return the blob info identified by the id
-     */
-    var updateImages = function (blobCache, images, id, result) {
-      Arr.each(images, function (img) {
-        Attr.set(img, 'src', result.location);
-        Attr.remove(img, UiEphemera.blobId());
-      });
-
-      return removeFromCache(blobCache, id, images);
-    };
-
-    /* Upload a particular image, finding it afterwards and updating its source */
-    var handleUpload = function (uploadManager, imageTracker, blobCache, container, id, blob, callback) {
-      var internalError = function () {
-        console.error('Internal error with blob cache', id);
-        // anything over 500 is a generic error
-        callback(uploadResult.failure({status: Fun.constant(666)}));
-      };
-
-      uploadManager.upload(blob, id, function (response) {
-        var freshImgs = imageTracker.findById(container, id);
-
-        // remove the image UI no matter what happened
-        Arr.each(freshImgs, UploadUi.removeUi);
-
-        response.fold(function (err) {
-          callback(uploadResult.failure(err));
-        }, function (result) {
-          updateImages(blobCache, freshImgs, id, result).fold(internalError, function (blobInfo) {
-            callback(uploadResult.success(result, freshImgs, blobInfo));
-          });
-        });
-
-        imageTracker.report(id, freshImgs, response.isValue());
-      });
-    };
-
-    var addToCache = function (blobCache, id, blob, objurl, data, image) {
-      var blobInfo = blobCache.lookupByData(data.result).getOrThunk(function () { return blobCache.add(id, blob, objurl, data); });
-      Attr.set(image, UiEphemera.blobId(), blobInfo.id());
-      return Result.value(imageBlob(image, blobInfo));
-    };
-
-
-    var findInCache = function (blobCache, image) {
-      var id = Attr.get(image, UiEphemera.blobId());
-      return blobCache.get(id).fold(function () {
-        return Result.error(id);
-      }, function (blobInfo) {
-        return Result.value(imageBlob(image, blobInfo));
-      });
-    };
-
-    var removeFromCache = function (blobCache, id, images) {
-      return blobCache.get(id).fold(function () {
-        return Result.error('Internal error with blob cache');
-      }, function (blobInfo) {
-        blobCache.remove(id);
-        return Result.value(blobInfo);
-      });
-    };
-
-    /* Find all of the assets in the container, and return the (blobInfo, img) pairs */
-    var registerAssets = function (blobCache, container, assets) {
-      return Arr.bind(assets, function (asset) {
-        return ImageAsset.cata(asset, function (id, blob, objurl, data) {
-          var freshImg = SelectorFind.descendant(container, 'img[src="' + objurl + '"]');
-          return freshImg.fold(function () {
-            return [ Result.error('Image that was just inserted could not be found: ' + objurl) ];
-          }, function (img) {
-            return [ addToCache(blobCache, id, blob, objurl, data, img) ];
-          });
-        }, Fun.constant([]));
-      });
-    };
-
-    var findBlobs = function(imageTracker, blobCache, container) {
-      var images = imageTracker.findAll(container);
-      if (imageTracker.inProgress()) return [];
-      return Arr.map(images, function (image) {
-        return findInCache(blobCache, image);
-      });
-    };
-
-    return {
-      prepareForUpload: prepareForUpload,
-      handleUpload: handleUpload,
-      registerAssets: registerAssets,
-      findBlobs: findBlobs
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.numerosity.api.FormData',
-
-  [
-    'ephox.numerosity.core.Global'
-  ],
-
-  function (Global) {
-    /*
-     * IE10 and above per
-     * https://developer.mozilla.org/en-US/docs/Web/API/FormData
-     */
-    return function () {
-      var f = Global.getOrDie('FormData');
-      return new f();
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!Math", [], function () { return Math; });
-ephox.bolt.module.api.define("global!isFinite", [], function () { return isFinite; });
-ephox.bolt.module.api.define("global!isNaN", [], function () { return isNaN; });
-ephox.bolt.module.api.define("global!parseFloat", [], function () { return parseFloat; });
-(function (define, require, demand) {
-define(
-  'ephox.violin.util.Validate',
-
-  [
-    'global!Math',
-    'global!isFinite',
-    'global!isNaN',
-    'global!parseFloat'
-  ],
-
-  function(Math, isFinite, isNaN, parseFloat) {
-    var vType = function(expectedType) {
-      return function(name, value) {
-        var t = typeof value;
-        if (t !== expectedType) throw name + ' was not a ' + expectedType + '. Was: ' + value + ' (' + t + ')';
-      };
-    };
-
-    var vString = vType('string');
-
-    var vChar = function(name, value) {
-      vString(name, value);
-      var length = value.length;
-      if (length !== 1) throw name + ' was not a single char. Was: ' + value;
-    };
-
-    var vNumber = vType('number');
-
-    var vInt = function(name, value) {
-      vNumber(name, value);
-      if (value !== Math.abs(value)) throw name + ' was not an integer. Was: ' + value;
-    };
-
-    var pNum = function(value) {
-      return !isNaN(parseFloat(value)) && isFinite(value);
-    };
-
-    var vNat = function(name, value) {
-      vInt(name, value);
-      if (value < 0) throw name + ' was not a natural number. Was: ' + value;
-    };
-
-    return {
-      vString: vString,
-      vChar: vChar,
-      vInt: vInt,
-      vNat: vNat,
-      pNum: pNum
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-/**
- *  "violin" - stringed instrument, or rather, an instrument for dealing with strings.
- */
-define(
-  "ephox.violin.Strings",
-
-  [
-    'ephox.violin.util.Validate'
-  ],
-
-  function (Validate) {
-    //common method
-    var checkRange = function(str, substr, start) {
-      if (substr === "") return true;
-      if (str.length < substr.length) return false;
-      var x = str.substr(start, start + substr.length);
-      return x === substr;
-    };
-
-    /** Given a string and object, perform template-replacements on the string, as specified by the object.
-     * Any template fields of the form ${name} are replaced by the string or number specified as obj["name"]
-     * Based on Douglas Crockford's 'supplant' method for template-replace of strings. Uses different template format.
-     */
-    var supplant = function(str, obj) {
-      var isStringOrNumber = function(a) {
-        var t = typeof a;
-        return t === "string" || t === "number";
-      };
-
-      return str.replace(/\${([^{}]*)}/g,
-        function (a, b) {
-          var value = obj[b];
-          return isStringOrNumber(value) ? value : a;
-        }
-      );
-    };
-
-    var ignoringCase = function(fn) {
-      var map = function(a, fn) {
-        var r = [];
-        for (var i = 0; i < a.length; i++) r.push(fn(a[i]));
-        return r;
-      };
-
-      return function() {
-        var args = map(arguments, function(x) {
-          return typeof x === "string" ? x.toLowerCase() : x;
-        });
-        return fn.apply(this, args);
-      };
-    };
-
-    /** Does 'str' start with 'prefix'?
-     *  Note: all strings start with the empty string.
-     *        More formally, for all strings x, startsWith(x, "").
-     *        This is so that for all strings x and y, startsWith(y + x, y)
-     */
-    var startsWith = function(str, prefix) {
-      return checkRange(str, prefix, 0);
-    };
-
-    var startsWithIgnoringCase = /* str, prefix */ ignoringCase(startsWith);
-
-    /** Does 'str' end with 'suffix'?
-     *  Note: all strings end with the empty string.
-     *        More formally, for all strings x, endsWith(x, "").
-     *        This is so that for all strings x and y, endsWith(x + y, y)
-     */
-    var endsWith = function(str, suffix) {
-      return checkRange(str, suffix, str.length - suffix.length);
-    };
-
-    var endsWithIgnoringCase = /* str, suffix */ ignoringCase(endsWith);
-
-    /** Return the first 'count' letters from 'str'.
-     *  e.g. first("abcde", 2) === "ab"
-     */
-    var first = function(str, count) {
-      return str.substr(0, count);
-    };
-
-    /** Return the last 'count' letters from 'str'.
-     *  e.g. last("abcde", 2) === "de"
-     */
-    var last = function(str, count) {
-      return str.substr(str.length - count, str.length);
-    };
-
-    var removeAppendage = function(checkFn, chopFn) {
-      return function(str, appendage) {
-        return checkFn(str, appendage) ? chopFn(str, str.length - appendage.length) : str;
-      };
-    };
-
-    var removeLeading = /* str, prefix */ removeAppendage(startsWith, last);
-    var removeTrailing = /* str, suffix */ removeAppendage(endsWith, first);
-
-    var append = function(a, b) {
-      return a + b;
-    };
-
-    var prepend = function(a, b) {
-      return b + a;
-    };
-
-    var ensureAppendage = function(checkFn, concatter) {
-      return function(str, appendage) {
-        return checkFn(str, appendage) ? str : concatter(str, appendage);
-      };
-    };
-
-    var ensureLeading = /* str, prefix */ ensureAppendage(startsWith, prepend);
-    var ensureTrailing = /* str, suffix */ ensureAppendage(endsWith, append);
-
-    /** removes all leading and trailing spaces */
-    var trim = 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, '');
-    };
-
-    /** Does 'str' contain 'substr'?
-     *  Note: all strings contain the empty string.
-     */
-    var contains = function(str, substr) {
-      return str.indexOf(substr) != -1;
-    };
-
-    var containsIgnoringCase = /* str, substr */ ignoringCase(contains);
-
-    var htmlEncodeDoubleQuotes = function(str) {
-      return str.replace(/\"/gm, "&quot;");
-    };
-
-    var equals = function(a, b) {
-      return a === b;
-    };
-    var equalsIgnoringCase = /* a, b */ ignoringCase(equals);
-
-    var head = function(str) {
-      if (str === "") throw "head on empty string";
-      return str.substr(0, 1);
-    };
-
-    var toe = function(str) {
-      if (str === "") throw "toe on empty string";
-      return str.substr(str.length - 1, str.length);
-    };
-
-    var tail = function(str) {
-      if (str === "") throw "tail on empty string";
-      return str.substr(1, str.length - 1);
-    };
-
-    var torso = function(str) {
-      if (str === "") throw "torso on empty string";
-      return str.substr(0, str.length - 1);
-    };
-
-    var capitalize = function(str) {
-      if (str === "") return str;
-      return head(str).toUpperCase() + tail(str);
-    };
-
-    var repeat = function(str, num) {
-      Validate.vString('str', str);
-      Validate.vNat('num', num);
-      var r = '';
-      for (var i = 0; i < num; i++) {
-        r += str;
-      }
-      return r;
-    };
-
-    var pad = function(combiner) {
-      return function(str, c, width) {
-        Validate.vString('str', str);
-        Validate.vChar('c', c);
-        Validate.vNat('width', width);
-        var l = str.length;
-        return l >= width ? str : combiner(str, repeat(c, width - l));
-      };
-    };
-
-    var padLeft  = pad(function(s, padding) { return padding + s; });
-    var padRight = pad(function(s, padding) { return s + padding; });
-
-    return {
-      supplant: supplant,
-      startsWith: startsWith,
-      startsWithIgnoringCase: startsWithIgnoringCase,
-      endsWith: endsWith,
-      endsWithIgnoringCase: endsWithIgnoringCase,
-      first: first,
-      last: last,
-      removeLeading: removeLeading,
-      removeTrailing: removeTrailing,
-      ensureLeading: ensureLeading,
-      ensureTrailing: ensureTrailing,
-      trim: trim,
-      lTrim: lTrim,
-      rTrim: rTrim,
-      contains: contains,
-      containsIgnoringCase: containsIgnoringCase,
-      htmlEncodeDoubleQuotes: htmlEncodeDoubleQuotes,
-      equals: equals,
-      equalsIgnoringCase: equalsIgnoringCase,
-      head: head,
-      repead: repeat,
-      padLeft: padLeft,
-      padRight: padRight,
-      toe: toe,
-      tail: tail,
-      torso: torso,
-      capitalize: capitalize
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.services.UploadCommon',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Arr',
-    'ephox.numerosity.api.FormData',
-    'ephox.scullion.Struct',
-    'ephox.violin.Strings'
-  ],
-
-  function (Type, Arr, FormData, Struct, Strings) {
-    var failureObject = Struct.immutable('message', 'status', 'contents');
-
-    var known = [ 'jpg', 'png', 'gif', 'jpeg' ]; // I welcome more suggestions
-
-    var buildFilename = function (file, identifier) {
-      if (Type.isString(file.type) && Strings.startsWith(file.type, 'image/')) {
-        var filetype = file.type.substr('image/'.length);
-
-        // If it's a known extension, use it, otherwise just don't provide an extension
-        return Arr.contains(known, filetype) ? identifier + '.' + filetype : identifier;
-      } else {
-        // things that aren't image/xxx can just have the default filename with no extension
-        return identifier;
-      }
-    };
-
-    var getFilename = function (file, identifier) {
-      // file.name is the default, but if it's a blob the default name is 'blob'
-      // TBIO-3151: On IE11 internet sites the filename ends in '.tmp' and we don't want to upload that.
-      var useFilename = Type.isString(file.name) && !Strings.endsWith(file.name, '.tmp');
-      return useFilename ? file.name : buildFilename(file, identifier);
-    };
-
-    var buildExtra = function (fieldName, file, filename) {
-      var formData = FormData();
-      formData.append(fieldName, file, filename);
-
-      return {
-        data: formData,
-        // override Jax, which sets this to application/json (triggering pre-flight)
-        contentType: false,
-        // stop JQuery processing the data
-        processData: false
-      };
-    };
-
-    return {
-      failureObject: failureObject,
-      getFilename: getFilename,
-      buildExtra: buildExtra
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.numerosity.api.XMLHttpRequest',
-
-  [
-    'ephox.numerosity.core.Global'
-  ],
-
-  function (Global) {
-    /*
-     * IE8 and above per
-     * https://developer.mozilla.org/en/docs/XMLHttpRequest
-     */
-    return function () {
-      var f = Global.getOrDie('XMLHttpRequest');
-      return new f();
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.jax.base.Ajax',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Obj',
-    'ephox.highway.Merger',
-    'ephox.numerosity.api.XMLHttpRequest',
-    'ephox.perhaps.Result',
-    'ephox.violin.Strings',
-    'global!console'
-  ],
-
-  function (Type, Obj, Merger, XMLHttpRequest, Result, Strings, console) {
-    var accepts = {
-      '*': '*/*',
-      text: 'text/plain',
-      html: 'text/html',
-      xml: 'application/xml, text/xml',
-      json: 'application/json, text/javascript'
-    };
-
-    /*
-     *
-     * This could be done better, but that would involve an API change. Or move some of it to numerosity.
-     * Start by replicating JQuery API, and unravel later.
-     *
-     */
-
-    var ajax = function (url, success, error, extra) {
-      var base = {
-        url: url,
-        contentType: 'application/json',
-        processData: false,
-        type: 'GET'
-      };
-
-      var options = Merger.merge(base, extra);
-      // This would be nice, but IE doesn't support responseType 'json' - might be an excuse to bring in platform detection
-      /*
-      if (Type.isString(options.responseType))
-         request.responseType = options.responseType;
-      */
-
-      var request = XMLHttpRequest();
-
-      request.open(options.type.toUpperCase(), options.url, true); // enforced async! enforced type as String!
-
-      if (Type.isString(options.contentType)) { // set to string here, but overridden for form posting by TBIO-1255
-        request.setRequestHeader('Content-Type', options.contentType);
-      }
-
-      // I'm not 100% sure why JQuery does this, but eh why not
-      var odt = options.dataType;
-      var a = Type.isString(odt) && odt !== '*' ?
-        accepts[odt] + ', ' + accepts['*'] + '; q=0.01' :
-        accepts['*'];
-
-      request.setRequestHeader('Accept', a);
-
-      if (options.xhrFields !== undefined && options.xhrFields.withCredentials === true) {
-        request.withCredentials = true; // IE10 minimum
-      }
-
-      // Do this last, so the extra headers can override the above
-      if (Type.isObject(options.headers)) Obj.each(options.headers, function (v, k) {
-        if (!Type.isString(k) && !Type.isString(v)) console.error('Request header data was not a string: ', k ,' -> ', v);
-        else request.setRequestHeader(k, v);
-      });
-
-      var onSuccess = function (data, status, jqxhr) {
-        success(data);
-      };
-
-      var onError = function (jqxhr) {
-        error('Could not load url "' + url + '": ' + jqxhr.status + ' ' + jqxhr.statusText, jqxhr.status, jqxhr.responseText);
-      };
-
-      var parseJson = function (jqxhr) {
-        // If we do this inside the try block, an error in the success callback will be caught
-        // by the "response was not JSON" catch block.
-        try {
-          return Result.value(JSON.parse(jqxhr.response));
-        } catch (e) {
-          return Result.error({
-            status: jqxhr.status,
-            statusText: 'Response was not JSON',
-            responseText: jqxhr.responseText
-          });
-        }
-      };
-
-      var validateData = function (request) {
-        var data = options.dataType === 'json' ? parseJson(request) : Result.value(request.response);
-        data.fold(onError, function (xhrData) {
-          onSuccess(xhrData, request.statusText, request);
-        });
-      };
-
-      var onLoad = function () {
-        if (request.status === 0) {
-          // Local files and Cors errors return status 0.
-          // The only way we can decifer a local request is request url starts with 'file:' and allow local files to succeed.
-          if (Strings.startsWith(options.url, 'file:')) validateData(request);
-          else error('Unknown HTTP error (possible cross-domain request)', request.status, request.responseText);
-
-        } else if ( request.status < 100 || request.status >= 400) {
-          // Technically only network errors trigger onerror; HTTP errors trigger onload.
-          // In practice only IE does this. But we need to handle it.
-          onError(request);
-        } else {
-          validateData(request);
-        }
-      };
-
-      request.onerror = onError;
-      request.onload = onLoad;
-      // I suspect refactoring this at all will break stuff
-      if (options.data === undefined) {
-        request.send();
-      } else {
-        request.send(options.data);
-      }
-    };
-
-    return {
-      ajax: ajax
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.numerosity.api.JSON',
-
-  [
-    'ephox.numerosity.core.Global'
-  ],
-
-  function (Global) {
-    /*
-     * IE8 and above per
-     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON
-     */
-    var json = function () {
-      return Global.getOrDie('JSON');
-    };
-
-    var parse = function (obj) {
-      return json().parse(obj);
-    };
-
-    var stringify = function (obj) {
-      return json().stringify(obj);
-    };
-
-    return {
-      parse: parse,
-      stringify: stringify
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.jax.plain.Ajax',
-
-  [
-    'ephox.highway.Merger',
-    'ephox.jax.base.Ajax',
-    'ephox.numerosity.api.JSON'
-  ],
-
-  function (Merger, Ajax, JSON) {
-    var get = function (url, success, error, extra) {
-      Ajax.ajax(url, success, error, Merger.merge({
-        dataType: 'text',
-        type: 'GET'
-      }, extra));
-    };
-
-    var post = function (url, data, success, error, extra) {
-      Ajax.ajax(url, success, error, Merger.merge({
-        dataType: 'text',
-        data: JSON.stringify(data),
-        type: 'POST'
-      }, extra));
-    };
-
-    return {
-      get: get,
-      post: post
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-// An implementation of the algorithm specified in section 5.3 of RFC 3986.
-// See http://tools.ietf.org/html/rfc3986#section-5.3
-define(
-  'ephox.yuri.resolve.Recompose',
-
-  [
-  ],
-
-  function () {
-    var recompose = function (transformed) {
-      var result = '';
-
-      if (transformed.protocol !== '') {
-        result += transformed.protocol;
-        result += ':';
-      }
-
-      if (transformed.authority !== '') {
-        result += '//';
-        result += transformed.authority;
-      }
-
-      result += transformed.path;
-
-      if (transformed.query !== '') {
-        result += '?';
-        result += transformed.query;
-      }
-
-      if (transformed.anchor !== '') {
-        result += '#';
-        result += transformed.anchor;
-      }
-
-      return result;
-    };
-
-    return {
-      recompose: recompose
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-// Based on parseUri 1.2.2
-// (c) Steven Levithan <stevenlevithan.com>
-// MIT License
-// http://blog.stevenlevithan.com/archives/parseuri
-//
-// Forked by Ephox on 2011-02-07. Source modified.
-define(
-  'ephox.yuri.api.Parser',
-
-  [
-    'ephox.highway.Merger'
-  ],
-
-  function (Merger) {
-    var defaultOptions = {
-      strictMode: false,
-      key: [ 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor' ],
-      q: {
-        name:   'queryKey',
-        parser: /(?:^|&)([^&=]*)=?([^&]*)/g
-      },
-      parser: {
-        strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
-        loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
-      }
-    };
-
-    var parseUri = function (str, options) {
-      var o = options,
-        m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str),
-        uri = {},
-        i = 14;
-
-      while (i--) uri[o.key[i]] = m[i] || '';
-
-      uri[o.q.name] = {};
-      uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
-        if ($1) uri[o.q.name][$1] = $2;
-      });
-
-      return uri;
-    };
-
-    var parse = function (str, options) {
-      var augmentedOptions = Merger.merge(defaultOptions, options);
-      return parseUri(str, augmentedOptions);
-    };
-
-    return {
-      parse: parse
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-// An implementation of the algorithm specified in section 5.2.4 of RFC 3986.
-// See http://tools.ietf.org/html/rfc3986#section-5.2.4
-define(
-  'ephox.yuri.normalize.Dots',
-
-  [
-    'ephox.violin.Strings'
-  ],
-
-  function (Strings) {
-    var removeLastSegment = function (path) {
-      return Strings.removeTrailing(path, lastSegment(path));
-    };
-
-    var firstSegment = function (path) {
-      return path.match(/(^\/?.*?)(\/|$)/)[1];
-    };
-
-    var lastSegment = function (path) {
-      return path.substring(path.lastIndexOf('/'));
-    };
-
-    var remove = function (path) {
-      // 1.
-      var input = path;
-      var output = '';
-
-      // 2.
-      while (input !== '') {
-        // 2. A
-        if (Strings.startsWith(input, '../')) {
-          input = Strings.removeLeading(input, '../');
-        } else if (Strings.startsWith(input, './')) {
-          input = Strings.removeLeading(input, './');
-        // 2. B
-        } else if (Strings.startsWith(input, '/./')) {
-          input = '/' + Strings.removeLeading(input, '/./');
-        } else if (input === '/.') {
-          input = '/';
-        // 2. C
-        } else if (Strings.startsWith(input, '/../')) {
-          input = '/' + Strings.removeLeading(input, '/../');
-          output = removeLastSegment(output);
-        } else if (input === '/..') {
-          input = '/';
-          output = removeLastSegment(output);
-        // 2. D
-        } else if (input === '.' || input === '..') {
-          input = '';
-        // 2. E
-        } else {
-          var first = firstSegment(input);
-          input = Strings.removeLeading(input, first);
-          output += first;
-        }
-      }
-
-      // 3.
-      return output;
-    };
-
-    return {
-      remove: remove
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-// An implementation of the algorithm specified in section 5.2.3 of RFC 3986.
-// See http://tools.ietf.org/html/rfc3986#section-5.2.3
-define(
-  'ephox.yuri.resolve.Merge',
-
-  [
-    'ephox.violin.Strings'
-  ],
-
-  function (Strings) {
-    var merge = function (base, rel, baseAuthority) {
-      if (baseAuthority !== '' && base === '')
-        return '/' + rel;
-
-      var last = base.substring(base.lastIndexOf('/') + 1);
-      return Strings.removeTrailing(base, last) + rel;
-    };
-
-    return {
-      merge: merge
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-// An implementation of the algorithm specified in section 5.2.2 of RFC 3986.
-// See http://tools.ietf.org/html/rfc3986#section-5.2.2
-define(
-  'ephox.yuri.resolve.Transform',
-
-  [
-    'ephox.violin.Strings',
-    'ephox.yuri.api.Parser',
-    'ephox.yuri.normalize.Dots',
-    'ephox.yuri.resolve.Merge'
-  ],
-
-  function (Strings, Parser, Dots, Merge) {
-    var transform = function (base, relative) {
-      var options = { strictMode: true };
-
-      var b = Parser.parse(base, options);
-      var rel = Parser.parse(relative, options);
-
-      var ret = {};
-
-      if (rel.protocol !== '') {
-        ret.protocol = rel.protocol;
-        ret.authority = rel.authority;
-        ret.path = Dots.remove(rel.path);
-        ret.query = rel.query;
-      } else {
-         if (rel.authority !== '') {
-            ret.authority = rel.authority;
-            ret.path = Dots.remove(rel.path);
-            ret.query = rel.query;
-         } else {
-          if (rel.path === '') {
-            ret.path = b.path;
-            if (rel.query !== '') {
-              ret.query = rel.query;
-            } else {
-              ret.query = b.query;
-            }
-          } else {
-            if (Strings.startsWith(rel.path, '/')) {
-               ret.path = Dots.remove(rel.path);
-            } else {
-              ret.path = Merge.merge(b.path, rel.path, base.authority);
-              ret.path = Dots.remove(ret.path);
-            }
-            ret.query = rel.query;
-          }
-          ret.authority = b.authority;
-        }
-        ret.protocol = b.protocol;
-      }
-
-      ret.anchor = rel.anchor;
-
-      return ret;
-    };
-
-    return {
-      transform: transform
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.yuri.api.Resolver',
-
-  [
-    'ephox.yuri.resolve.Recompose',
-    'ephox.yuri.resolve.Transform'
-  ],
-
-  function (Recompose, Transform) {
-    var resolve = function (base, relative) {
-      var transformed = Transform.transform(base, relative);
-      return Recompose.recompose(transformed);
-    };
-
-    return {
-      resolve: resolve
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.services.UploadDirect',
-
-  [
-    'ephox.classify.Type',
-    'ephox.highway.Merger',
-    'ephox.jax.plain.Ajax',
-    'ephox.numerosity.api.JSON',
-    'ephox.perhaps.Result',
-    'ephox.salmon.services.UploadCommon',
-    'ephox.violin.Strings',
-    'ephox.yuri.api.Resolver'
-  ],
-
-  function (Type, Merger, Ajax, JSON, Result, UploadCommon, Strings, Resolver) {
-    return function (settings) {
-
-      /*
-       * If a base is not provided by the config, use the directory where the
-       * POST acceptor lives
-       */
-      var resolveBase = function () {
-        var fullBase = settings.url;
-        // The base is the string up to the last slash, unless that slash is at the start of the string.
-        var lastSlash = fullBase.lastIndexOf('/');
-        var base = lastSlash > 0 ? fullBase.substr(0, lastSlash) : fullBase;
-
-        var _responseBase = settings.basePath === undefined ? base : settings.basePath;
-        return Strings.endsWith(_responseBase, '/') ? _responseBase : _responseBase + '/';
-      };
-
-      // pre-calculate, don't need to do this on every upload
-      var responseBase = resolveBase();
-
-
-      /*
-       * ELJ upload handler result location consists of:
-       *
-       * - If the response looks like a URL, use that as the filename
-       * - Otherwise use the source filename
-       * - take the filename, and resolve it relative to the base provided by the config
-       */
-      var calculateLocation = function (response, filename) {
-        var splits = response.split(/\s+/);
-
-        // If the response text is a simple string with no whitespace, it's a URL
-        var serverFilename = (splits.length === 1 && splits[0] !== '') ? splits[0] : filename;
-
-        // Resolve the settings base url to the response
-        return Resolver.resolve(responseBase, serverFilename);
-      };
-
-      // ELJ style direct uploader, form field name 'image'
-      var upload = function (blobInfo, identifier, callback) {
-        var file = blobInfo.blob();
-        var failure = function (message, status, contents) {
-          callback(Result.error(UploadCommon.failureObject(message, status, contents)));
-        };
-
-        var filename = UploadCommon.getFilename(file, identifier);
-
-        var useCreds = settings.credentials !== true ? {} : {
-          xhrFields: {
-            withCredentials: true
-          }
-        };
-
-        var extra = Merger.merge(useCreds, UploadCommon.buildExtra('image', file, filename));
-
-        var success = function (_response) {
-          var response;
-          // This is difficult to refactor; response is either a json parse failure, a json object, or a string.
-          try {
-            var json = JSON.parse(_response);
-            // we have JSON, make sure it's valid
-            if (!Type.isString(json.location)) {
-              failure('JSON response did not contain a string location', 500, _response);
-              return;
-            } else {
-              // we now support adding a base URL ELJ style, so we have to unwrap the JSON into a string
-              response = json.location;
-            }
-          } catch (e) {
-            // not JSON, assume it's an ELJ style url response
-            response = _response;
-          }
-
-          var loc = calculateLocation(response, filename);
-
-          callback(Result.value({
-            // convert ELJ style response to TBIO expected response
-            location: loc
-          }));
-        };
-
-        Ajax.post(settings.url, {}, success, failure, extra);
-      };
-
-      return {
-        upload: upload
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!setTimeout", [], function () { return setTimeout; });
-(function (define, require, demand) {
-define(
-  'ephox.salmon.services.UploadFunction',
-
-  [
-    'ephox.classify.Type',
-    'ephox.perhaps.Result',
-    'ephox.salmon.services.UploadCommon',
-    'ephox.scullion.Struct',
-    'global!console',
-    'global!setTimeout'
-  ],
-
-  function (Type, Result, UploadCommon, Struct, console, setTimeout) {
-    var imageObjectApi = Struct.immutable('id', 'filename', 'blob', 'base64');
-
-    // Customer handler function
-    return function (handler) {
-
-      var upload = function (blobInfo, identifier, callback) {
-        var failure = function (message) {
-          // SimpleError handles the variety of callback message types, so just pass it straight through
-          callback(Result.error(message));
-        };
-
-        var success = function (result) {
-          if (!Type.isString(result)) {
-            console.error('Image upload result was not a string');
-            failure('');
-          } else {
-            callback(Result.value({
-              // convert to TBIO expected response
-              location: result
-            }));
-          }
-        };
-
-        var filename = UploadCommon.getFilename(blobInfo.blob(), identifier);
-
-        var api = imageObjectApi(identifier, filename, blobInfo.blob(), blobInfo.data().result);
-
-        // wrap the custom handler in a setTimeout so that if it throws an error, that doesn't break the core editor
-        setTimeout(function () {
-          handler(api, success, failure);
-        }, 0);
-      };
-
-      return {
-        upload: upload
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.salmon.api.Uploaders',
-
-  [
-    'ephox.salmon.services.UploadCommon',
-    'ephox.salmon.services.UploadDirect',
-    'ephox.salmon.services.UploadFunction'
-  ],
-
-  function (UploadCommon, UploadDirect, UploadFunction) {
-    var direct = function (settings) {
-      return UploadDirect(settings);
-    };
-
-    var custom = function (handler) {
-      return UploadFunction(handler);
-    };
-
-    var failureObject = function (message, status, contents) {
-      return UploadCommon.failureObject(message, status, contents);
-    };
-
-    var getFilename = function (file, identifier) {
-      return UploadCommon.getFilename(file, identifier);
-    };
-
-    var buildExtra = function (fieldName, file, filename) {
-      return UploadCommon.buildExtra(fieldName, file, filename);
-    };
-
-    return {
-      direct: direct,
-      custom: custom,
-      failureObject: failureObject,
-      getFilename: getFilename,
-      buildExtra: buildExtra
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.imageupload.EphoxUploader',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.powerpaste.imageupload.TinyUploader',
-    'ephox.powerpaste.imageupload.UploadError',
-    'ephox.powerpaste.tinymce.UndoRewriter',
-    'ephox.salmon.api.BlobCache',
-    'ephox.salmon.api.ImageTracker',
-    'ephox.salmon.api.UploadUtils',
-    'ephox.salmon.api.Uploaders',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (Arr, Fun, Option, TinyUploader, UploadError, UndoRewriter, BlobCache, ImageTracker, UploadUtils, Uploaders, Attr, Element) {
-    var enabled = function (editor, settings) {
-      // Use polish dependencies.
-      var blobCache = BlobCache();
-      var imageTracker = ImageTracker();
-      var errorHandler = UploadError();
-      var errors = UploadError(editor, settings.url);
-
-      // UploadDirect will need an error handler that is tiny specific.
-      var uploadManager = Uploaders.direct(settings);
-
-      var getBody = function () {
-        return Element.fromDom(editor.getBody());
-      };
-
-      var updateImage = function (result, images, b) {
-        Arr.each(images, function (img) {
-          Attr.set(img, 'data-mce-src', result.location);
-        });
-
-        // undo hack.
-        UndoRewriter.resrcHistory(editor, b, result);
-      };
-
-      imageTracker.events.complete.bind(function (event) {
-        //Other undo hack.
-        UndoRewriter.unwrapHistory(editor);
-      });
-
-      var uploadImage = function(id, blob, showError) {
-        UploadUtils.handleUpload(uploadManager, imageTracker, blobCache, getBody(), id, blob, function (upResult) {
-          upResult.fold(function (err) {
-            // show error dialog
-            showError(err);
-          }, updateImage);
-        });
-      };
-
-      var prepareForUpload = function (info, showError) {
-        UploadUtils.prepareForUpload(imageTracker, info.blobInfo().id(), info.image()).each(function (id) {
-          uploadImage(id, info.blobInfo(), showError);
-        });
-      };
-
-      var uploadAssets = function (assets) {
-        var showError = errors.instance();
-        var candidates = UploadUtils.registerAssets(blobCache, getBody(), assets);
-        Arr.each(candidates, function (candidate) {
-          candidate.fold(function (err) {
-            // a blob we do not know about.
-            console.error(err);
-          }, function(info) {
-            prepareForUpload(info, showError);
-          });
-        });
-      };
-
-      // Need to fill this in.
-      var reconstitute = function () {
-        var showError = errors.instance();
-        var imageBlobs = UploadUtils.findBlobs(imageTracker, blobCache, getBody());
-        Arr.each(imageBlobs, function (imageBlob) {
-          imageBlob.fold(function (id) {
-            // Report the failure.
-            imageTracker.report(id, Option.none(), false);
-          }, function(info) {
-            prepareForUpload(info, showError);
-          });
-        });
-      };
-
-      var uploadImages = function (assets) {
-        reconstitute();
-
-        uploadAssets(assets);
-      };
-
-      var getLocalURL = function (id, blob, objurl, data) {
-        return objurl;
-      };
-
-      return {
-        uploadImages: uploadImages,
-        prepareImages: Fun.noop, //Images are already in Ephox uploader's required format (blobs)
-        getLocalURL: getLocalURL
-      };
-    };
-
-
-    var disabled = function(editor) {
-
-      var tinyUploader = TinyUploader(editor);
-
-      return {
-        uploadImages: Fun.noop,
-        prepareImages: tinyUploader.prepareImages, //Convert images back to base64 so they aren't unusable
-        getLocalURL: tinyUploader.getLocalURL //As above
-      };
-    };
-
-    return function (editor, settings) {
-      return settings ? enabled(editor, settings) : disabled(editor);
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.imageupload.UploaderFactory',
-
-  [
-    'ephox.powerpaste.imageupload.EphoxUploader',
-    'ephox.powerpaste.imageupload.TinyUploader'
-  ],
-  function (EphoxUploader, TinyUploader) {
-    return function (editor) {
-      //We'll only need to use ephox's uploader if Tiny's 4.0-4.1 and we have an images_upload_url setting
-      var ephoxUploadSettings = !editor.uploadImages && editor.settings.images_upload_url ?
-        {
-              url: editor.settings.images_upload_url,
-              basePath: editor.settings.images_upload_base_path,
-              credentials: editor.settings.images_upload_credentials
-        } : null;
-      return !editor.uploadImages ? EphoxUploader(editor, ephoxUploadSettings) : TinyUploader(editor);
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.tinymce.Util',
-
-  [
-  ],
-
-  function () {
-    var bind = function(func, t) {
-      return function() {
-        return func.apply(t, arguments);
-      };
-    };
-
-    // Useful utilities that may exist in libraries but aren't as common.
-    // Currently we're providing our own implementation for these but want to track them.
-    var ephoxGetComputedStyle = function(node) {
-      if (node.ownerDocument.defaultView) {
-        return node.ownerDocument.defaultView.getComputedStyle(node, null);
-      }
-      return node.currentStyle || {};
-    };
-
-    var log = function(msg) {
-      if (typeof(console) !== 'undefined' && console.log) {
-        console.log(msg);
-      }
-    };
-
-    var compose = function(funs) {
-      var args = Array.prototype.slice.call(funs).reverse();
-      return function(input) {
-        var r = input;
-        for (var i = 0; i < args.length; i++) {
-          var fun = args[i];
-          r = fun(r);
-        }
-        return r;
-      };
-    };
-
-    var extend = function(obj) {
-      tinymce.each(Array.prototype.slice.call(arguments, 1), function(element){
-        for (var prop in element) {
-          obj[prop] = element[prop];
-        }
-      });
-      return obj;
-    };
-
-    return {
-      each: tinymce.each,
-      trim: tinymce.trim,
-      bind: bind,
-      extend: extend,
-      ephoxGetComputedStyle: ephoxGetComputedStyle,
-      log: log,
-      compose: compose
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-/**
- * Source code in this file has been taken under a commercial license from tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
- * Copyright 2009, Moxiecode Systems AB
- */
-define(
-  'ephox.powerpaste.legacy.tinymce.Clipboard',
-
-  [
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Util) {
-    var each = tinymce.each;
-    // Note that there is only ever one instance of this module - it's not created specifically for each editor.
-
-    // Private function that does the actual work of grabbing the clipboard content.
-    // This can then be shared between the onpaste and onKeyDown listeners.
-    var grabContent = function(ed, callback, e) {
-      var n, or, rng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY;
-
-          // Check if browser supports direct plaintext access
-          if (e.clipboardData && e.clipboardData.getData('text/html')) {
-              e.preventDefault();
-              var data = e.clipboardData.getData('text/html');
-              var matched = data.match(/<html[\s\S]+<\/html>/i);
-              // some browsers such as firefox don't wrap the content in a html tag
-              var content = matched === null ? data : matched[0];
-              return callback(content);
-          }
-
-          if (dom.get('_mcePaste'))
-              return;
-
-          // Create container to paste into
-          n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste'}, '\uFEFF<br _mce_bogus="1">');
-
-          // If contentEditable mode we need to find out the position of the closest element
-          if (body != ed.getDoc().body)
-              posY = dom.getPos(ed.selection.getStart(), body).y;
-          else
-            posY = body.scrollTop;
-
-          // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles
-          dom.setStyles(n, {
-              position : 'absolute',
-              left : -10000,
-              top : posY,
-              width : 1,
-              height : 1,
-              overflow : 'hidden'
-          });
-
-          if (tinymce.isIE) {
-              // Select the container
-              rng = dom.doc.body.createTextRange();
-              rng.moveToElementText(n);
-              rng.execCommand('Paste');
-
-              // Remove container
-              dom.remove(n);
-
-              // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due
-              // to IE security settings so we pass the junk though better than nothing right
-              if (n.innerHTML === '\uFEFF') {
-                  ed.execCommand('mcePasteWord');
-                  e.preventDefault();
-                  return;
-              }
-
-              // Process contents
-              callback(n.innerHTML);
-
-              // Block the real paste event
-              return tinymce.dom.Event.cancel(e);
-          } else {
-              var block = function(e) {
-                  e.preventDefault();
-              };
-
-              // Block mousedown and click to prevent selection change
-              dom.bind(ed.getDoc(), 'mousedown', block);
-              dom.bind(ed.getDoc(), 'keydown', block);
-
-              // If pasting inside the same element and the contents is only one block
-              // remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element
-              if (tinymce.isGecko) {
-                  rng = ed.selection.getRng(true);
-                  if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) {
-                      nodes = dom.select('p,h1,h2,h3,h4,h5,h6,pre', n);
-
-                      if (nodes.length == 1)
-                          dom.remove(nodes.reverse(), true);
-                  }
-              }
-
-              or = ed.selection.getRng();
-
-              // Move caret into hidden div
-              n = n.firstChild;
-              rng = ed.getDoc().createRange();
-              rng.setStart(n, 0);
-              rng.setEnd(n, 1);
-              sel.setRng(rng);
-
-              // Wait a while and grab the pasted contents
-              window.setTimeout(function() {
-                  var h = '', nl = dom.select('div.mcePaste');
-
-                  // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string
-                  Util.each(nl, function(n) {
-                      var child = n.firstChild;
-
-                      // WebKit inserts a DIV container with lots of odd styles
-                      if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {
-                          dom.remove(child, 1);
-                      }
-
-                      // WebKit duplicates the divs so we need to remove them
-                      Util.each(dom.select('div.mcePaste', n), function(n) {
-                          dom.remove(n, 1);
-                      });
-
-                      // Remove apply style spans
-                      Util.each(dom.select('span.Apple-style-span', n), function(n) {
-                          dom.remove(n, 1);
-                      });
-
-                      // Remove bogus br elements
-                      Util.each(dom.select('br[_mce_bogus]', n), function(n) {
-                          dom.remove(n);
-                      });
-
-                      h += n.innerHTML;
-                  });
-
-                  // Remove the nodes
-                  Util.each(nl, function(n) {
-                      dom.remove(n);
-                  });
-
-                  // Restore the old selection
-                  if (or)
-                      sel.setRng(or);
-
-                  callback(h);
-
-                  // Unblock events ones we got the contents
-                  dom.unbind(ed.getDoc(), 'mousedown', block);
-                  dom.unbind(ed.getDoc(), 'keydown', block);
-              }, 0);
-          }
-    };
-
-    /** Creates the function to attach to the onpaste event so that the pasted content can be intercepted.
-     *
-     * The returned function should capture the pasted content and pass it as the argument to the provided callback function.
-     *
-     * @param ed the editor this function is for.
-     * @param callback the function to call with the clipboard content as the argument
-     */
-    var getOnPasteFunction = function(ed, callback) {
-      return function(e) {
-        grabContent(ed, callback, e);
-      };
-    };
-
-    /** Creates the function to attach to the onKeyDown event so that the pasted content can be intercepted. If no onKeyDown function is required in the current browser
-     * this should return null.
-     *
-     * The returned function should capture the pasted content and pass it as the argument to the provided callback function.
-     *
-     * @param ed the editor this function is for.
-     * @param callback the function to call with the clipboard content as the argument
-     */
-    var getOnKeyDownFunction = function(ed, callback) {
-      return function(e) {
-              // Is it's Opera or older FF use key handler
-              if (tinymce.isOpera || navigator.userAgent.indexOf('Firefox/2') > 0) {
-                  if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
-                      grabContent(ed, callback, e);
-        }
-      };
-    };
-
-    return {
-      getOnPasteFunction: getOnPasteFunction,
-      getOnKeyDownFunction: getOnKeyDownFunction
-    };
-  });
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.data.Insert',
-
-  [
-
-  ],
-
-  function () {
-    var insert = function(fragment, editor) {
-      var document = editor.getDoc(), marker, markerId = "ephoxInsertMarker", selection = editor.selection, dom = editor.dom;
-      selection.setContent('<span id="' + markerId + '">&nbsp;</span>');
-      marker = dom.get(markerId);
-      var leadingText = document.createDocumentFragment();
-      while (fragment.firstChild && !dom.isBlock(fragment.firstChild)) {
-        leadingText.appendChild(fragment.firstChild);
-      }
-      var trailingText = document.createDocumentFragment();
-      while (fragment.lastChild && !dom.isBlock(fragment.lastChild)) {
-        trailingText.appendChild(fragment.lastChild);
-      }
-
-      marker.parentNode.insertBefore(leadingText, marker);
-      dom.insertAfter(trailingText, marker);
-
-      if (fragment.firstChild) {
-        if (dom.isBlock(fragment.firstChild)) {
-          while (!dom.isBlock(marker.parentNode) && marker.parentNode !== dom.getRoot()) {
-            marker = dom.split(marker.parentNode, marker);
-          }
-          if (!dom.is(marker.parentNode, 'td,th') && marker.parentNode !== dom.getRoot()) {
-            marker = dom.split(marker.parentNode, marker);
-          }
-        }
-
-        dom.replace(fragment, marker);
-      } else {
-        dom.remove(marker);
-      }
-    };
-
-    return {
-      insert: insert
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.tinymce.Settings',
-
-  [
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Util) {
-    var settings_clean = {
-      strip_class_attributes: 'all',
-      retain_style_properties: 'none'
-    };
-
-    var settings_inline = {
-      strip_class_attributes: 'none',
-      retain_style_properties: 'valid'
-    };
-
-    var getImportSettings = function(pasteType, defaultSettings) {
-      if (pasteType && typeof(pasteType) != 'string') {
-        return pasteType;
-      }
-
-      switch (pasteType) {
-        case 'clean': return settings_clean;
-        case 'merge': return settings_inline;
-        default: return defaultSettings;
-      }
-    };
-
-    var getSettingsFor = function(pasteWordAs, pasteHtmlAs, base64Images) {
-      var s = getImportSettings(pasteWordAs, pasteHtmlAs);
-      s = Util.extend(s, {base_64_images: base64Images});
-      return s;
-    };
-
-    var create = function(pasteWordAs, pasteHtmlAs, base64Images) {
-      var wordSettings = getSettingsFor(pasteWordAs, settings_clean, base64Images);
-      var htmlSettings = getSettingsFor(pasteHtmlAs, settings_inline, base64Images);
-
-      var activeSettings = htmlSettings;
-
-      var setWordContent = function(wordContent) {
-        activeSettings = wordContent ? wordSettings : htmlSettings;
-      };
-
-      var get = function(name) {
-        return activeSettings[name];
-      };
-      return {
-        setWordContent: setWordContent,
-        get: get
-      };
-    };
-
-    return {
-      create: create
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.data.tokens.Attributes',
-
-  [
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Util) {
-    var isAttrSpecified = function(attr) {
-      return attr.specified !== false || (attr.nodeName === 'name' && attr.value !== '');
-    };
-
-    var combineFilters = function(filter1, filter2) {
-      if (!filter1 || !filter2) {
-        return filter1 || filter2;
-      }
-      return function(name, value) {
-        return filter2(name, filter1(name, value));
-      };
-    };
-
-    var manager = function(node) {
-      var attributeCount = 0;
-      var attributes;
-      var getCachedAttributes = function() {
-        return attributes;
-      };
-
-      var getAttributeMutableFunction;
-      var getAttributes = function() {
-        return getAttributeMutableFunction();
-      };
-
-      getAttributeMutableFunction = function() {
-        attributes = {};
-        attributeCount = 0;
-        // Load from native.
-        Util.each(node.attributes, function(attr) {
-          var name = attr.nodeName, value = attr.value;
-          if (isAttrSpecified(attr)) {
-            if (value !== null && value !== undefined) {
-              attributes[name] = value;
-              attributeCount++;
-            }
-          }
-        });
-        if (attributes.style === undefined && node.style.cssText) {
-          attributes.style = node.style.cssText;
-          attributeCount++;
-        }
-        getAttributeMutableFunction = getCachedAttributes;
-        return attributes;
-      };
-
-      var getAttributeCount = function() {
-        getAttributeMutableFunction();
-        return attributeCount;
-      };
-
-      var unappliedFilter;
-      var unfilteredGetAttributes;
-
-      var filter = function(f) {
-        if (!unappliedFilter) {
-          unfilteredGetAttributes = getAttributeMutableFunction;
-        }
-
-        unappliedFilter = combineFilters(unappliedFilter, f);
-        // Defer applying the filter until we absolutely have to.
-        getAttributeMutableFunction = function() {
-          getAttributeMutableFunction = unfilteredGetAttributes;
-          eachAttribute(function(name, value) {
-            var newValue = unappliedFilter(name, value);
-            if (newValue === null) {
-              node.removeAttribute(name);
-              delete attributes[name];
-              attributeCount--;
-            } else if (newValue !== value) {
-              if (name === 'class') {
-                node.className = newValue;
-              } else {
-                node.setAttribute(name, newValue);
-              }
-              attributes[name] = newValue;
-            }
-          });
-          getAttributeMutableFunction = getCachedAttributes;
-          return attributes;
-        };
-      };
-
-      var get = function(name) {
-        return getAttributeMutableFunction()[name];
-      };
-
-      var eachAttribute = function(callback) {
-        Util.each(getAttributeMutableFunction(), function(value, name) {
-          callback(name, value);
-        });
-      };
-
-      return {
-        get: get,
-        each: eachAttribute,
-        filter: filter,
-        getAttributes: getAttributes,
-        getAttributeCount: getAttributeCount
-      };
-    };
-    return {
-      manager: manager
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.data.tokens.Token',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Attributes',
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Attributes, Util, TokenTypes) {
-    var START_ELEMENT_TYPE = 'startElement';
-    var END_ELEMENT_TYPE = 'endElement';
-    var TEXT_TYPE = 'text';
-    var COMMENT_TYPE = 'comment';
-
-    var attributeManager = Attributes.manager;
-
-    /**
-     * Converts a style name from the CSS version (e.g. text-align) to the
-     * DOM property equivalent (textAlign).
-     *
-     * @param name the style name to convert.
-     * @returns the style name in DOM form.
-     */
-    var convertStyleName = function(name) {
-      return name.replace(/-(.)/g, function(regex, capture) {
-        return capture.toUpperCase();
-      });
-    };
-
-    /**
-     * Converts a style name from the DOM version (e.g. textAlign) to the
-     * CSS equivalent (text-align). This is the reverse of convertStyleName.
-     *
-     * @param name the style name to convert.
-     * @returns the style name in CSS form.
-     */
-    var convertStyleNameBack = function(name) {
-      return name.replace(/([A-Z])/g, function(regex, capture) {
-        return '-' + capture.toLowerCase();
-      });
-    };
-
-    // This is shared across all instances because if we ever see an mso- style in the normal iteration
-    // we can be certain they are included and don't need the extra check.
-    var seenMsoStyle = false;
-    var eachNativeStyle = function(node, syntheticStyles, callback) {
-      var i, len = node.style.length, name, value, styles;
-      styles = syntheticStyles || node.getAttribute("style");
-      if (styles === undefined || styles === null || !styles.split) {
-        styles = node.style.cssText;
-      }
-      Util.each(styles.split(';'), function(declaration) {
-        var idx = declaration.indexOf(':');
-        if (idx > 0) {
-          name = Util.trim(declaration.substring(0, idx));
-          if (name.toUpperCase() === name) {
-            name = name.toLowerCase();
-          }
-          name = convertStyleNameBack(name);
-          value = Util.trim(declaration.substring(idx + 1));
-          if (!seenMsoStyle) seenMsoStyle = name.indexOf('mso-') === 0;
-          callback(name, value);
-        }
-      });
-      if (!seenMsoStyle) {
-        // IE9 preserves unknown styles but provides no way to iterate them.
-        // To deal with that, we look for the specific custom styles we care about.
-        value = node.style['mso-list'];
-        if (value) {
-          callback('mso-list', value);
-        }
-      }
-    };
-
-    var token = function(node, endNode, syntheticStyles) {
-      var tokenType;
-      var tagName;
-      var tokenText;
-      var attributeStore;
-      var tokenStyles;
-      switch (node.nodeType) {
-        case 1:
-          if (endNode) {
-            tokenType = END_ELEMENT_TYPE;
-          } else {
-            tokenType = START_ELEMENT_TYPE;
-            attributeStore = attributeManager(node);
-
-            tokenStyles = {};
-            eachNativeStyle(node, syntheticStyles, function(name, value) {
-              tokenStyles[name] = value;
-            });
-          }
-          if (node.scopeName !== "HTML" && node.scopeName && node.tagName && node.tagName.indexOf(':') <= 0) {
-            tagName = (node.scopeName + ":" + node.tagName).toUpperCase();
-          } else {
-            tagName = node.tagName;
-          }
-
-          break;
-        case 3:
-          tokenType = TEXT_TYPE;
-          tokenText = node.nodeValue;
-          break;
-        case 8:
-          tokenType = COMMENT_TYPE;
-          tokenText = node.nodeValue;
-          break;
-        default:
-          Util.log("WARNING: Unsupported node type encountered: " + node.nodeType);
-          break;
-      }
-
-      var getNode = function() {
-        // Make sure all filters are applied.
-        if (attributeStore) attributeStore.getAttributes();
-        return node;
-      };
-
-      var tag = function() {
-        return tagName;
-      };
-
-      var type = function() {
-        return tokenType;
-      };
-
-      var text = function() {
-        return tokenText;
-      };
-
-      var toString = function() {
-        return "Type: " + tokenType + ", Tag: " + tagName + " Text: " + tokenText;
-      };
-
-      var getAttribute = function(name) {
-        return attributeStore.get(name.toLowerCase());
-      };
-
-      var filterAttributes = function(filter) {
-        if (tokenType === START_ELEMENT_TYPE) {
-          attributeStore.filter(filter);
-        }
-      };
-
-      var filterStyles = function(filter) {
-        if (type() === START_ELEMENT_TYPE) {
-          var css = "";
-          Util.each(tokenStyles, function(value, name) {
-            var newValue = filter(name, value);
-            if (newValue === null) {
-              if (node.style.removeProperty) {
-                node.style.removeProperty(convertStyleName(name));
-              } else {
-                node.style.removeAttribute(convertStyleName(name));
-              }
-              delete tokenStyles[name];
-            } else {
-              css += name + ': ' + newValue + '; ';
-              tokenStyles[name] = newValue;
-            }
-          });
-          css = css ? css : null;
-          filterAttributes(function(name, value) {
-            if (name === 'style') {
-              return css;
-            }
-            return value;
-          });
-          node.style.cssText = css;
-        }
-      };
-
-      var getAttributeCount = function() {
-        return attributeStore.getAttributeCount();
-      };
-
-      var attributes = function(callback) {
-        attributeStore.each(callback);
-      };
-
-      var getStyle = function(name) {
-        return tokenStyles[name];
-      };
-
-      var styles = function(callback) {
-        Util.each(tokenStyles, function(value, name) {
-          callback(name, value);
-        });
-      };
-
-      var getComputedStyle = function() {
-        return Util.ephoxGetComputedStyle(node);
-      };
-
-      var isWhitespace = function() {
-        return tokenType === TEXT_TYPE &&  /^[\s\u00A0]*$/.test(tokenText);
-      };
-
-      return {
-        getNode: getNode,
-        tag: tag,
-        type: type,
-        text: text,
-        toString: toString,
-        getAttribute: getAttribute,
-        filterAttributes: filterAttributes,
-        filterStyles: filterStyles,
-        getAttributeCount: getAttributeCount,
-        attributes: attributes,
-        getStyle: getStyle,
-        styles: styles,
-        getComputedStyle: getComputedStyle,
-        isWhitespace: isWhitespace
-      };
-    };
-
-    var createStartElement = function(tag, attributes, styles, document) {
-      var node = document.createElement(tag), css = "";
-      Util.each(attributes, function(value, name) {
-        node.setAttribute(name, value);
-      });
-      Util.each(styles, function(value, name) {
-        css += name + ":" + value + ";";
-        node.style[convertStyleName(name)] = value;
-      });
-      return token(node, false, css !== "" ? css : null);
-    };
-
-    var createEndElement = function(tag, document) {
-      return token(document.createElement(tag), true);
-    };
-
-    var createComment = function(text, document) {
-      return token(document.createComment(text), false);
-    };
-
-    var createText = function(text, document) {
-      return token(document.createTextNode(text));
-    };
-
-    var FINISHED = createEndElement('HTML', window.document);
-
-    return {
-      START_ELEMENT_TYPE: START_ELEMENT_TYPE,
-      END_ELEMENT_TYPE: END_ELEMENT_TYPE,
-      TEXT_TYPE: TEXT_TYPE,
-      COMMENT_TYPE: COMMENT_TYPE,
-      FINISHED: FINISHED,
-      token: token,
-      createStartElement: createStartElement,
-      createEndElement: createEndElement,
-      createComment: createComment,
-      createText: createText
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.data.tokens.Serializer',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Token) {
-    var create = function(document) {
-      var currentNode = document.createDocumentFragment();
-      var initialNode = currentNode;
-
-      var push = function(node) {
-        append(node);
-        currentNode = node;
-      };
-
-      var pop = function() {
-        currentNode = currentNode.parentNode;
-      };
-
-      var append = function(node) {
-        currentNode.appendChild(node);
-      };
-
-      var receive = function(token) {
-
-        var startElement = function(token) {
-          var node = token.getNode().cloneNode(false);
-          push(node);
-        };
-
-        var text = function(token, serializer) {
-          // IE7 will crash if you clone a text node that's a URL.
-          // IE8 throws an invalid argument error.
-          // So while cloning may be faster, we have to create a new node here.
-          var node = document.createTextNode(token.text());
-          append(node);
-        };
-
-        switch (token.type()) {
-          case Token.START_ELEMENT_TYPE:
-            startElement(token);
-            break;
-          case Token.TEXT_TYPE:
-            text(token);
-            break;
-          case Token.END_ELEMENT_TYPE:
-            pop();
-            break;
-          case Token.COMMENT_TYPE:
-            // Ignore.
-            break;
-          default:
-            throw { message: 'Unsupported token type: ' + token.type() };
-        }
-      };
-
-      return {
-        dom: initialNode,
-        receive: receive
-      };
-    };
-
-    return {
-      create: create
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.data.tokens.Tokenizer',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Token) {
-    var tokenize = function(html, document) {
-      var container;
-      document = document || window.document;
-      container = document.createElement('div');
-      document.body.appendChild(container);
-      container.style.position = 'absolute';
-      container.style.left = '-10000px';
-      container.innerHTML = html;
-
-      nextNode = container.firstChild || Token.FINISHED;
-
-      var nodeStack = [];
-      endNode = false;
-
-      var getTokenForNode = function(node, endTag) {
-        if (node === Token.FINISHED) {
-          return node;
-        } else if (node) {
-          return Token.token(node, endTag);
-        } else {
-          return undefined;
-        }
-      };
-
-      var next = function() {
-        var currentNode = nextNode;
-        var currentEndNode = endNode;
-        if (!endNode && nextNode.firstChild) {
-          nodeStack.push(nextNode);
-          nextNode = nextNode.firstChild;
-        } else if (!endNode && nextNode.nodeType === 1) {
-          // Empty element.
-          endNode = true;
-        } else if (nextNode.nextSibling) {
-          nextNode = nextNode.nextSibling;
-          endNode = false;
-        } else {
-          nextNode = nodeStack.pop();
-          endNode = true;
-        }
-
-        if (currentNode !== Token.FINISHED && !nextNode) {
-          document.body.removeChild(container);
-          nextNode = Token.FINISHED;
-        }
-
-        return getTokenForNode(currentNode, currentEndNode);
-      };
-
-      var hasNext = function() {
-        return nextNode !== undefined;
-      };
-
-      return {
-        hasNext: hasNext,
-        next: next
-      };
-    };
-
-    return {
-      tokenize: tokenize
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.data.tokens.Filter',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Token',
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Token, Util) {
-
-    var createFilter = function(actualReceiver, clientReset) {
-      var filter = function(nextFilter, settings, document) {
-        var deferred;
-        var receivedTokens, emittedTokens, inTransaction = false;
-
-        var resetState = function() {
-          if (clientReset) clientReset(api);
-          inTransaction = false;
-          receivedTokens = [];
-          emittedTokens = [];
-        };
-
-        var emitTokens = function(tokens) {
-          Util.each(tokens, function(tok) {
-            nextFilter.receive(tok);
-          });
-        };
-
-        var emit = function(token) {
-          if (inTransaction) {
-            emittedTokens.push(token);
-          } else {
-            nextFilter.receive(token);
-          }
-        };
-
-        var receive = function(token) {
-          if (clientReset) receivedTokens.push(token);
-          actualReceiver(api, token);
-          if (token === Token.FINISHED) {
-            commit();
-          }
-        };
-
-        var startTransaction = function() {
-          inTransaction = true;
-        };
-
-        var rollback = function() {
-          emitTokens(receivedTokens);
-          resetState();
-        };
-
-        var commit = function() {
-          emitDeferred();
-          emitTokens(emittedTokens);
-          resetState();
-        };
-
-        var defer = function(token) {
-          deferred = deferred || [];
-          deferred.push(token);
-        };
-
-        var hasDeferred = function() {
-          return deferred && deferred.length > 0;
-        };
-
-        var emitDeferred = function() {
-          Util.each(deferred, function(token) {
-            emit(token);
-          });
-          dropDeferred();
-        };
-
-        var dropDeferred = function() {
-          deferred = [];
-        };
-
-        var api = {
-          document: document || window.document,
-          settings: settings || {},
-          emit: emit,
-          receive: receive,
-          startTransaction: startTransaction,
-          rollback: rollback,
-          commit: commit,
-          defer: defer,
-          hasDeferred: hasDeferred,
-          emitDeferred: emitDeferred,
-          dropDeferred: dropDeferred
-        };
-
-        resetState();
-        return api;
-      };
-      return filter;
-    };
-
-    var createAttributeFilter = function(filter) {
-      return createFilter(function(api, token) {
-        token.filterAttributes(Util.bind(filter, api));
-        api.emit(token);
-      });
-    };
-
-    return {
-      createFilter: createFilter,
-      createAttributeFilter: createAttributeFilter
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.Text',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter',
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Filter, Token) {
-    var lineBreakElements = /^(P|H[1-6]|T[DH]|LI|DIV|BLOCKQUOTE|PRE|ADDRESS|FIELDSET|DD|DT|CENTER)$/;
-    var causesLinebreak = function(token) {
-      return lineBreakElements.test(token.tag());
-    };
-    var removeFilter = function() {
-      return null;
-    };
-
-    var inP = false;
-
-    return Filter.createFilter(function(api, token) {
-      var ensureInP = function() {
-        if (!inP) {
-          api.emit(Token.createStartElement('P', {}, {}, api.document));
-          inP = true;
-        }
-      };
-      switch (token.type()) {
-        case Token.TEXT_TYPE:
-          ensureInP();
-          api.emit(token);
-          break;
-        case Token.END_ELEMENT_TYPE:
-          if (inP && (causesLinebreak(token) || token === Token.FINISHED)) {
-            api.emit(Token.createEndElement('P', api.document));
-            inP = false;
-          } else if (token.tag() === 'BR') {
-            api.emit(token);
-          }
-          break;
-        case Token.START_ELEMENT_TYPE:
-          if (token.tag() === 'BR') {
-            token.filterAttributes(removeFilter);
-            token.filterStyles(removeFilter);
-            api.emit(token);
-          } else if (token.tag() === 'IMG' && token.getAttribute('alt')) {
-            ensureInP();
-            api.emit(Token.createText(token.getAttribute('alt'), api.document));
-          }
-          break;
-      }
-      if (token === Token.FINISHED) {
-        api.emit(token);
-      }
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.data.tokens.Helper',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Token) {
-    var checkSupportsCustomStyles = function() {
-      // Firefox 4 preserves these styles in the DOM, but strips them when pasting.
-      // Since we can't trigger a paste there's no way to detect this situation apart from sniffing.
-      if (navigator.userAgent.indexOf('Gecko') > 0 && navigator.userAgent.indexOf('WebKit') < 0) return false;
-      var div = document.createElement('div');
-      try {
-        div.innerHTML = '<p style="mso-list: Ignore;">&nbsp;</p>';
-      } catch (ex) {
-        // Can't set innerHTML if we're in XHTML mode so just assume we don't get custom styles.
-        return false;
-      }
-      return Token.token(div.firstChild).getStyle('mso-list') === 'Ignore';
-    };
-
-    var supportsCustomStyles = checkSupportsCustomStyles();
-
-    var spanOrA = function(token) {
-      return token.tag() === 'A' || token.tag() === 'SPAN';
-    };
-
-    var hasMsoListStyle = function(token) {
-      var style = token.getStyle('mso-list');
-      return style && style !== 'skip';
-    };
-
-    var hasNoAttributes = function(token, allowStyle) {
-      if (token.type() === Token.START_ELEMENT_TYPE) {
-        return token.getAttributeCount() === 0 ||
-          (allowStyle && token.getAttributeCount() === 1 &&
-            (token.getAttribute('style') !== null && token.getAttribute('style') !== undefined));
-      } else {
-        return token.type() === Token.END_ELEMENT_TYPE;
-      }
-    };
-
-    return {
-      hasNoAttributes: hasNoAttributes,
-      supportsCustomStyles: supportsCustomStyles,
-      spanOrA: spanOrA,
-      hasMsoListStyle: hasMsoListStyle
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.list.ListTypes',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Token',
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Token, Util) {
-    var orderedListTypes = [
-        { regex: /^\(?[dc][\.\)]$/, type: { tag: 'OL', type: 'lower-alpha' } },
-        { regex: /^\(?[DC][\.\)]$/, type: { tag: 'OL', type: 'upper-alpha' } },
-      { regex: /^\(?M*(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})[\.\)]$/, type: { tag: 'OL', type: 'upper-roman' } },
-      { regex: /^\(?m*(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})[\.\)]$/, type: { tag: 'OL', type: 'lower-roman' } },
-      { regex: /^\(?[0-9]+[\.\)]$/, type: { tag: 'OL' } },
-      { regex: /^([0-9]+\.)*[0-9]+\.?$/, type: { tag: 'OL', variant: 'outline' } },
-      { regex: /^\(?[a-z]+[\.\)]$/, type: { tag: 'OL', type: 'lower-alpha' } },
-      { regex: /^\(?[A-Z]+[\.\)]$/, type: { tag: 'OL', type: 'upper-alpha' } }
-    ];
-
-    var ulChars = {
-      '\u2022': { tag: 'UL', type: 'disc' },
-      '\u00B7': { tag: 'UL', type: 'disc' },
-      '\u00A7': { tag: 'UL', type: 'square' }
-    };
-
-    var ulNonSymbolChars = {
-      'o': { tag: 'UL', type: 'circle' },
-      '-': { tag: 'UL', type: 'disc' },
-      '\u25CF': { tag: 'UL', type: 'disc' }
-    };
-
-    var createVariant = function(type, variant) {
-      var newType = { tag: type.tag, type: type.type, variant: variant };
-      if (type.start){
-        newType.start = type.start;
-      }
-      if (!type.type) delete newType.type;
-      return newType;
-    };
-
-    var guessListType = function(bulletInfo, preferredType, originalToken) {
-      var listType = null, text, symbolFont, variant;
-      if (bulletInfo) {
-        text = bulletInfo.text;
-        symbolFont = bulletInfo.symbolFont;
-      }
-      text = Util.trim(text);
-
-      listType = ulNonSymbolChars[text];
-      if (!listType) {
-        if (symbolFont) {
-          listType = ulChars[text];
-          if (!listType) {
-            listType = { tag: 'UL', variant: text };
-          } else {
-            listType = createVariant(listType, text);
-          }
-        } else {
-
-          Util.each(orderedListTypes, function(def) {
-            if (def.regex.test(text)) {
-              if (preferredType && eqListType(def.type, preferredType, true)) {
-                listType = def.type;
-                listType.start=parseInt(text);
-                return false;
-              }
-              if (!listType) listType = def.type;
-              listType.start=parseInt(text);
-            }
-          });
-          if (listType && !listType.variant) {
-            if (text.charAt(0) === '(') variant = '()';
-            else if (text.charAt(text.length - 1) === ')') variant = ')';
-            else variant = '.';
-            listType = createVariant(listType, variant);
-          }
-        }
-      } else {
-        listType = createVariant(listType, text);
-      }
-
-      if (listType && listType.tag === 'OL' &&
-          originalToken && (originalToken.tag() !== 'P' || /^MsoHeading/.test(originalToken.getAttribute('class')))) {
-        // Don't convert numbered headings but do convert bulleted headings.
-        listType = null;
-      }
-
-      return listType;
-    };
-
-    var eqListType = function(t1, t2, ignoreVariant) {
-      return t1 === t2 ||
-        (t1 && t2 && t1.tag === t2.tag && t1.type === t2.type &&
-            (ignoreVariant || t1.variant === t2.variant));
-    };
-
-    var checkFont = function(token, symbolFont) {
-      if (token.type() == Token.START_ELEMENT_TYPE) {
-        font = token.getStyle('font-family');
-        if (font) {
-          symbolFont = (font === 'Wingdings' || font === 'Symbol');
-        } else if (/^(P|H[1-6]|DIV)$/.test(token.tag())) {
-          symbolFont = false;
-        }
-      }
-      return symbolFont;
-    };
-
-    return {
-      guessListType: guessListType,
-      eqListType: eqListType,
-      checkFont: checkFont
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.list.CommentHeuristics',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Token',
-    'ephox.powerpaste.legacy.filters.list.ListTypes',
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Token, ListTypes, Util) {
-    var isListWithoutCommentsOrStyles = function(token, state) {
-      var indent, cls, node, symbolFont = false, value, listType;
-      var checkFont = function(n) {
-        var font = n.style.fontFamily;
-        if (font) {
-          symbolFont = (font === 'Wingdings' || font === 'Symbol');
-        }
-      };
-      if (token.type() === Token.START_ELEMENT_TYPE && state.openedTag && token.tag() === 'SPAN') {
-        node = state.openedTag.getNode();
-        checkFont(node);
-        if (node.childNodes.length > 1 && node.firstChild.tagName === 'A' && node.firstChild.textContent === '') {
-          node = node.childNodes[1];
-        }
-        while (node.firstChild && (node.firstChild.tagName === 'SPAN' || node.firstChild.tagName === 'A')) {
-          node = node.firstChild;
-          checkFont(node);
-        }
-        node = node.firstChild;
-        if (node && node.nodeType === 3) {
-          value = node.value;
-          if (!Util.trim(value)) {
-            // This handles the case where there's a SPAN with nbsps before the bullet such as with roman numerals.
-            node = node.parentNode.nextSibling;
-            value = node ? node.value : '';
-          }
-          // Real lists have the bullet with NBSPs either side surrounded in a SPAN.  If there's anything else, it's not a list.
-          if (!node || Util.trim(node.parentNode.textContent) != value) {
-            return false;
-          }
-          listType = ListTypes.guessListType({ text: value, symbolFont: symbolFont }, null, state.originalToken);
-          if (listType) {
-            // Don't convert numbered headings to lists.
-            return node.nextSibling && node.nextSibling.tagName === 'SPAN' && /^[\u00A0\s]/.test(node.nextSibling.firstChild.value) &&
-                (state.openedTag.tag() === 'P' || listType.tag === 'UL');
-          }
-        } else {
-          return node && node.tagName === 'IMG';
-        }
-      }
-      return false;
-    };
-
-
-    var getLeftOffset = function(node, paragraph) {
-      var parent, child, offset = 0;
-      parent = node.parentNode;
-      while (parent !== null && parent !== undefined && parent !== paragraph.parentNode) {
-        offset += parent.offsetLeft;
-        parent = parent.offsetParent;
-      }
-      return offset;
-    };
-
-    /** A simplified memoize function which only supports one or two function parameters.
-     *
-     * @param fn
-     * @param param the funtion p
-     * @returns
-     */
-    var memoize2 = function(fn) {
-      var cache = {};
-      return function(param1, param2) {
-        var result, key = param1 + "," + param2;
-        if (cache.hasOwnProperty(key)) {
-          return cache[key];
-        }
-        result = fn.call(null, param1, param2);
-        cache[key] = result;
-        return result;
-      };
-    };
-
-    var findStylesInner = function(selector) {
-          var dotIndex = selector.indexOf('.');
-          if (dotIndex >= 0 && Util.trim(selector.substring(dotIndex + 1)) === className) {
-            match = results[2];
-            return false;
-          }
-        };
-
-    var findStyles = memoize2(function(css, className) {
-      var results, matcher = /([^{]+){([^}]+)}/g, match, el, computedStyle;
-      matcher.lastIndex = 0; // Firefox Mac reuses the same regex so we need to reset it.
-      while ((results = matcher.exec(css)) !== null && !match) {
-        Util.each(results[1].split(','), findStylesInner(selector)
-        );
-      }
-      if (match) {
-        el = document.createElement('p');
-        el.setAttribute("style", match);
-        computedStyle = Util.ephoxGetComputedStyle(el);
-        return computedStyle ? "" + computedStyle.marginLeft : false;
-      }
-      return false;
-    });
-
-    var indentGuesser = function() {
-      var listIndentAdjust;
-      var listIndentAmount;
-      var guessIndentLevel = function(currentToken, token, styles, bulletInfo) {
-        var indentAmount, itemIndent, el, level = 1;
-
-        if (bulletInfo && /^([0-9]+\.)+[0-9]+\.?$/.test(bulletInfo.text)) {
-          // Outline list type so we can just count the number of sections.
-          return bulletInfo.text.replace(/([0-9]+|\.$)/g, '').length + 1;
-        }
-        indentAmount = listIndentAmount || parseInt(findStyles(styles, token.getAttribute('class')));
-
-        itemIndent = getLeftOffset(currentToken.getNode(), token.getNode());
-        if (!indentAmount) {
-          indentAmount = 48;
-        } else {
-          // We might get a 0 item indent if the list CSS code wasn't pasted as happens on Windows.
-          if (listIndentAdjust) {
-            itemIndent += listIndentAdjust;
-          } else if (itemIndent === 0) {
-            listIndentAdjust = indentAmount;
-            itemIndent += indentAmount;
-          }
-        }
-        listIndentAmount = indentAmount = Math.min(itemIndent, indentAmount);
-        level = Math.max(1, Math.floor(itemIndent / indentAmount)) || 1;
-        return level;
-      };
-      return {
-        guessIndentLevel: guessIndentLevel
-      };
-    };
-
-    var styles = function() {
-      var inStyle = false;
-      var styles = "";
-      var check = function(token) {
-        if (inStyle && token.type() === Token.TEXT_TYPE) {
-          styles += token.text();
-          return true;
-        } else if (token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'STYLE') {
-          inStyle = true;
-          return true;
-        } else if (token.type() === Token.END_ELEMENT_TYPE && token.tag() === 'STYLE') {
-          inStyle = false;
-          return true;
-        }
-        return false;
-      };
-      return {
-        check: check
-      };
-    };
-
-    return {
-      isListWithoutCommentsOrStyles: isListWithoutCommentsOrStyles,
-      indentGuesser: indentGuesser,
-      styles: styles
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.list.Emitter',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Token',
-    'ephox.powerpaste.legacy.filters.list.ListTypes'
-  ],
-
-  function (Token, ListTypes) {
-    var impliedULatLevel = [ 'disc', 'circle', 'square' ];
-
-    var removeImpliedListType = function(type, level) {
-      if (type.tag === 'UL') {
-        if (impliedULatLevel[level - 1] === type.type) {
-          type = { tag: 'UL' };
-        }
-      }
-      return type;
-    };
-
-    return function(api, document) {
-      var listTypes = [];
-      var itemTags = [];
-      var currentLevel = 0;
-      var currentListType;
-
-      var openList = function(type, useType) {
-        var style = {}, attributes={};
-        currentLevel++;
-        if (useType) {
-          if (type.type) {
-            style = { 'list-style-type': type.type };
-          }
-        }
-        if (type.start && type.start>1) {
-          attributes={start:type.start};
-        }
-        listTypes.push(type);
-        api.emit(Token.createStartElement(type.tag, attributes, style, document));
-        currentListType = type;
-      };
-
-      var closeList = function() {
-        api.emit(Token.createEndElement(listTypes.pop().tag, document));
-        currentLevel--;
-        currentListType = listTypes[listTypes.length - 1];
-      };
-
-      var closeAllLists = function() {
-        while (currentLevel > 0) {
-          closeItem();
-          closeList();
-        }
-        api.commit();
-      };
-
-      var closeItem = function() {
-        var tag = itemTags ? itemTags.pop() : 'P';
-        if (tag != 'P') {
-          api.emit(Token.createEndElement(tag, document));
-        }
-        api.emit(Token.createEndElement('LI', document));
-      };
-
-      var openLI = function(paragraphToken, type, skippedPara) {
-        var style = {};
-        if (!paragraphToken) {
-          style['list-style-type'] = 'none';
-        } else {
-          var leftMargin = paragraphToken.getStyle('margin-left');
-          if (leftMargin !== undefined) {
-            style['margin-left'] = leftMargin;
-          }
-        }
-        if (currentListType && !ListTypes.eqListType(currentListType, type)) {
-          closeList();
-          if (skippedPara) {
-            api.emit(Token.createStartElement('P', {}, {}, document));
-            api.emit(Token.createText('\u00A0', document));
-            api.emit(Token.createEndElement('P', document));
-          }
-          openList(type, true);
-        }
-        api.emit(Token.createStartElement('LI', {}, style, document));
-        if (paragraphToken && paragraphToken.tag() != 'P') {
-          itemTags.push(paragraphToken.tag());
-          paragraphToken.filterStyles(function() { return null; });
-          api.emit(paragraphToken);
-        } else {
-          itemTags.push('P');
-        }
-      };
-
-      var openItem = function(level, paragraphToken, type, skippedPara) {
-        var style = {}, token;
-        if (!type) return;
-        if (!currentLevel) currentLevel = 0;
-        while (currentLevel > level) {
-          closeItem();
-          closeList();
-        }
-        type = removeImpliedListType(type, level);
-        if (currentLevel == level) {
-          closeItem();
-          openLI(paragraphToken, type, skippedPara);
-        } else {
-          // If there's a heading item we opened in the list we need to close it before creating the indented list
-          if (level > 1 && itemTags.length > 0 && itemTags[itemTags.length - 1] !== 'P') {
-            api.emit(Token.createEndElement(itemTags[itemTags.length - 1], document));
-            itemTags[itemTags.length - 1] = 'P';
-          }
-          while (currentLevel < level) {
-            openList(type, currentLevel == level - 1);
-            openLI(currentLevel == level ? paragraphToken : undefined, type);
-          }
-        }
-      };
-      var getCurrentLevel = function() {
-        return currentLevel;
-      };
-      var getCurrentListType = function() {
-        return currentListType;
-      };
-      return {
-        openList: openList,
-        closelist: closeList,
-        closeAllLists: closeAllLists,
-        closeItem: closeItem,
-        openLI: openLI,
-        openItem: openItem,
-        getCurrentListType: getCurrentListType,
-        getCurrentLevel: getCurrentLevel
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.list.ListStates',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Helper',
-    'ephox.powerpaste.legacy.data.tokens.Token',
-    'ephox.powerpaste.legacy.filters.list.CommentHeuristics',
-    'ephox.powerpaste.legacy.filters.list.ListTypes',
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Helper, Token, CommentHeuristics, ListTypes, Util) {
-    var unexpectedToken = function(api, token) {
-      Util.log("Unexpected token in list conversion: " + token.toString());
-      api.rollback();
-    };
-
-    var preferredListType = function(currentType, currentLevel, newLevel) {
-      if (currentLevel == newLevel) {
-        return currentType;
-      }
-      return null;
-    };
-
-    var afterListState = function(api, state, token) {
-      if (token.type() === Token.TEXT_TYPE && Util.trim(token.text()) === '') {
-        // Drop whitespace that's potentially between list items.
-        api.defer(token);
-      } else if (!state.skippedPara && token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'P' && !Helper.hasMsoListStyle(token)) {
-        state.openedTag = token;
-        api.defer(token);
-        state.nextFilter = skipEmptyParaState;
-      } else {
-        noListState(api, state, token);
-      }
-    };
-
-    var skipEmptyParaState = function(api, state, token) {
-      if (token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'SPAN' && state.spanCount.length === 0 &&
-          (Helper.supportsCustomStyles || !CommentHeuristics.isListWithoutCommentsOrStyles(token, state)) && !Helper.hasMsoListStyle(token)) {
-        api.defer(token);
-        state.spanCount.push(token);
-      } else if (token.type() === Token.END_ELEMENT_TYPE) {
-        if (token.tag() === 'SPAN') {
-          api.defer(token);
-          state.spanCount.pop();
-        } else if (token.tag() === 'P') {
-          api.defer(token);
-          state.skippedPara = true;
-          state.openedTag = null;
-          state.nextFilter = afterListState;
-        } else {
-          // Not an empty paragraph.
-          state.nextFilter = noListState;
-          state.nextFilter(api, state, token);
-        }
-      } else if (token.isWhitespace()) {
-        api.defer(token);
-      } else {
-        state.nextFilter = noListState;
-        state.nextFilter(api, state, token);
-      }
-    };
-
-    var msoListSkipState = function(api, state, token) {
-      if (token.type() === Token.END_ELEMENT_TYPE && token.tag() === state.originalToken.tag()) {
-        state.nextFilter = afterListState;
-      } else if (token === Token.FINISHED) {
-        state.emitter.closeAllLists();
-        api.emit(token);
-      }
-      // Else drop.
-    };
-
-    var noListState = function(api, state, token) {
-      var closeOutLists = function() {
-        state.emitter.closeAllLists();
-        api.emitDeferred();
-        state.openedTag = null;
-        api.emit(token);
-        state.nextFilter = noListState;
-      };
-      if (token.type() === Token.START_ELEMENT_TYPE && Helper.hasMsoListStyle(token) && token.tag() !== 'LI') {
-        var msoList = token.getStyle('mso-list');
-        if (false && msoList === 'skip') {
-          state.nextFilter = msoListSkipState;
-          state.originalToken = token;
-        } else {
-          var lvl = / level([0-9]+)/.exec(token.getStyle('mso-list'));
-
-          if (lvl && lvl[1]) {
-            state.itemLevel = parseInt(lvl[1], 10) + state.styleLevelAdjust;
-            // Tokens between lists should be dropped (they're just whitespace anyway)
-            // however, tokens before a list should be emitted if we find an mso-list style
-            // since this is the very first token of the list.
-            if (state.nextFilter === noListState) {
-              api.emitDeferred();
-            } else {
-              api.dropDeferred();
-            }
-            state.nextFilter = listStartState;
-            api.startTransaction();
-            state.originalToken = token;
-            state.commentMode = false;
-          } else {
-            closeOutLists();
-          }
-        }
-      } else if (!Helper.supportsCustomStyles &&
-          ((token.type() === Token.COMMENT_TYPE && token.text() === '[if !supportLists]') ||
-          (CommentHeuristics.isListWithoutCommentsOrStyles(token, api)))) {
-        if (token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'SPAN') {
-          state.spanCount.push(token);
-        }
-        state.nextFilter = listStartState;
-        api.startTransaction();
-        state.originalToken = state.openedTag;
-        state.commentMode = true;
-        state.openedTag = null;
-        api.dropDeferred();
-      } else if (token.type() === Token.END_ELEMENT_TYPE && Helper.spanOrA(token)) {
-        api.defer(token);
-        state.spanCount.pop();
-      } else if (token.type() === Token.START_ELEMENT_TYPE) {
-        // Might be the start of an item, store it and see if we get a comment next.
-        if (Helper.spanOrA(token)) {
-          api.defer(token);
-          state.spanCount.push(token);
-        } else {
-          if (state.openedTag) {
-            state.emitter.closeAllLists();
-            api.emitDeferred();
-          }
-          state.openedTag = token;
-          api.defer(token);
-        }
-      } else {
-        closeOutLists();
-      }
-    };
-
-    var afterNoBulletListState = function(api, state, token) {
-      if (token.type() === Token.END_ELEMENT_TYPE && state.originalToken.tag() === token.tag()) {
-        state.nextFilter = afterListState;
-        state.styleLevelAdjust = -1;
-      }
-      api.emit(token);
-    };
-
-    var listStartState = function(api, state, token) {
-      if (token.type() == Token.START_ELEMENT_TYPE && token.getStyle('mso-list') === 'Ignore') {
-        state.nextFilter = findListTypeState;
-      } if (token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'SPAN') {
-        state.spanCount.push(token);
-        if (state.commentMode && token.getAttribute("style") === "" || token.getAttribute("style") === null) {
-          state.nextFilter = findListTypeState;
-        }
-        // Otherwise drop.
-      } else if (token.tag() === 'A') {
-        if (token.type() === Token.START_ELEMENT_TYPE) {
-          state.spanCount.push(token);
-        } else {
-          state.spanCount.pop();
-        }
-      } else if (token.type() === Token.TEXT_TYPE) {
-        if (state.commentMode) {
-          state.nextFilter = findListTypeState;
-          state.nextFilter(api, state, token);
-        } else {
-          // List type without a bullet, we should treat it as a paragraph.
-          var start = state.originalToken;
-          var spans = state.spanCount;
-          state.emitter.closeAllLists();
-          api.emit(start);
-          Util.each(spans, Util.bind(api.emit, api));
-          api.emit(token);
-          api.commit();
-          state.originalToken = start;
-          state.nextFilter = afterNoBulletListState;
-        }
-      } else if (!state.commentMode && token.type() === Token.COMMENT_TYPE) {
-        // Drop. We seem to be getting custom styles and comments.
-      } else {
-        unexpectedToken(api, token);
-      }
-    };
-
-    var findListTypeState = function(api, state, token) {
-      if (token.type() === Token.TEXT_TYPE) {
-        if (token.isWhitespace()) {
-          // Ignore whitespace node, it's padding before the actual list type.
-        } else {
-          state.nextFilter = beforeSpacerState;
-          state.bulletInfo = { text: token.text(), symbolFont: state.symbolFont };
-        }
-      } else if (Helper.spanOrA(token)) {
-        // Drop open and close span tags.
-        if (token.type() === Token.START_ELEMENT_TYPE) {
-          state.spanCount.push(token);
-        } else {
-          state.spanCount.pop();
-        }
-      } else if (token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'IMG') {
-        // Custom list image type.  We can't access the image so use a normal bullet instead.
-        // EditLive! may want this to come through as a CSS reference.
-        state.nextFilter = beforeSpacerState;
-        state.bulletInfo = { text: '\u2202', symbolFont: true };
-      } else {
-        unexpectedToken(api, token);
-      }
-    };
-
-    var beforeSpacerState = function(api, state, token) {
-      if (token.type() === Token.START_ELEMENT_TYPE && Helper.spanOrA(token)) {
-        state.spanCount.push(token);
-        state.nextFilter = spacerState;
-      } else if (token.type() === Token.END_ELEMENT_TYPE && Helper.spanOrA(token)) {
-        state.spanCount.pop();
-        state.nextFilter = closeSpansState;
-      } else if (token.type() === Token.END_ELEMENT_TYPE && token.tag() === 'IMG') {
-        // Drop
-      } else {
-        unexpectedToken(api, token);
-      }
-    };
-
-    var spacerState = function(api, state, token) {
-      if (token.type() === Token.END_ELEMENT_TYPE) {
-        if (Helper.spanOrA(token)) {
-          state.spanCount.pop();
-        }
-        state.nextFilter = closeSpansState;
-      }
-      // Drop all other tokens.
-    };
-
-    var closeSpansState = function(api, state, token) {
-      var moveToItemContentState = function(includeToken) {
-        state.nextFilter = itemContentState;
-        if (state.commentMode) state.itemLevel = state.indentGuesser.guessIndentLevel(token, state.originalToken, state.styles.styles, state.bulletInfo);
-        state.listType = ListTypes.guessListType(state.bulletInfo, preferredListType(state.emitter.getCurrentListType(), state.emitter.getCurrentLevel(), state.itemLevel), state.originalToken);
-        if (state.listType) {
-          state.emitter.openItem(state.itemLevel, state.originalToken, state.listType, state.skippedPara);
-          api.emitDeferred();
-          while (state.spanCount.length > 0) {
-            api.emit(state.spanCount.shift());
-          }
-          if (includeToken) {
-            api.emit(token);
-          }
-        } else {
-          Util.log("Unknown list type: "  + state.bulletInfo.text + " Symbol font? " + state.bulletInfo.symbolFont);
-          api.rollback();
-        }
-      };
-
-      if (token.type() === Token.TEXT_TYPE || token.type() === Token.START_ELEMENT_TYPE) {
-        moveToItemContentState(true);
-      } else if (token.type() === Token.COMMENT_TYPE) {
-        moveToItemContentState(token.text() !== '[endif]');
-      } else if (token.type() === Token.END_ELEMENT_TYPE) {
-        if (Helper.spanOrA(token)) {
-          state.spanCount.pop();
-        }
-      } else {
-        unexpectedToken(api, token);
-      }
-    };
-
-    var itemContentState = function(api, state, token) {
-      if (token.type() === Token.END_ELEMENT_TYPE && token.tag() === state.originalToken.tag()) {
-        state.nextFilter = afterListState;
-        state.skippedPara = false;
-      } else {
-        api.emit(token);
-      }
-    };
-
-    var initial = noListState;
-    return {
-      initial: initial
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.list.Lists',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter',
-    'ephox.powerpaste.legacy.data.tokens.Helper',
-    'ephox.powerpaste.legacy.data.tokens.Token',
-    'ephox.powerpaste.legacy.filters.list.CommentHeuristics',
-    'ephox.powerpaste.legacy.filters.list.Emitter',
-    'ephox.powerpaste.legacy.filters.list.ListStates',
-    'ephox.powerpaste.legacy.filters.list.ListTypes',
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Filter, Helper, Token, CommentHeuristics, Emitter, ListStates, ListTypes, Util) {
-
-    var activeState = {};
-
-    var resetActiveState = function(api) {
-      //It would be nice if this was creating a fresh object, but listStartState() expects state mutation when api.commit() is called
-      activeState.nextFilter = ListStates.initial;
-      activeState.itemLevel = 0;
-      activeState.originalToken = null;
-      activeState.commentMode = false;
-      activeState.openedTag = null;
-      activeState.symbolFont = false;
-      activeState.listType = null;
-      activeState.indentGuesser = CommentHeuristics.indentGuesser();
-      activeState.emitter = Emitter(api, api.document);
-      activeState.styles = CommentHeuristics.styles();
-      activeState.spanCount = [];
-      activeState.skippedPara = false;
-      activeState.styleLevelAdjust = 0;
-      activeState.bulletInfo = undefined;
-    };
-
-    resetActiveState({});
-
-    var resetState = function(api) {
-      resetActiveState(api);
-    };
-
-    var receive = function(api, token) {
-      if (activeState.styles.check(token)) {
-        return;
-      }
-      activeState.symbolFont = ListTypes.checkFont(token, activeState.symbolFont);
-      activeState.nextFilter(api, activeState, token);
-    };
-
-    return Filter.createFilter(receive, resetState);
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-/**
- * Source code in this file has been taken under a commercial license from tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
- * Copyright 2009, Moxiecode Systems AB
- */
-define(
-  'ephox.powerpaste.legacy.tinymce.BrowserFilters',
-
-  [
-    'ephox.powerpaste.legacy.tinymce.Util'
-  ],
-
-  function (Util) {
-    var trailingSpaceCharacter = function(content) {
-      var h = content;
-      // Strip a trailing non-breaking, zero-width space which Firefox tends to insert.
-      var hasCrazySpace = h.charCodeAt(h.length - 1) === 65279;
-      return hasCrazySpace ?
-        h.substring(0, h.length - 1) :
-        content;
-    };
-
-    // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
-    var removeBrNextToBlock = function(content) {
-      return (/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/).test(content) ?
-        content.replace(/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g, '$1') :
-        content;
-    };
-
-    // Replace multiple BR elements with uppercase BR to keep them intact when collapseBr runs
-    var capitaliseMultipleBr = function(content) {
-      return content.replace(/<br><br>/g, '<BR><BR>');
-    };
-
-    // Replace single br elements with space since they are word wrapping
-    var removeSingleBr = function(content) {
-      return content.replace(/<br>/g, ' ');
-    };
-
-    // Collapse double brs into a single BR
-    var collapseBr = function(content) {
-      return content.replace(/<BR><BR>/g, '<br>');
-    };
-
-    var baseFilters = [trailingSpaceCharacter];
-
-    var filters = (tinymce.isIE && document.documentMode >= 9) ?
-       [collapseBr, removeSingleBr, capitaliseMultipleBr, removeBrNextToBlock].concat(baseFilters) :
-       baseFilters;
-
-    var allFilters = Util.compose(filters);
-
-    return {
-      all: allFilters,
-      textOnly: trailingSpaceCharacter
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.FilterInlineStyles',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    var removeStyles = /^(mso-.*|tab-stops|tab-interval|language|text-underline|text-effect|text-line-through|font-color|horiz-align|list-image-[0-9]+|separator-image|table-border-color-(dark|light)|vert-align|vnd\..*)$/;
-
-    var filterFunction = function(styleFilter) {
-      return function(name, value) {
-        var preserve = false;
-        switch (styleFilter) {
-          case 'all':
-          case '*':
-            preserve = true;
-            break;
-          case 'valid':
-            preserve = !removeStyles.test(name);
-            break;
-          case undefined:
-          case 'none':
-            preserve = name === 'list-style-type';
-            break;
-          default:
-            preserve = (',' + styleFilter + ',').indexOf(',' + name + ',') >= 0;
-            break;
-        }
-        return preserve ? value : null;
-      };
-    };
-
-    return Filter.createFilter(function(api, token) {
-      var styleFilter = api.settings.get('retain_style_properties');
-      token.filterStyles(filterFunction(styleFilter));
-      api.emit(token);
-    });
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.InferListTags',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter',
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Filter, Token) {
-    return Filter.createFilter(function(api, token) {
-      if (api.seenList) {
-        // As soon as we see a UL or OL tag we know we're getting complete lists.
-        api.emit(token);
-      } else if (api.inferring) {
-        if (token.tag() === 'LI') {
-          if (token.type() === Token.START_ELEMENT_TYPE) {
-            api.inferring++;
-          } else {
-            api.inferring--;
-            if (!api.inferring) {
-              api.needsClosing = true;
-            }
-          }
-        }
-        api.emit(token);
-      } else {
-        if (token.tag() === 'OL' || token.tag() === 'UL') {
-          api.seenList = true;
-        } else if (token.tag() === 'LI') {
-          api.inferring = 1;
-          if (!api.needsClosing) {
-            api.emit(Token.createStartElement('UL', {}, {}, api.document));
-          }
-        }
-        if (api.needsClosing && !api.inferring && !token.isWhitespace()) {
-          api.needsClosing = false;
-          api.emit(Token.createEndElement('UL', api.document));
-        }
-        api.emit(token);
-      }
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripBookmarks',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createAttributeFilter(function(name, value) {
-      if (name === 'name' || name === 'id') {
-        return null;
-      }
-      return value;
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripClassAttributes',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createAttributeFilter(function(name, value) {
-      var classFilter;
-      if (name === 'class') {
-        classFilter = this.settings.get('strip_class_attributes');
-        switch (classFilter) {
-          case 'mso':
-            return value.indexOf('Mso') === 0 ? null : value;
-          case 'none':
-            return value;
-          default:
-            return null;
-        }
-      }
-      return value;
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripEmptyInlineElements',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter',
-    'ephox.powerpaste.legacy.data.tokens.Helper',
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Filter, Helper, Token) {
-    var deferred = [];
-    var open = [];
-    var hasContent = false;
-
-    var removeMatchingSpan = function(len, pos) {
-      var j, token, opened = 1;
-      for (j = pos + 1; j < len; j++) {
-        token = deferred[j];
-        if (token && token.tag() === 'SPAN') {
-          if (token.type() === Token.START_ELEMENT_TYPE) {
-            opened++;
-          } else if (token.type() === Token.END_ELEMENT_TYPE) {
-            opened--;
-            if (opened === 0) {
-              // Save reallocating a shorter array, just null it out.
-              deferred[j] = null;
-              return;
-            }
-          }
-        }
-      }
-    };
-
-    var flushDeferred = function(api) {
-      if (hasContent) {
-        var tok, len = deferred.length, i;
-        for (i = 0; i < len; i++) {
-          tok = deferred[i];
-          if (!tok) continue;
-          if (tok.type() === Token.START_ELEMENT_TYPE && tok.tag() === 'SPAN' && Helper.hasNoAttributes(tok)) {
-            // Omit token and find the last end span and remove it too.
-            removeMatchingSpan(len, i);
-          } else {
-            api.emit(tok);
-          }
-        }
-      }
-      deferred = [];
-      open = [];
-      hasContent = false;
-    };
-
-    var internalDefer = function(api, token) {
-      deferred.push(token);
-      open = open || [];
-      if (token.type() === Token.START_ELEMENT_TYPE) {
-        open.push(token);
-      } else if (token.type() === Token.END_ELEMENT_TYPE) {
-        open.pop();
-        if (open.length === 0) {
-          // Didn't find anything to keep so dump everything.
-          flushDeferred(api, token);
-          return;
-        }
-      }
-    };
-
-    return Filter.createFilter(function(api, token) {
-      var inlineTags = ',FONT,EM,STRONG,SAMP,ACRONYM,CITE,CODE,DFN,KBD,TT,B,I,U,S,SUB,SUP,INS,DEL,VAR,SPAN,';
-
-      deferred = deferred || [];
-
-      var alwaysKeep = function(token) {
-        return !(inlineTags.indexOf(',' + token.tag() + ',') >= 0 && Helper.hasNoAttributes(token, true));
-      };
-
-      if (deferred.length === 0) {
-        if (token.type() === Token.START_ELEMENT_TYPE) {
-          if (alwaysKeep(token)) {
-            api.emit(token);
-          } else {
-            internalDefer(api, token);
-          }
-        } else {
-          api.emit(token);
-        }
-      } else {
-        if (!hasContent) hasContent = alwaysKeep(token);
-        internalDefer(api, token);
-      }
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripEmptyStyleAttributes',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createAttributeFilter(function(name, value) {
-      if (name === 'style' && value === '') {
-        return null;
-      }
-      return value;
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripLangAttribute',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createAttributeFilter(function(name, value) {
-      return name === 'lang' ? null : value;
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-'ephox.powerpaste.legacy.filters.StripImages',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter',
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Filter, Token) {
-    return Filter.createFilter(function(api, token) {
-      if (token.tag() === 'IMG') {
-        if (token.type() === Token.END_ELEMENT_TYPE && api.skipEnd) {
-          api.skipEnd = false;
-          return;
-        } else if (token.type() === Token.START_ELEMENT_TYPE) {
-          if (/^file:/.test(token.getAttribute('src'))) {
-            api.skipEnd = true;
-            return;
-          } else if (api.settings.get('base_64_images') && /^data:image\/.*;base64/.test(token.getAttribute('src'))) {
-            api.skipEnd = true;
-            return;
-          }
-        }
-      }
-      api.emit(token);
-    });
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripMetaAndLinkElements',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createFilter(function(api, token) {
-      if (token.tag() !== 'META' && token.tag() !== 'LINK') {
-        api.emit(token);
-      }
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripNoAttributeA',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter',
-    'ephox.powerpaste.legacy.data.tokens.Helper',
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Filter, Helper, Token) {
-    var keepA = function(token) {
-      return !Helper.hasNoAttributes(token) && !/^OLE_LINK/.test(token.getAttribute('name'));
-    };
-
-    var stack = [];
-
-    return Filter.createFilter(function(api, token) {
-      var open;
-      if (token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'A') {
-        stack.push(token);
-        if (keepA(token)) {
-          api.defer(token);
-        }
-      } else if (token.type() === Token.END_ELEMENT_TYPE && token.tag() === 'A') {
-        open = stack.pop();
-        if (keepA(open)) {
-          api.defer(token);
-        }
-        if (stack.length === 0) {
-          api.emitDeferred();
-        }
-      } else if (api.hasDeferred()) {
-        api.defer(token);
-      } else {
-        api.emit(token);
-      }
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripScripts',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter',
-    'ephox.powerpaste.legacy.data.tokens.Token'
-  ],
-
-  function (Filter, Token) {
-    var script = false;
-    return Filter.createFilter(function(api, token) {
-      if (token.tag() === 'SCRIPT') {
-        script = token.type() === Token.START_ELEMENT_TYPE;
-      } else if (!script) {
-        token.filterAttributes(function(name, value) {
-          if (/^on/.test(name) || name === 'language') return null;
-          return value;
-        });
-        api.emit(token);
-      }
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.wordimport.CommonFilters',
-
-  [
-    'ephox.powerpaste.legacy.filters.FilterInlineStyles',
-    'ephox.powerpaste.legacy.filters.InferListTags',
-    'ephox.powerpaste.legacy.filters.StripBookmarks',
-    'ephox.powerpaste.legacy.filters.StripClassAttributes',
-    'ephox.powerpaste.legacy.filters.StripEmptyInlineElements',
-    'ephox.powerpaste.legacy.filters.StripEmptyStyleAttributes',
-    'ephox.powerpaste.legacy.filters.StripLangAttribute',
-    'ephox.powerpaste.legacy.filters.StripImages',
-    'ephox.powerpaste.legacy.filters.StripMetaAndLinkElements',
-    'ephox.powerpaste.legacy.filters.StripNoAttributeA',
-    'ephox.powerpaste.legacy.filters.StripScripts'
-  ],
-
-  function (FilterInlineStyles, InferListTags, StripBookmarks, StripClassAttributes, StripEmptyInlineElements, StripEmptyStyleAttributes, StripLangAttribute, StripImages, StripMetaAndLinkElements, StripNoAttributeA, StripScripts) {
-    return [
-      StripScripts,
-      StripBookmarks,
-      StripImages,
-      FilterInlineStyles,
-      StripLangAttribute,
-      StripEmptyStyleAttributes,
-      StripClassAttributes,
-      StripNoAttributeA,
-      StripEmptyInlineElements,
-      StripMetaAndLinkElements,
-      InferListTags
-    ];
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripFormattingAttributes',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createFilter(function(api, token) {
-      token.filterAttributes(function(name, value) {
-        if (name === 'align') return null;
-        if ((token.tag() === 'UL' || token.tag() === 'OL') &&
-            name === 'type') return null;
-        return value;
-      });
-      api.emit(token);
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripNamespaceDeclarations',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createAttributeFilter(function(name, value) {
-      if (/^xmlns(:|$)/.test(name)) {
-        return null;
-      }
-      return value;
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripOPTags',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createFilter(function(api, token) {
-      if (!token.tag || !/^([OVWXP]|U[0-9]+|ST[0-9]+):/.test(token.tag())) {
-        api.emit(token);
-      }
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripTocLinks',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createAttributeFilter(function(name, value) {
-      if (name === 'href' && (value.indexOf('#_Toc') >= 0 || value.indexOf('#_mso') >= 0)) {
-        return null;
-      }
-      return value;
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.filters.StripVMLAttributes',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Filter'
-  ],
-
-  function (Filter) {
-    return Filter.createAttributeFilter(function(name, value) {
-      if (/^v:/.test(name)) {
-        return null;
-      }
-      return value;
-    });
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.wordimport.WordOnlyFilters',
-
-  [
-    'ephox.powerpaste.legacy.filters.StripFormattingAttributes',
-    'ephox.powerpaste.legacy.filters.StripNamespaceDeclarations',
-    'ephox.powerpaste.legacy.filters.StripOPTags',
-    'ephox.powerpaste.legacy.filters.StripTocLinks',
-    'ephox.powerpaste.legacy.filters.StripVMLAttributes',
-    'ephox.powerpaste.legacy.filters.list.Lists'
-  ],
-
-  function (StripFormattingAttributes, StripNamespaceDeclarations, StripOPTags, StripTocLinks, StripVMLAttributes, Lists) {
-    return  [
-      StripOPTags,
-      Lists,
-      StripTocLinks,
-      StripVMLAttributes,
-      StripNamespaceDeclarations,
-      StripFormattingAttributes
-    ];
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.legacy.wordimport.WordImport',
-
-  [
-    'ephox.powerpaste.legacy.data.tokens.Serializer',
-    'ephox.powerpaste.legacy.data.tokens.Tokenizer',
-    'ephox.powerpaste.legacy.filters.Text',
-    'ephox.powerpaste.legacy.filters.list.Lists',
-    'ephox.powerpaste.legacy.tinymce.BrowserFilters',
-    'ephox.powerpaste.legacy.wordimport.CommonFilters',
-    'ephox.powerpaste.legacy.wordimport.WordOnlyFilters'
-  ],
-
-  function (Serializer, Tokenizer, Text, Lists, BrowserFilters, CommonFilters, WordOnlyFilters) {
-    var buildPipeline = function(filters, sink, settings, document) {
-      var i, filter = sink;
-      for (i = filters.length - 1; i >= 0; i--) {
-        //This is calling the function defined by Filter.createFilter().
-        //The best description I can come up with is "function composition using CPS".
-        //Filters are run in reverse order to the loop, which is reversed so the arrays below define the order.
-        //And then the sink comes last (which means it's injected on the first pass of the loop).
-        filter = filters[i](filter, settings, document);
-      }
-      return filter;
-    };
-
-    var runPipeline = function(content, settings, document, requiredFilters) {
-      var serializer = Serializer.create(document);
-      var tokenizer = Tokenizer.tokenize(content, document);
-      pipeline = buildPipeline(requiredFilters, serializer, settings, document);
-      while (tokenizer.hasNext()) {
-        pipeline.receive(tokenizer.next());
-      }
-      return serializer.dom;
-    };
-
-    /**
-     * Accepts a string of content to filter and returns a filtered DOM structure.
-     *
-     * @param inputContent the content to filter
-     * @param settings the settings object
-     * @param document the target document that the content will be inserted into
-     * @return a DOM fragment with the filtered content.
-     */
-    var filter = function(inputContent, settings, document) {
-      var content = BrowserFilters.all(inputContent);
-
-      var detectedAsWordContent = isWordContent(content);
-      settings.setWordContent(detectedAsWordContent);
-
-      var requiredFilters = CommonFilters;
-      if (detectedAsWordContent) {
-        requiredFilters = WordOnlyFilters.concat(CommonFilters);
-      }
-      return runPipeline(content, settings, document, requiredFilters);
-    };
-
-    var filterPlainText = function(inputContent, settings, document) {
-      var content = BrowserFilters.textOnly(inputContent);
-
-      return runPipeline(content, settings, document, [Text]);
-    };
-
-    var isWordContent = function(content) {
-      return content.indexOf('<o:p>') >= 0 || // IE, Safari, Opera
-        content.indexOf('p.MsoNormal, li.MsoNormal, div.MsoNormal') >= 0 || // Firefox Mac
-        content.indexOf('MsoListParagraphCxSpFirst') >= 0 || // Windows list only selection
-        content.indexOf('<w:WordDocument>') >= 0; // Firefox Windows
-    };
-
-    return {
-      filter: filter,
-      filterPlainText: filterPlainText,
-      isWordContent: isWordContent
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.tinymce.LegacyTinyDialog',
-  [
-    'ephox.powerpaste.legacy.data.Insert',
-    'ephox.powerpaste.legacy.tinymce.Settings',
-    'ephox.powerpaste.legacy.wordimport.WordImport',
-    'global!setTimeout'
-  ],
-  function(Insert, Settings, WordImport, setTimeout){
-    return function(editor, translate) {
-      var showDialog = function(content){
-
-        var filterAndInsert = function(importSetting) {
-          var data = {content: content};
-
-          // run pre-filters
-          editor.fire('PastePreProcess', data);
-
-          // run main filter, always strip images
-          var settings = Settings.create(importSetting || editor.settings.powerpaste_word_import, importSetting || editor.settings.powerpaste_html_import, true);
-          var fragment = WordImport.filter(data.content, settings, editor.getDoc());
-
-          // run post-filters
-          editor.fire('PastePostProcess', fragment);
-          //Set undo step
-          editor.undoManager.transact(function() {
-            // insert the DocumentFragment object into the editor
-            Insert.insert(fragment, editor);
-          });
-        };
-
-        //introduce the prompt option
-        var cleanOrMerge = function(setting) {
-          return setting === 'clean' || setting === 'merge';
-        };
-
-        var openDialog =function() {
-          var win;
-
-          var clean = function() {
-            win.close();
-            filterAndInsert('clean');
-          };
-          var merge = function() {
-            win.close();
-            filterAndInsert('merge');
-          };
-
-          var controls = [{
-            text: translate('cement.dialog.paste.clean'),
-            onclick: clean
-          },
-          {
-            text: translate('cement.dialog.paste.merge'),
-            onclick: merge
-          }];
-
-          var winSettings = {
-            title: translate('cement.dialog.paste.title'),
-            spacing: 10,
-            padding: 10,
-            items: [{
-              type: 'container',
-              html: translate('cement.dialog.paste.instructions')
-            }],
-            buttons: controls
-          };
-
-          win = editor.windowManager.open(winSettings);
-
-          //IE appears to require that we blur the iframe
-          setTimeout(function() {
-            if (win) {
-              win.getEl().focus();
-            }
-          }, 1);
-        };
-
-        if (WordImport.isWordContent(content) && !cleanOrMerge(editor.settings.powerpaste_word_import)) {
-          openDialog();
-        } else if (!cleanOrMerge(editor.settings.powerpaste_html_import)) {
-          openDialog();
-        } else {
-          filterAndInsert();
-        }
-
-      };
-
-      return {
-        showDialog: showDialog
-      };
-
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.tinymce.LegacyPowerPaste',
-  [
-    'ephox.powerpaste.i18n.I18n',
-    'ephox.powerpaste.legacy.tinymce.Clipboard',
-    'ephox.powerpaste.tinymce.LegacyTinyDialog'
-  ],
-  function (I18n, Clipboard, LegacyTinyDialog) {
-    return function (editor, settings) {
-      var t = this, onPaste, onKeyDown;
-
-      var tinyDialog = LegacyTinyDialog(editor, I18n.translate);
-
-      var handlerAdapter = function(handler) {
-        return function(e) {
-          handler(e);
-        };
-      };
-
-      // Register the getClipboardContent function onpaste and with the magical keyboard shortcuts for browsers that don't support that (Opera & FF2).
-      onPaste = Clipboard.getOnPasteFunction(editor, tinyDialog.showDialog);
-      editor.on('paste', handlerAdapter(onPaste));
-
-      onKeyDown = Clipboard.getOnKeyDownFunction(editor, tinyDialog.showDialog);
-      editor.on('keydown', handlerAdapter(onKeyDown));
-
-      editor.addCommand('mceInsertClipboardContent', function(ui, data) {
-        tinyDialog.showDialog(data.content || data);
-      });
-
-      if (editor.settings.paste_preprocess) {
-        editor.on('PastePreProcess', function(e) {
-          editor.settings.paste_preprocess.call(t, t, e);
-        });
-      }
-
-    };
-
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.epithet.Id',
-
-  [
-  ],
-
-  function () {
-
-    /**
-     * Generate a unique identifier.
-     *
-     * The unique portion of the identifier only contains an underscore
-     * and digits, so that it may safely be used within HTML attributes.
-     *
-     * The chance of generating a non-unique identifier has been minimized
-     * by combining the current time, a random number and a one-up counter.
-     *
-     * @param {string} prefix Prepended to the identifier
-     * @return {string} Unique identifier
-     */
-    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);
-    };
-
-    return {
-      generate: generate
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.DeviceType',
-
-  [
-    'ephox.peanut.Fun'
-  ],
-
-  function (Fun) {
-    return function(osObj, browserObj, userAgent) {
-      var isiPad = osObj.isiOS() && ( userAgent.search(/iPad/i) !== -1 );
-      var isiPhone = osObj.isiOS() && !isiPad;
-      var isAndroid3 = osObj.isAndroid() && ( osObj.version.major === 3 );
-      var isAndroid4 = osObj.isAndroid() && ( osObj.version.major === 4 );
-      var isTablet = isiPad || isAndroid3 || ( isAndroid4 && userAgent.search(/mobile/i) === -1 );
-      var isTouch = ( osObj.isiOS() || osObj.isAndroid() );
-      var isPhone = isTouch && !isTablet;
-
-      return {
-        isiPad : Fun.constant(isiPad),
-        isiPhone: Fun.constant(isiPhone),
-        isTablet: Fun.constant(isTablet),
-        isPhone: Fun.constant(isPhone),
-        isTouch: Fun.constant(isTouch),
-        isAndroid: osObj.isAndroid,
-        isiOS: osObj.isiOS
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.Platform',
-
-  [
-  ],
-
-  function () {
-    var create = function(browserName, browserVersion, osName) {
-      return {
-        browser: {
-          current: browserName,
-          version: browserVersion
-        },
-        os: {
-          current: osName
-        }
-      };
-    };
-
-    return {
-      create: create
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.GetterHelper',
-
-  [
-  ],
-
-  function () {
-    var getter = function(value) {
-      return function() {
-        return value;
-      };
-    };
-
-    // Adapter between settings like IsMSIE and functions like EditLiveJava.browser.isIE()
-    var attachGetters = function(scope, current, options) {
-      for (var i = 0; i < options.length; i++) {
-        scope['is' + options[i].name] = getter(options[i].name === current);
-      }
-    };
-
-    return {
-      getter: getter,
-      attachGetters: attachGetters
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.Result',
-
-  [
-    'ephox.fred.core.GetterHelper'
-  ],
-
-  function (GetterHelper) {
-    var create = function(options, current, version) {
-      //-------------------------------------------------------------------------
-      var attachGetters = GetterHelper.attachGetters;
-      //-------------------------------------------------------------------------
-
-      var result = {};
-      result.current = current;
-      result.version = version;
-      attachGetters(result, result.current, options);
-      return result;
-    };
-
-    return {
-      create: create
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.SearchInfo',
-
-  [
-    'ephox.violin.Strings'
-  ],
-
-  function (V) {
-    var contains = V.contains;
-    var checkContains = function(x) {
-      return function(uastring) {
-        return contains(uastring, x);
-      };
-    };
-
-    var chromeFrameChecker = function() {
-      try {
-        var i = new ActiveXObject('ChromeTab.ChromeFrame');
-        return !!i;
-      } catch(e) {
-        return false;
-      }
-    };
-
-    var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
-
-    var create = function(isChromeFrameEnabled) {
-      var browsers = [
-        {
-          name : 'Spartan',
-          versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
-          search: function(uastring) {
-            var monstrosity = contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');
-            return monstrosity;
-          }
-        },
-        {
-          name : 'ChromeFrame',
-          versionRegexes: [/.*?chromeframe\/([0-9]+)\.([0-9]+).*/, normalVersionRegex],
-          search: function(uastring) {
-            return contains(uastring, 'chromeframe') ? isChromeFrameEnabled() : false;
-          }
-        },
-        {
-          name : 'Chrome',
-          versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/, normalVersionRegex],
-          search : function(uastring) {
-            return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');
-          }
-        },
-        {
-          name : 'IE',
-          versionRegexes: [/.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/],
-          search: function(uastring) {
-            var containsIE = (contains(uastring, 'msie') || contains(uastring, 'trident'));
-            var containsChromeFrame = contains(uastring, 'chromeframe');
-            return containsChromeFrame ? containsIE && !isChromeFrameEnabled() : containsIE;
-          }
-        },
-        {
-          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],
-          search : checkContains('safari')
-        },
-        {
-          name : 'Envjs',
-          versionRegexes: [/.*?envjs\/\ ?([0-9]+)\.([0-9]+).*/],
-          search : checkContains('envjs')
-        }
-      ];
-
-      var oses = [
-        {
-          name : 'Windows',
-          search : checkContains('win'),
-          versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
-        },
-        {
-          name : 'iOS',
-          search : function(uastring) {
-            return contains(uastring, 'iphone') || contains(uastring, 'ipad');
-          },
-          versionRegexes: [/.*?version\/\ ?([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')
-        },
-        { name : 'Solaris',
-          search : checkContains('sunos')
-        },
-        {
-         name : 'FreeBSD',
-         search : checkContains('freebsd')
-        }
-      ];
-
-
-      return {
-        browsers: browsers,
-        oses: oses
-      };
-    };
-
-    return {
-      create: create,
-      chromeFrameChecker: chromeFrameChecker
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.SpecTester',
-
-  [
-  ],
-
-  function () {
-    var meetsSpec = function(spec, browserVersion) {
-      var t = typeof spec;
-      if (t === 'boolean') {
-        return !! spec;
-      } else if (t === 'object') {
-        var min = spec.minimum;
-        return browserVersion.major > min.major || (browserVersion.major === min.major && browserVersion.minor >= min.minor);
-      }
-
-      throw('invalid spec');
-    };
-
-    return {
-      meetsSpec: meetsSpec
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.Fn',
-
-  [
-  ],
-
-  function () {
-    var findOneInArrayOr = function(array, theDefault, predicate) {
-      for (var i = 0; i < array.length; i++) {
-        var x = array[i];
-        if (predicate(x, i, array)) return x;
-      }
-      return theDefault;
-    };
-
-    return {
-      findOneInArrayOr: findOneInArrayOr
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.UaStringDetector',
-
-  [
-    'ephox.fred.core.Fn'
-  ],
-
-  function (Fn) {
-    var detect = function(scope, userAgent) {
-      //-------------------------------------------------------------------------
-      var findOneInArrayOr = Fn.findOneInArrayOr;
-      //-------------------------------------------------------------------------
-
-      var agent = String(userAgent).toLowerCase();
-      return findOneInArrayOr(scope, {name: undefined}, function(x) {
-        return x.search(agent);
-      });
-    };
-
-    return {
-      detect: detect
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.core.VersionDetector',
-
-  [
-  ],
-
-  function () {
-    var detectVersion = function(currentBrowser, agent) {
-      function firstMatch(regexes, s) {
-        for (var i = 0; i < regexes.length; i++) {
-          var x = regexes[i];
-          if (x.test(s)) return x;
-        }
-        return undefined;
-      }
-
-      function find(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 {
-          major : group(1),
-          minor : group(2)
-        };
-      }
-
-      var cleanedAgent = String(agent).toLowerCase();
-      var versionRegexes = currentBrowser.versionRegexes;
-
-      if (!versionRegexes) return { major : 0, minor : 0 };
-      return find(versionRegexes, cleanedAgent);
-    };
-
-    return {
-      detectVersion: detectVersion
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fred.PlatformDetection',
-
-  [
-    'ephox.fred.core.DeviceType',
-    'ephox.fred.core.Platform',
-    'ephox.fred.core.Result',
-    'ephox.fred.core.SearchInfo',
-    'ephox.fred.core.SpecTester',
-    'ephox.fred.core.UaStringDetector',
-    'ephox.fred.core.VersionDetector'
-  ],
-
-  function (DeviceType, Platform, Result, SearchInfo, SpecTester, UaStringDetector, VersionDetector) {
-    //-------------------------------------------------------------------------
-    var detectVersion = VersionDetector.detectVersion;
-    var makeResult = Result.create;
-    var meetsSpec = SpecTester.meetsSpec;
-    var detectFromUaString = UaStringDetector.detect;
-    //-------------------------------------------------------------------------
-
-    var isSupported = function(supportMatrix, os, browser, browserVersion) {
-        if (!!(supportMatrix[os])) {
-          if (!!(supportMatrix[os][browser])) {
-            return meetsSpec(supportMatrix[os][browser], browserVersion);
-          } else {
-            return !!(supportMatrix[os]["All"]);
-          }
-        } else {
-          return false;
-        }
-    };
-
-    var isSupportedPlatform = function(matrix, platform) {
-      var browser = platform.browser;
-      var os = platform.os;
-      return isSupported(matrix, os.current, browser.current, browser.version);
-    };
-
-    var doDetect = function(userAgent, chromeFrameChecker) {
-      var si = SearchInfo.create(chromeFrameChecker);
-
-      var browsers = si.browsers;
-      var oses = si.oses;
-
-      var os = detectFromUaString(oses, userAgent);
-      var osName = os.name;
-      var osVersion = detectVersion(os, userAgent);
-
-      var browser = detectFromUaString(browsers, userAgent);
-      var browserName = browser.name;
-      var browserVersion = detectVersion(browser, userAgent);
-
-
-      var osObj = makeResult(oses, osName, osVersion);
-      var browserObj = makeResult(browsers, browserName, browserVersion);
-
-      var deviceType = DeviceType(osObj, browserObj, userAgent);
-
-      var supported = function(supportMatrix) {
-        return isSupported(supportMatrix, osName, browserName, browserVersion);
-      };
-
-      return {
-        browser : browserObj,
-        os : osObj,
-        deviceType: deviceType,
-        isSupported : supported
-      };
-    };
-
-    var detect = function() {
-      return doDetect(navigator.userAgent, SearchInfo.chromeFrameChecker);
-    };
-
-    return {
-      Platform: Platform,
-      detect: detect,
-      doDetect: doDetect,
-      isSupported: isSupported,
-      isSupportedPlatform: isSupportedPlatform
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.numerosity.api.FileReader',
-
-  [
-    'ephox.numerosity.core.Global'
-  ],
-
-  function (Global) {
-    /*
-     * IE10 and above per
-     * https://developer.mozilla.org/en-US/docs/Web/API/FileReader
-     */
-    return function () {
-      var f = Global.getOrDie('FileReader');
-      return new f();
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.hermes.utils.ImageExtract',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.epithet.Id',
-    'ephox.fred.PlatformDetection',
-    'ephox.hermes.api.ImageAsset',
-    'ephox.numerosity.api.FileReader',
-    'ephox.numerosity.api.URL',
-    'ephox.scullion.Struct'
-  ],
-
-  function (Arr, Id, PlatformDetection, ImageAsset, FileReader, URL, Struct) {
-    var blobStruct = Struct.immutable('id', 'obj', 'objurl');
-
-    var blob = function (obj) {
-      return blobStruct(Id.generate('image'), obj, URL.createObjectURL(obj));
-    };
-
-    var platform = PlatformDetection.detect();
-
-    /**
-     * Converts a list of blobs into a list of ImageAssets. This is
-     * asynchronous. The assets are passed to the callback
-     * @param blobs the list of blobs
-     * @param callback the callback function for the {ephox.hermes.asset.ImageAsset[]}
-     */
-    var fromBlobs = function (blobs, callback) {
-      // edge case: where a drop of a non-file takes place
-      if (blobs.length === 0) {
-        callback([]);
-        return;
-      }
-
-      var processed = [];
-
-      var addAsset = function (asset) {
-        processed.push(asset);
-        if (processed.length === blobs.length) callback(processed);
-      };
-
-      var readBlob = function (blobData, f) {
-        var fr = FileReader();
-        fr.onload = function(e) {
-          f(blobData, e.target);
-        };
-        fr.readAsDataURL(blobData);
-      };
-
-      Arr.each(blobs, function (b) {
-        var uuid = b.id();
-        var blobData = b.obj();
-        var objurl = b.objurl();
-        readBlob(blobData, function (b, data) {
-          var asset = ImageAsset.blob(uuid, b, objurl, data);
-          addAsset(asset);
-        });
-      });
-    };
-
-    /**
-     * Converts a list of files into a list of ImageAssets. This is
-     * asynchronous. The assets are passed to the callback
-     * @param files the list of files
-     * @param callback the callback function for the {ephox.hermes.asset.ImageAsset[]}
-     */
-    var toAssets = function (files, callback) {
-      var blobs = Arr.map(files, function (file) {
-        return blob(file);
-      });
-
-      fromBlobs(blobs, callback);
-    };
-
-    var toFiles = function (event) {
-      return event.raw().target.files || event.raw().dataTransfer.files;
-    };
-
-    // The following functions are browser-specific ways of determining
-    // whether a drag event contains files from the FILE SYSTEM and
-    // NOT files being dragged from the host page
-    var isFilesIe = function (types) {
-      return types.length === 1 && Arr.contains(types, 'Files');
-    };
-
-    var isFilesFF = function (types) {
-      return !Arr.contains(types, 'text/_moz_htmlcontext');
-    };
-
-    var isFilesWebkit = function (types) {
-      return Arr.contains(types, 'Files');
-    };
-
-    var isFilesOthers = function (types) {
-      // just assume we have files. It will just show a different
-      // drop container and the browser will do nothing
-      return true;
-    };
-
-    var fileDetection = function(){
-      if( platform.browser.isChrome()
-         || platform.browser.isSafari()
-         || platform.browser.isOpera() ) {
-        return isFilesWebkit;
-      }else if( platform.browser.isFirefox() ) {
-        return isFilesFF;
-      }else if( platform.browser.isIE() ) {
-        return isFilesIe;
-      }
-      return isFilesOthers;
-    };
-
-    var isFiles = fileDetection();
-
-    /**
-     * Maps raw global!Image objects to internal image assets,
-     * suitable for adding to a gallery or the editor socket.
-     * @param [global!Image] images to process
-     * @return {ephox.hermes.asset.ImageAsset[]} mapped image assets
-     */
-    var fromImages = function (images) {
-      return Arr.map(images, function (img) {
-        var uuid = Id.generate('image');
-        return ImageAsset.url(uuid, img.src, img);
-      });
-    };
-
-    return {
-      blob: blob,
-      toAssets: toAssets,
-      toFiles: toFiles,
-      isFiles: isFiles,
-      fromImages: fromImages,
-      fromBlobs: fromBlobs
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.hermes.api.ImageExtract',
-
-  [
-    'ephox.hermes.utils.ImageExtract'
-  ],
-
-  function (ImageExtract) {
-    /**
-     * Converts a list of files into a list of ImageAssets. This is
-     * asynchronous. The assets are passed to the callback
-     * @param files the list of files
-     * @param callback the callback function for the {ephox.hermes.asset.ImageAsset[]}
-     */
-    var toAssets = function (files, callback) {
-      return ImageExtract.toAssets(files, callback);
-    };
-
-    /**
-     * Converts a list of blobs into a list of ImageAssets. This is
-     * asynchronous. The assets are passed to the callback
-     * @param blobs the list of blobs
-     * @param callback the callback function for the {ephox.hermes.asset.ImageAsset[]}
-     */
-    var fromBlobs = function (blobs, callback) {
-      return ImageExtract.fromBlobs(blobs, callback);
-    };
-
-    return {
-      toAssets: toAssets,
-      fromBlobs: fromBlobs,
-      blob: ImageExtract.blob
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.tinymce.ModernPowerDrop',
-  [
-    'ephox.compass.Arr',
-    'ephox.hermes.api.ImageAsset',
-    'ephox.hermes.api.ImageExtract',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Element',
-    'global!tinymce'
-  ],
-  function (Arr, ImageAsset, ImageExtract, Attr, Element, tinymce) {
-    return function (editor, url, settings, uploader) {
-
-      var draggingInternally, imageRegex = /^image\/(jpe?g|png|gif|bmp)$/i;
-
-      editor.on('dragstart dragend', function(e) {
-        draggingInternally = e.type === 'dragstart';
-      });
-
-      editor.on('dragover dragend dragleave', function(e) {
-        e.preventDefault();
-      });
-
-      var extractImages = function (event) {
-
-        //TODO: make this more explicit why it's been done
-        var files = event.target.files || event.dataTransfer.files;
-
-        return Arr.filter(files, function (file) {
-          //If the file type tests as an image
-          return imageRegex.test(file.type);
-        });
-
-      };
-
-      var stringifyImages = function (assets) {
-
-        return Arr.map(assets, function (asset) {
-
-          var image = Element.fromTag('img');
-
-          var src = ImageAsset.cata(asset,
-            //If we're using PP's uploader, return the blob url, otherwise the data url
-            uploader.getLocalURL,
-            function (id, url, raw) { return url; }
-          );
-
-          Attr.set(image, 'src', src);
-
-          return image.dom().outerHTML;
-
-        }).join('');
-
-      };
-
-      var processImages = function (images) {
-
-        ImageExtract.toAssets(images, function (assets) {
-
-          var stringHTML = stringifyImages(assets);
-
-          //Content insertion
-          editor.insertContent(stringHTML, {merge: editor.settings.paste_merge_formats !== false});
-
-          uploader.uploadImages(assets);
-
-        });
-
-      };
-
-      editor.on('drop', function (e) {
-
-        //If we're not dragging from within tiny
-        if (!draggingInternally) {
-
-          //If RangeUtils are exposed (4.2)
-          if (tinymce.dom.RangeUtils && tinymce.dom.RangeUtils.getCaretRangeFromPoint) {
-
-            var rng = tinymce.dom.RangeUtils.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());
-
-            //Set selection to where the mouse is pointing
-            if (rng) editor.selection.setRng(rng);
-
-          }
-
-          var images = extractImages(e);
-
-          if (images.length > 0) processImages(images);
-
-          e.preventDefault();
-
-        }
-
-      });
-
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.numerosity.api.Blob',
-
-  [
-    'ephox.numerosity.core.Global'
-  ],
-
-  function (Global) {
-    /*
-     * IE10 and above per
-     * https://developer.mozilla.org/en-US/docs/Web/API/Blob
-     */
-    return function (parts, properties) {
-      var f = Global.getOrDie('Blob');
-      return new f(parts, properties);
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.numerosity.api.Uint8Array',
-
-  [
-    'ephox.numerosity.core.Global'
-  ],
-
-  function (Global) {
-    /*
-     * https://developer.mozilla.org/en-US/docs/Web/API/Uint8Array
-     *
-     * IE10 and above per
-     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
-     */
-    return function (arr) {
-      var f = Global.getOrDie('Uint8Array');
-      return new f(arr);
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!parseInt", [], function () { return parseInt; });
-(function (define, require, demand) {
-define(
-  'ephox.bowerbird.codes.HexToBlob',
-
-  [
-    'ephox.numerosity.api.Blob',
-    'ephox.numerosity.api.Uint8Array',
-    'global!Array',
-    'global!Math',
-    'global!String',
-    'global!parseInt'
-  ],
-
-  function (Blob, Uint8Array, Array, Math, String, parseInt) {
-    // This function is an unholy combination of two Stack Overflow posts:
-    // http://stackoverflow.com/questions/3745666/how-to-convert-from-hex-to-ascii-in-javascript
-    // http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript
-
-    // This all hinges on each hex digit being two characters.
-    // Bytes are only 0-255 (hex 0-FF) though, so that's a pretty safe assumption.
-    var toBytes = function (hex) {
-      // Pre-allocating the array speeds things up
-      var parts = new Array(hex.length / 2);
-      for (var i = 0; i < hex.length; i += 2) {
-        var h = hex.substr(i, 2);
-
-        var index = Math.floor(i / 2); // Chrome works with indexes like 1.5, but I don't trust JS
-        parts[index] = parseInt(h, 16);
-      }
-      return parts;
-    };
-
-    var convert = function (input, contentType) {
-      if (input.length === 0) throw 'Zero length content passed to Hex conversion';
-
-      var byteNumbers = toBytes(input);
-      var byteArray = Uint8Array(byteNumbers);
-      return Blob([byteArray], {type: contentType});
-    };
-
-    return {
-      convert: convert
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.bowerbird.core.Species',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Fun, Option) {
-    var PICT_SIG = '{\\pict{';
-    var PICT_ID_REF = 'i';
-    var SHP_SIG = '{\\shp{';
-    var SHP_ID_REF = 's';
-
-    var getIndex = function (match, str, idx) {
-      return str.indexOf(match, idx);
-    };
-
-    var common = function (start, end, bower, regex, idRef) {
-      if (start === -1 || end === -1) return Option.none();
-      else return Option.some({
-        start: Fun.constant(start),
-        end: Fun.constant(end),
-        bower: bower, // I wish we had types
-        regex: Fun.constant(regex),
-        idRef: Fun.constant(idRef)
-      });
-    };
-
-    var extractBower = function (str, start, end) {
-      return function () {
-        return str.substring(start, end);
-      };
-    };
-
-    var endBracket = function (str, idx) {
-      var nesting = 0;
-      var max = str.length;
-      var open, close;
-      do {
-        open = str.indexOf('{', idx);
-        close = str.indexOf('}', idx);
-        if (close > open && open !== -1) {
-          // is open bracket {
-          idx = open + 1;
-          ++nesting;
-        } else if ((open > close || open < 0) && close !== -1) {
-          // is closed bracket }
-          idx = close + 1;
-          --nesting;
-        }
-        if (idx > max || close === -1) return -1;
-      } while (nesting > 0);
-      return idx;
-    };
-
-    var pict = function (str, idx, start) {
-      var end = start === -1 ? start : endBracket(str, start);
-      var bower = extractBower(str, start, end);
-      var hexRegex = /([a-hA-H0-9]+)\}$/;
-      return common(start, end, bower, hexRegex, PICT_ID_REF);
-    };
-
-    var shp = function (str, idx, start) {
-      var end = start === -1 ? start : endBracket(str, start);
-      var bower = extractBower(str, start, end);
-      // On windows or ie there is this unique object which is 32bits long that we don't want to capture
-      // {\*\blipuid 2c98da434043a6e60b0c2f43b22569bc}
-      // there are ideas for optimising the capture which will make this regex redundant see TBIO-3070
-      var hexRegex = /([a-hA-H0-9]{64,})(?:\}.*)/;
-      return common(start, end, bower, hexRegex, SHP_ID_REF);
-    };
-
-    // Can identify 2 types of embedded RTF images, pict & shp, if we find more this needs to become generic.
-    // It's complex because this is now a parser and either can come first.
-    var identify = function (str, idx) {
-      var pictStart = getIndex(PICT_SIG, str, idx);
-      var shpStart = getIndex(SHP_SIG, str, idx);
-
-      if (pictStart === -1 && shpStart === -1) return Option.none();
-      else if (pictStart === -1)      return shp(str, idx, shpStart);
-      else if (shpStart === -1)       return pict(str, idx, pictStart);
-      else if (pictStart < shpStart)  return pict(str, idx, pictStart);
-      else if (shpStart < pictStart)  return shp(str, idx, shpStart);
-      else return Option.none(); // this should never happen, but just in case
-    };
-
-    return {
-      identify: identify,
-      endBracket: endBracket
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.bowerbird.core.Rtf',
-
-  [
-    'ephox.bowerbird.codes.HexToBlob',
-    'ephox.bowerbird.core.Species',
-    'ephox.perhaps.Option'
-  ],
-
-  function (HexToBlob, Species, Option) {
-
-    var nextBower = function (s, currentIndex) {
-      // the next nest of info that contains all the data about an image
-      return Species.identify(s, currentIndex);
-    };
-
-    var extractContentType = function (pict) {
-      //
-      // The following picture types are ignored at the moment:
-      //   \emfblip, \macpict, \pmmetafileN, \wmetafileN, \dibitmapN, \wbitmapN.
-      //
-      if (pict.indexOf('\\pngblip') >= 0) return Option.some('image/png');
-      else if (pict.indexOf('\\jpegblip') >= 0) return Option.some('image/jpeg');
-      else return Option.none();
-    };
-
-    var isValidHex = function (s) {
-      return s.length % 2 === 0;
-    };
-
-    var removeCrLf = function (s) {
-      return s.replace(/\r/g, '').replace(/\n/g, '');
-    };
-
-    var extractOnlyGroup = function (s, regex) {
-      var result = s.match(regex);
-      return result !== null ? Option.some(result[1]) : Option.none();
-    };
-
-    var extractHex = function (bower, regex) {
-      return extractOnlyGroup(bower, regex).filter(isValidHex);
-    };
-
-    var extractId = function (pict) {
-      var re = /\\shplid(\d+)/;
-      return extractOnlyGroup(pict, re);
-    };
-
-    var imageFromData = function (data) {
-      // extract a nest of data
-      var bower = data.bower();
-      var regex = data.regex();
-      return extractId(bower).bind(function (id) {
-        return extractContentType(bower).bind(function (contentType) {
-          return extractHex(bower, regex).map(function (hex) {
-            return {
-              'id': data.idRef() + id,
-              'contentType': contentType,
-              'blob' : HexToBlob.convert(hex, contentType)
-            };
-          });
-        });
-      });
-    };
-
-    var extractBowers = function (rtf) {
-      var images = [];
-      var length = function () {
-        return rtf.length; // break
-      };
-
-      var addImage = function (data) {
-        var image = imageFromData(data);
-        image.each(function (image) {
-          images.push(image);
-        });
-        return data.end() + 1;
-      };
-
-      var currentIndex = 0;
-      while (currentIndex < rtf.length) {
-        currentIndex = nextBower(rtf, currentIndex).fold(length, addImage);
-      }
-      return images;
-    };
-
-    var images = function (rtf) {
-      return extractBowers(removeCrLf(rtf));
-    };
-
-    return {
-      nextBower: nextBower,
-      extractId: extractId,
-      extractContentType: extractContentType,
-      extractHex: extractHex,
-      images: images
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.bowerbird.api.Rtf',
-
-  [
-    'ephox.bowerbird.core.Rtf'
-  ],
-
-  function (Rtf) {
-	  var images = function (rtf) {
-	  	return Rtf.images(rtf);
-	  };
-
-  	return {
-  		images: images
-  	};
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.flash.Correlation',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.hermes.api.ImageExtract',
-    'ephox.perhaps.Option',
-    'ephox.scullion.Struct',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Class'
-  ],
-
-  function (Arr, ImageExtract, Option, Struct, Attr, Class) {
-    var rtfData = Struct.immutable('id', 'url');
-
-    var byCode = function (image, unique, _index) {
-      var candidate = Arr.find(unique, function (u) {
-        return Attr.get(image, 'data-image-id') === u.id();
-      });
-
-      return Option.from(candidate);
-    };
-
-    var byPosition = function (image, unique, index) {
-      return Option.from(unique[index]);
-    };
-
-    var converters = {
-      local: byPosition,
-      code: byCode
-    };
-
-    var convert = function (images, imageData, callback) {
-      var unique = [];
-
-      // create the blob struct from the RTF data, and keep a record of unique ID -> url
-      var blobs = Arr.bind(imageData, function (i) {
-        var isUnique = !Arr.exists(unique, function (d) { return d.id() === i.id; });
-
-        if (isUnique) {
-          var blob = ImageExtract.blob(i.blob);
-
-          unique.push(rtfData(i.id, blob.objurl()));
-
-          return [blob];
-        } else {
-          return [];
-        }
-      });
-
-      // load the blob data before updating the document and then firing the callback
-      ImageExtract.fromBlobs(blobs, function (assets) {
-
-        Arr.each(images, function (image, i) {
-          // TODO: Standardise the names of these data attributes. Probably namespaced.
-          var type = Attr.get(image, 'data-image-type');
-          var converter = converters[type] !== undefined ? converters[type] : Option.none;
-          converter(image, unique, i).each(function (candidate) {
-            Attr.set(image, 'src', candidate.url());
-          });
-          Class.remove(image, 'rtf-data-image');
-          Attr.remove(image, 'data-image-type');
-          Attr.remove(image, 'data-image-id');
-        });
-
-        callback(assets);
-      });
-    };
-
-    return {
-      convert: convert
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.style.Styles',
-
-  [
-    'ephox.flour.style.Resolver'
-  ],
-
-  function (Resolver) {
-    var styles = Resolver.create('ephox-cement');
-
-    return {
-      resolve: styles.resolve
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.flash.HelpCopy',
-
-  [
-    'ephox.cement.style.Styles',
-    'ephox.fred.PlatformDetection',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.InsertAll'
-  ],
-
-  function (Styles, PlatformDetection, Class, Element, InsertAll) {
-
-    var modifierKey = function () {
-      var platform = PlatformDetection.detect();
-      var mac = platform.os.isOSX();
-      return mac ? ['\u2318'] : ['Ctrl'];
-    };
-
-    var pressEscape = function (translations) {
-      return Element.fromHtml(
-        '<p>' + translations('cement.dialog.flash.press-escape') + '</p>'
-      );
-    };
-
-    var paste = function (translations) {
-      var container = Element.fromTag('div');
-      Class.add(container, Styles.resolve('flashbin-helpcopy'));
-
-      var key = modifierKey();
-
-      var instructions = Element.fromHtml(
-        '<p>' + translations('cement.dialog.flash.trigger-paste') + '</p>');
-      var kbd = Element.fromHtml(
-          '<div>' +
-            '<span class="ephox-polish-help-kbd">' +
-              key +
-            '</span>' +
-            ' + ' +
-            '<span class="ephox-polish-help-kbd">V</span>' +
-          '</div>'
-      );
-
-      Class.add(kbd, Styles.resolve('flashbin-helpcopy-kbd'));
-
-      InsertAll.append(container, [ instructions, kbd, pressEscape(translations) ]);
-
-      return container;
-    };
-
-    var noflash = function (translations) {
-      var container = Element.fromTag('div');
-      Class.add(container, Styles.resolve('flashbin-helpcopy'));
-
-      var instructions = Element.fromHtml(
-        '<p>' + translations('cement.dialog.flash.missing') + '</p>'
-      );
-
-      InsertAll.append(container, [ instructions, pressEscape(translations) ]);
-
-      return container;
-    };
-
-    var indicator = function (translations) {
-      var loading = Element.fromTag('div');
-      Class.add(loading, Styles.resolve('flashbin-loading'));
-
-      var spinner = Element.fromTag('div');
-      Class.add(spinner, Styles.resolve('flashbin-loading-spinner'));
-
-      var loadNote = Element.fromTag('p');
-      loadNote.dom().innerHTML = translations('loading.wait');
-
-      InsertAll.append(loading, [spinner, loadNote]);
-
-      return loading;
-    };
-
-    return {
-      paste: paste,
-      noflash: noflash,
-      indicator: indicator
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!window", [], function () { return window; });
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Css',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Obj',
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Body',
-    'ephox.sugar.api.Element',
-    'ephox.violin.Strings',
-    'global!Error',
-    'global!console',
-    'global!window'
-  ],
-
-  function (Type, Obj, Option, Attr, Body, Element, Strings, Error, console, window) {
-    var internalSet = function (dom, property, value) {
-      // This is going to hurt. Apologies.
-      // JQuery coerces numbers to pixels for certain property names, and other times lets numbers through.
-      // we're going to be explicit; strings only.
-      if (!Type.isString(value)) {
-        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
-        throw new Error('CSS value must be a string: ' + value);
-      }
-
-      // removed: support for dom().style[property] where prop is camel case instead of normal property name
-      dom.style.setProperty(property, value);
-    };
-
-    var set = function (element, property, value) {
-      var dom = element.dom();
-      internalSet(dom, property, value);
-    };
-
-    var setAll = function (element, css) {
-      var dom = element.dom();
-
-      Obj.each(css, function (v, k) {
-        internalSet(dom, k, v);
-      });
-    };
-
-    /*
-     * NOTE: For certain properties, this returns the "used value" which is subtly different to the "computed value" (despite calling getComputedStyle).
-     * Blame CSS 2.0.
-     *
-     * https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
-     */
-    var get = function (element, property) {
-      var dom = element.dom();
-      /*
-       * IE9 and above per
-       * https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle
-       *
-       * Not in numerosity, because it doesn't memoize and looking this up dynamically in performance critical code would be horrendous.
-       *
-       * JQuery has some magic here for IE popups, but we don't really need that.
-       * It also uses element.ownerDocument.defaultView to handle iframes but that hasn't been required since FF 3.6.
-       */
-      var styles = window.getComputedStyle(dom);
-      var r = styles.getPropertyValue(property);
-
-      // jquery-ism: If r is an empty string, check that the element is not in a document. If it isn't, return the raw value.
-      // Turns out we do this a lot.
-      var v = (r === '' && !Body.inBody(element)) ? getUnsafeProperty(dom, property) : r;
-
-      // undefined is the more appropriate value for JS. JQuery coerces to an empty string, but screw that!
-      return v === null ? undefined : v;
-    };
-
-    var getUnsafeProperty = function (dom, property) {
-      // removed: support for dom().style[property] where prop is camel case instead of normal property name
-      return dom.style.getPropertyValue(property);
-    };
-
-    /*
-     * Gets the raw value from the style attribute. Useful for retrieving "used values" from the DOM:
-     * https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
-     *
-     * Returns NONE if the property isn't set, or the value is an empty string.
-     */
-    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 isValidValue = function (tag, property, value) {
-      var element = Element.fromTag(tag);
-      set(element, property, value);
-      var style = getRaw(element, property);
-      return style.isSome();
-    };
-
-    var remove = function (element, property) {
-      var dom = element.dom();
-      /*
-       * IE9 and above - MDN doesn't have details, but here's a couple of random internet claims
-       *
-       * http://help.dottoro.com/ljopsjck.php
-       * http://stackoverflow.com/a/7901886/7546
-       */
-      dom.style.removeProperty(property);
-
-      if (Attr.has(element, 'style') && Strings.trim(Attr.get(element, 'style')) === '') {
-        // No more styles left, remove the style attribute as well
-        Attr.remove(element, 'style');
-      }
-    };
-
-    var preserve = function (element, f) {
-      var oldStyles = Attr.get(element, 'style');
-      var result = f(element);
-      var restore = oldStyles === undefined ? Attr.remove : Attr.set;
-      restore(element, 'style', oldStyles);
-      return result;
-    };
-
-    var copy = function (source, target) {
-      target.dom().style.cssText = source.dom().style.cssText;
-    };
-
-    var reflow = function (e) {
-      /* NOTE:
-       * do not rely on this return value.
-       * It's here so the closure compiler doesn't optimise the property access away.
-       */
-      return e.dom().offsetWidth;
-    };
-
-    return {
-      copy: copy,
-      set: set,
-      preserve: preserve,
-      setAll: setAll,
-      remove: remove,
-      get: get,
-      getRaw: getRaw,
-      isValidValue: isValidValue,
-      reflow: reflow
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!navigator", [], function () { return navigator; });
-(function (define, require, demand) {
-define(
-  'ephox.cement.flash.FlashInfo',
-
-  [
-    'ephox.cement.flash.HelpCopy',
-    'ephox.cement.style.Styles',
-    'ephox.fred.PlatformDetection',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.InsertAll',
-    'global!navigator'
-  ],
-
-  function (HelpCopy, Styles, PlatformDetection, Fun, Class, Css, Element, Insert, InsertAll, navigator) {
-    var platform = PlatformDetection.detect();
-
-    // separated out to constrain the scope of the JSHint override
-    var ieFlash = function () {
-      /* global ActiveXObject */
-      return new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
-    };
-
-    var hasFlash = function () {
-      try {
-        var flashObj = platform.browser.isIE() ? ieFlash() : navigator.plugins['Shockwave Flash'];
-        return flashObj !== undefined;
-      } catch (err) {
-        return false;
-      }
-    };
-
-    var noflash = function (container, _bin, reflow, translations) {
-      var help = HelpCopy.noflash(translations);
-      Insert.append(container, help);
-
-      return {
-        reset: Fun.noop
-      };
-    };
-
-    var flash = function (container, bin, reflow, translations) {
-      var help = HelpCopy.paste(translations);
-      var indicator = HelpCopy.indicator(translations);
-
-      InsertAll.append(container, [ indicator, help, bin.element() ]);
-
-      var indicatorHide = function () {
-        /*
-          X-browser magic that makes the flash blocker/s info display nicely with the cement spinner
-        */
-        Css.setAll(indicator, {
-          'height': '0',
-          'padding': '0'
-        });
-      };
-
-      var reset = function () {
-        Css.set(help, 'display', 'block');
-        Css.set(indicator, 'display', 'none');
-        reflow();
-      };
-
-      var busy = function () {
-        Css.set(help, 'display', 'none');
-        Css.set(indicator, 'display', 'block');
-        Css.remove(indicator, 'height');
-        Css.remove(indicator, 'padding');
-        reflow();
-      };
-
-      bin.events.spin.bind(busy);
-      bin.events.reset.bind(reset);
-      bin.events.hide.bind(indicatorHide);
-
-      return {
-        reset: reset
-      };
-    };
-
-    return function (bin, reflow, cementConfig) {
-      console.log(bin, reflow, cementConfig)
-      var container = Element.fromTag('div');
-      var style = 'flashbin-wrapper-' + (platform.os.isOSX() ? 'cmd' : 'ctrl');
-
-      Class.add(container, Styles.resolve(style));
-
-      var loader = hasFlash() ? flash : noflash;
-      var info = loader(container, bin, reflow, cementConfig.translations);
-
-      return {
-        element: Fun.constant(container),
-        reset: info.reset
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!clearInterval", [], function () { return clearInterval; });
-ephox.bolt.module.api.define("global!setInterval", [], function () { return setInterval; });
-(function (define, require, demand) {
-define(
-  'ephox.cement.alien.WaitForFlash',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Arr',
-    'global!clearInterval',
-    'global!setInterval'
-  ],
-
-  function (Type, Arr, clearInterval, setInterval) {
-    return function (obj, flashFunctions, callback) {
-      var functionsReady = function (dom) {
-        // Plugin objects register functions on their DOM node *after* they load, until then they are undefined.
-        return Arr.forall(flashFunctions, function (name) {
-          return Type.isFunction(dom[name]);
-        });
-      };
-
-      var search = function () {
-        // Sometimes we never get the onload callback, but PercentLoaded reaches 100 indicating it is actually running.
-        // If that happens, once the functions are available we are good to go.
-        var dom = obj.dom();
-        if (Type.isFunction(dom.PercentLoaded) && dom.PercentLoaded() === 100 && functionsReady(dom)) {
-          stop();
-          callback();
-        }
-      };
-
-      var waiting = true;
-      var reference = setInterval(search, 500);
-
-      var stop = function () {
-        if (waiting) {
-          clearInterval(reference);
-          waiting = false;
-        }
-      };
-      return {
-        stop: stop
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.epithet.Namespace',
-
-  [
-    'ephox.epithet.Global'
-  ],
-
-  function (Global) {
-    var step = function (o, part) {
-      if (o[part] === undefined || o[part] === null)
-        o[part] = {};
-      return o[part];
-    };
-
-    var namespace = function (name, target) {
-      var o = target || Global;
-      var parts = name.split('.');
-      for (var i = 0; i < parts.length; ++i)
-        o = step(o, parts[i]);
-      return o;
-    };
-
-    return {
-      namespace: namespace
-    };
-  }
-);
-
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.oilspill.callback.Globaliser',
-
-  [
-    'ephox.epithet.Namespace'
-  ],
-
-  function (Namespace) {
-    var install = function (namespace) {
-      var manager = Namespace.namespace(namespace);
-      manager.callbacks = {};
-
-      var count = 0;
-      var next = function () {
-        var ref = 'callback_' + count;
-        count++;
-        return ref;
-      };
-
-      var global = function (ref) {
-        return namespace + '.callbacks.' + ref;
-      };
-
-      var register = function (callback, permanent) {
-        var ref = next();
-        manager.callbacks[ref] = function () {
-          if (!permanent) unregister(ref);
-          callback.apply(null, arguments);
-        };
-        return global(ref);
-      };
-
-      var ephemeral = function (callback) {
-        return register(callback, false);
-      };
-
-      var permanent = function (callback) {
-        return register(callback, true);
-      };
-
-      var unregister = function (spec) {
-        var ref = spec.substring(spec.lastIndexOf('.') + 1);
-        if (manager.callbacks[ref] !== undefined)
-          delete manager.callbacks[ref];
-      };
-
-      manager.ephemeral = ephemeral;
-      manager.permanent = permanent;
-      manager.unregister = unregister;
-
-      return manager;
-    };
-
-    return {
-      install: install
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.PredicateFind',
-
-  [
-    'ephox.classify.Type',
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.Body',
-    'ephox.sugar.api.Compare',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.impl.ClosestOrAncestor'
-  ],
-
-  function (Type, Arr, Fun, Option, Body, Compare, Element, ClosestOrAncestor) {
-    var first = function (predicate) {
-      return descendant(Body.body(), predicate);
-    };
-
-    var ancestor = function (scope, predicate, isRoot) {
-      var element = scope.dom();
-      var stop = Type.isFunction(isRoot) ? isRoot : Fun.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) {
-      // This is required to avoid ClosestOrAncestor passing the predicate to itself
-      var is = function (scope) {
-        return predicate(scope);
-      };
-      return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
-    };
-
-    var sibling = function (scope, predicate) {
-      var element = scope.dom();
-      if (!element.parentNode) return Option.none();
-
-      return child(Element.fromDom(element.parentNode), function (x) {
-        return !Compare.eq(scope, x) && predicate(x);
-      });
-    };
-
-    var child = function (scope, predicate) {
-      var result = Arr.find(scope.dom().childNodes,
-        Fun.compose(predicate, Element.fromDom));
-      return Option.from(result).map(Element.fromDom);
-    };
-
-    var descendant = function (scope, predicate) {
-      var descend = function (element) {
-        for (var i = 0; i < element.childNodes.length; i++) {
-          if (predicate(Element.fromDom(element.childNodes[i])))
-            return Option.some(Element.fromDom(element.childNodes[i]));
-
-          var res = descend(element.childNodes[i]);
-          if (res.isSome())
-            return res;
-        }
-
-        return Option.none();
-      };
-
-      return descend(scope.dom());
-    };
-
-    return {
-      first: first,
-      ancestor: ancestor,
-      closest: closest,
-      sibling: sibling,
-      child: child,
-      descendant: descendant
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.PredicateExists',
-
-  [
-    'ephox.sugar.api.PredicateFind'
-  ],
-
-  function (PredicateFind) {
-    var any = function (predicate) {
-      return PredicateFind.first(predicate).isSome();
-    };
-
-    var ancestor = function (scope, predicate, isRoot) {
-      return PredicateFind.ancestor(scope, predicate, isRoot).isSome();
-    };
-
-    var closest = function (scope, predicate, isRoot) {
-      return PredicateFind.closest(scope, predicate, isRoot).isSome();
-    };
-
-    var sibling = function (scope, predicate) {
-      return PredicateFind.sibling(scope, predicate).isSome();
-    };
-
-    var child = function (scope, predicate) {
-      return PredicateFind.child(scope, predicate).isSome();
-    };
-
-    var descendant = function (scope, predicate) {
-      return PredicateFind.descendant(scope, predicate).isSome();
-    };
-
-    return {
-      any: any,
-      ancestor: ancestor,
-      closest: closest,
-      sibling: sibling,
-      child: child,
-      descendant: descendant
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Focus',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.Compare',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.PredicateExists',
-    'ephox.sugar.api.Traverse',
-    'global!document'
-  ],
-
-  function (Fun, Option, Compare, Element, PredicateExists, Traverse, document) {
-    var focus = function (element) {
-      element.dom().focus();
-    };
-
-    var blur = function (element) {
-      element.dom().blur();
-    };
-
-    var hasFocus = function (element) {
-      var doc = Traverse.owner(element).dom();
-      return element.dom() === doc.activeElement;
-    };
-
-    var active = function (_doc) {
-      var doc = _doc !== undefined ? _doc.dom() : document;
-      return Option.from(doc.activeElement).map(Element.fromDom);
-    };
-
-    var focusInside = function (element) {
-      // Only call focus if the focus is not already inside it.
-      var doc = Traverse.owner(element);
-      var inside = active(doc).filter(function (a) {
-        return PredicateExists.closest(a, Fun.curry(Compare.eq, element));
-      });
-
-      inside.fold(function () {
-        focus(element);
-      }, Fun.noop);
-    };
-
-    /**
-     * Return the descendant element that has focus.
-     * Use instead of SelectorFind.descendant(container, ':focus')
-     *  because the :focus selector relies on keyboard focus.
-     */
-    var search = function (element) {
-      return active(Traverse.owner(element)).filter(function (e) {
-        return element.dom().contains(e.dom());
-      });
-    };
-
-    return {
-      hasFocus: hasFocus,
-      focus: focus,
-      blur: blur,
-      active: active,
-      search: search,
-      focusInside: focusInside
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!clearTimeout", [], function () { return clearTimeout; });
-ephox.bolt.module.api.define("global!unescape", [], function () { return unescape; });
-(function (define, require, demand) {
-define(
-  'ephox.cement.flash.Flashbin',
-
-  [
-    'ephox.cement.alien.WaitForFlash',
-    'ephox.cement.style.Styles',
-    'ephox.compass.Arr',
-    'ephox.compass.Obj',
-    'ephox.epithet.Id',
-    'ephox.fred.PlatformDetection',
-    'ephox.oilspill.callback.Globaliser',
-    'ephox.perhaps.Option',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Focus',
-    'ephox.sugar.api.Insert',
-    'global!clearTimeout',
-    'global!console',
-    'global!setTimeout',
-    'global!unescape',
-    'global!window'
-  ],
-
-  function (WaitForFlash, Styles, Arr, Obj, Id, PlatformDetection, Globaliser, Option, Event, Events, Class, Css, Element, Focus, Insert, clearTimeout, console, setTimeout, unescape, window) {
-    var globaliser = Globaliser.install('ephox.flash');
-    var platform = PlatformDetection.detect();
-    var unbinders = Option.none();
-
-    return function (swfLoc) {
-      var events = Events.create({
-        response: Event(['rtf']),
-        spin: Event([]),
-        cancel: Event([]),
-        error: Event(['message']),
-        reset: Event([]),
-        hide: Event([])
-      });
-
-      var hasLoaded = false;
-
-      var target = Element.fromTag('div');
-      Class.add(target, Styles.resolve('flashbin-target'));
-
-      var process = function (rtfData) {
-        // The setTimeout here is to detach it from the event stack/queue, so that the UI is updated
-        // during this block.
-        setTimeout(function () {
-          events.trigger.response(unescape(rtfData));
-        }, 0);
-      };
-
-      var loadComplete = function () {
-        waiting.stop();
-        if (hasLoaded) return;
-        hasLoaded = true;
-        try {
-          var dom = bin.dom();
-          Obj.each(flashFunctionMapping, function (v, k) {
-            var f = dom[k];
-            f.call(dom, v); // plugin requires 'this' to be set correctly
-          });
-          events.trigger.reset();
-          clearOverTime();
-          focus();
-        } catch (e) {
-          console.log('Flash dialog - Error during onLoad ', e);
-        }
-      };
-
-      var onloadCallback = globaliser.permanent(loadComplete);
-
-      var flashFunctionMapping = {
-        'setSpinCallback': globaliser.permanent(events.trigger.spin),
-        'setPasteCallback': globaliser.permanent(process),
-        'setEscapeCallback': globaliser.permanent(events.trigger.cancel),
-        'setErrorCallback': globaliser.permanent(events.trigger.error)
-      };
-
-      var createObject = function () {
-        var swf = swfLoc.replace(/^https?:\/\//, '//');
-        var flashVars = 'onLoad=' + onloadCallback;
-
-        //
-        // NOTE: the wmode (window mode) of "opaque" here has been suggested as on various forums as
-        // required to get the swf to focus on Firefox. e.g.
-        // http://stackoverflow.com/questions/7921690/how-do-i-make-my-flash-object-get-focus-on-load
-        // This setting did not seem to cause problems on our other supported browsers.
-        // Please do not return this setting to "transparent" without serious testing.
-        //
-        var commonParams =
-          '    <param name="allowscriptaccess" value="always">' +
-          '    <param name="wmode" value="opaque">' +
-          '    <param name="FlashVars" value="' + flashVars + '">';
-
-        if (platform.browser.isIE() && platform.browser.version.major === 10) {
-          var id = Id.generate('flash-bin');
-          return Element.fromHtml(
-            '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="' + id + '">' +
-              '<param name="movie" value="' + swf + '">' +
-              commonParams +
-            '</object>');
-        } else {
-          return Element.fromHtml(
-            '<object type="application/x-shockwave-flash" data="' + swf + '">' +
-              commonParams +
-            '</object>');
-        }
-      };
-
-      var bin = createObject();
-
-      var binStealth = function () {
-        Css.setAll(bin, {
-          'width' : '2px',
-          'height': '2px'
-        });
-      };
-
-      binStealth();
-      var waiting = WaitForFlash(bin, Obj.keys(flashFunctionMapping), loadComplete);
-
-      Insert.append(target, bin);
-
-      var element = function () {
-        return target;
-      };
-
-      var focus = function () {
-        if (platform.browser.isFirefox()) {
-          // On Firefox, pasting into flash also fires a paste event wherever the window selection is
-          window.getSelection().removeAllRanges();
-        }
-        Focus.focus(bin);
-      };
-
-      var timerHandle = null;
-
-      var overTime = function () {
-        Class.add(target, Styles.resolve('flash-activate'));
-        Css.remove(bin, 'height');
-        Css.remove(bin, 'width');
-        events.trigger.hide();
-      };
-
-      var clearOverTime = function () {
-        clearTimeout(timerHandle);
-        Class.remove(target, Styles.resolve('flash-activate'));
-        binStealth();
-      };
-
-      var activate = function () {
-        // TODO: improvement create a custom poll event for .swf has loaded, then fire overtime.
-        timerHandle = setTimeout(overTime, 3000);
-        events.trigger.spin();
-        Css.set(target, 'display', 'block');
-        focus();
-      };
-
-      var deactivate = function () {
-        Css.set(target, 'display', 'none');
-        unbinders.each(function (unbinders) {
-          Arr.each(unbinders, function (unbinder) {
-            unbinder.unbind();
-          });
-        });
-      };
-
-      var destroy = function () {
-        deactivate();
-        Arr.each(Obj.values(flashFunctionMapping), function (s) {
-          globaliser.unregister(s);
-        });
-        globaliser.unregister(onloadCallback);
-        waiting.stop(); // in case the user cancels
-      };
-
-      return {
-        focus: focus,
-        element: element,
-        activate: activate,
-        deactivate: deactivate,
-        destroy: destroy,
-        events: events.registry
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.impl.FilteredEvent',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (Fun, Element) {
-
-    var mkEvent = function (target, x, y, stop, prevent, kill, raw) {
-      // switched from a struct to manual Fun.constant() because we are passing functions now, not just values
-      return {
-        'target':  Fun.constant(target),
-        'x':       Fun.constant(x),
-        'y':       Fun.constant(y),
-        'stop':    stop,
-        'prevent': prevent,
-        'kill':    kill,
-        'raw':     Fun.constant(raw)
-      };
-    };
-
-    var handle = function (filter, handler) {
-      return function (rawEvent) {
-        if (!filter(rawEvent)) return;
-
-        // IE9 minimum
-        var target = Element.fromDom(rawEvent.target);
-
-        var stop = function () {
-          rawEvent.stopPropagation();
-        };
-
-        var prevent = function () {
-          rawEvent.preventDefault();
-        };
-
-        var kill = Fun.compose(prevent, stop); // more of a sequence than a compose, but same effect
-
-        // FIX: Don't just expose the raw event. Need to identify what needs standardisation.
-        var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);
-        handler(evt);
-      };
-    };
-
-    var binder = function (element, event, filter, handler, useCapture) {
-      var wrapped = handle(filter, handler);
-      // IE9 minimum
-      element.dom().addEventListener(event, wrapped, useCapture);
-
-      return {
-        unbind: Fun.curry(unbind, element, event, wrapped, useCapture)
-      };
-    };
-
-    var bind = function (element, event, filter, handler) {
-      return binder(element, event, filter, handler, false);
-    };
-
-    var capture = function (element, event, filter, handler) {
-      return binder(element, event, filter, handler, true);
-    };
-
-    var unbind = function (element, event, handler, useCapture) {
-      // IE9 minimum
-      element.dom().removeEventListener(event, handler, useCapture);
-    };
-
-    return {
-      bind: bind,
-      capture: capture
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.DomEvent',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.sugar.impl.FilteredEvent'
-  ],
-
-  function (Fun, FilteredEvent) {
-    var filter = Fun.constant(true); // no filter on plain DomEvents
-
-    var bind = function (element, event, handler) {
-      return FilteredEvent.bind(element, event, filter, handler);
-    };
-
-    var capture = function (element, event, handler) {
-      return FilteredEvent.capture(element, event, filter, handler);
-    };
-
-    return {
-      bind: bind,
-      capture: capture
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.flash.FlashDialog',
-
-  [
-    'ephox.cement.flash.FlashInfo',
-    'ephox.cement.flash.Flashbin',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sugar.api.DomEvent',
-    'ephox.sugar.api.Element',
-    'global!window'
-  ],
-
-  function (FlashInfo, Flashbin, Event, Events, DomEvent, Element, window) {
-
-    return function (createDialog, settings) {
-      var translations = settings.translations;
-
-      var events = Events.create({
-        response: Event(['rtf', 'hide']),
-        cancel: Event([]),
-        error: Event(['message'])
-      });
-
-      var open = function () {
-        var bin = Flashbin(settings.swf);
-        bin.deactivate();
-
-        var win = Element.fromDom(window);
-        var clickEvent = DomEvent.bind(win, 'mouseup', bin.focus);
-
-        var hide = function () {
-          destroy();
-        };
-
-        var cancel = function () {
-          hide();
-          events.trigger.cancel();
-        };
-
-        bin.events.cancel.bind(cancel);
-        bin.events.response.bind(function (event) {
-          // Don't hide immediately - keep the please wait going until the images are converted
-          events.trigger.response(event.rtf(), hide);
-        });
-
-        bin.events.error.bind(function (event) {
-          hide();
-          events.trigger.error(event.message());
-        });
-
-        var dialog = createDialog();
-        dialog.setTitle( translations('cement.dialog.flash.title'));
-
-        var information = FlashInfo(bin, dialog.reflow, settings);
-        information.reset();
-        dialog.setContent(information.element());
-
-        dialog.events.close.bind(cancel);
-        dialog.show();
-
-        bin.activate();
-
-        var destroy = function () {
-          clickEvent.unbind();
-          dialog.destroy();
-          bin.destroy();
-        };
-      };
-
-      return {
-        open: open,
-        events: events.registry
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Replication',
-
-  [
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.InsertAll',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Attr, Element, Insert, InsertAll, Remove, Traverse) {
-    var clone = function (original, deep) {
-      return Element.fromDom(original.dom().cloneNode(deep));
-    };
-
-    /** Shallow clone - just the tag, no children */
-    var shallow = function (original) {
-      return clone(original, false);
-    };
-
-    /** Deep clone - everything copied including children */
-    var deep = function (original) {
-      return clone(original, true);
-    };
-
-    /** Shallow clone, with a new tag */
-    var shallowAs = function (original, tag) {
-      var nu = Element.fromTag(tag);
-
-      var attributes = Attr.clone(original);
-      Attr.setAll(nu, attributes);
-
-      return nu;
-    };
-
-    /** Deep clone, with a new tag */
-    var copy = function (original, tag) {
-      var nu = shallowAs(original, tag);
-
-      // NOTE
-      // previously this used serialisation:
-      // nu.dom().innerHTML = original.dom().innerHTML;
-      //
-      // Clone should be equivalent (and faster), but if TD <-> TH toggle breaks, put it back.
-
-      var cloneChildren = Traverse.children(deep(original));
-      InsertAll.append(nu, cloneChildren);
-
-      return nu;
-    };
-
-    /** Change the tag name, but keep all children */
-    var mutate = function (original, tag) {
-      var nu = shallowAs(original, tag);
-
-      Insert.before(original, nu);
-      var children = Traverse.children(original);
-      InsertAll.append(nu, children);
-      Remove.remove(original);
-      return nu;
-    };
-
-    return {
-      shallow: shallow,
-      shallowAs: shallowAs,
-      deep: deep,
-      copy: copy,
-      mutate: mutate
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.limbo.api.RtfImage',
-
-  [
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Node',
-    'ephox.sugar.api.PredicateFind',
-    'ephox.sugar.api.Replication',
-    'ephox.sugar.api.SelectorFilter',
-    'ephox.violin.Strings'
-  ],
-
-  function (Option, Attr, Class, Css, Element, Node, PredicateFind, Replication, SelectorFilter, Strings) {
-    var searchIn = function (comment, selector) {
-      var innards = Node.value(comment);
-      var container = Element.fromTag('div');
-      var substr = innards.indexOf(']>');
-      container.dom().innerHTML = innards.substr(substr + ']>'.length);
-      // Note: It doesn't look like sizzle can pick up namespaced tags with selectors.
-      return PredicateFind.descendant(container, function (elem) {
-        return Node.name(elem) === selector;
-      });
-    };
-
-    var scour = function (target) {
-      return Node.isComment(target) ? searchIn(target, 'v:shape') : Option.none();
-    };
-
-    var vshape = function (original) {
-      return scour(original).map(function (image) {
-        // NOTE: If we discover more than 2 possible attributes, de-dupe with HtmlPaste somehow
-        var spid = Attr.get(image, 'o:spid');
-        var vShapeId = spid === undefined ? Attr.get(image, 'id') : spid;
-
-        var result = Element.fromTag('img');
-        Class.add(result, 'rtf-data-image');
-        Attr.set(result, 'data-image-id', vShapeId.substr('_x0000_'.length));
-        Attr.set(result, 'data-image-type', 'code');
-        Css.setAll(result, {
-          width: Css.get(image, 'width'),
-          height: Css.get(image, 'height')
-        });
-
-        return result;
-      });
-    };
-
-    var local = function (original) {
-      if (Node.name(original) === 'img') {
-        var src = Attr.get(original, 'src');
-        if (src !== undefined && src !== null && Strings.startsWith(src, 'file://')) {
-          var result = Replication.shallow(original);
-          var parts = src.split(/[\/\\]/);
-          var last = parts[parts.length - 1];
-          Attr.set(result, 'data-image-id', last);
-          Attr.remove(result, 'src');
-          Attr.set(result, 'data-image-type', 'local');
-          Class.add(result, 'rtf-data-image');
-          return Option.some(result);
-        } else {
-          return Option.none();
-        }
-      } else {
-        return Option.none();
-      }
-    };
-
-    var exists = function (container) {
-      return find(container).length > 0;
-    };
-
-    var find = function (container) {
-      return SelectorFilter.descendants(container, '.rtf-data-image');
-    };
-
-    return {
-      local: local,
-      vshape: vshape,
-      find: find,
-      exists: exists,
-      scour: scour
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.flash.Flash',
-
-  [
-    'ephox.bowerbird.api.Rtf',
-    'ephox.cement.flash.Correlation',
-    'ephox.cement.flash.FlashDialog',
-    'ephox.compass.Arr',
-    'ephox.limbo.api.RtfImage',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Rtf, Correlation, FlashDialog, Arr, RtfImage, Event, Events, Remove, Traverse) {
-    return function (createDialog, cementConfig) {
-      var events = Events.create({
-        error: Event(['message']),
-        insert: Event(['elements', 'assets'])
-      });
-
-      var gordon = function (content, baseAssets) {
-        var response = function (event) {
-          var hideDialog = event.hide();
-          var imageData = Rtf.images(event.rtf());
-          var images = RtfImage.find(content);
-
-          Correlation.convert(images, imageData, function (assets) {
-            events.trigger.insert(Traverse.children(content), assets.concat(baseAssets));
-
-            // when images are pasted, the flash dialog doesn't automatically hide
-            hideDialog();
-          });
-        };
-
-        var cancelImages = function () {
-          var images = RtfImage.find(content);
-          Arr.each(images, Remove.remove);
-          events.trigger.insert(Traverse.children(content), baseAssets);
-        };
-
-        if (cementConfig.allowLocalImages) {
-          var flash = FlashDialog(createDialog, cementConfig);
-          flash.events.response.bind(response);
-          flash.events.cancel.bind(cancelImages);
-          flash.events.error.bind(function (event) { events.trigger.error(event.message()); });
-          flash.open();
-        } else {
-          cancelImages();
-          events.trigger.error('errors.local.images.disallowed');
-        }
-      };
-
-      return {
-        events: events.registry,
-        gordon: gordon
-      };
-
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.smartpaste.MergeSettings',
-
-  [
-    'ephox.cement.style.Styles',
-    'ephox.highway.Merger',
-    'ephox.peanut.Fun',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert'
-  ],
-
-  function (Styles, Merger, Fun, Event, Events, Class, Element, Insert) {
-    return function (createDialog, settings) {
-      var translations = settings.translations;
-
-      var result = function (value, settings, callback) {
-        callback(Merger.merge(settings, {
-          mergeOfficeStyles: value,
-          mergeHtmlStyles: value
-        }));
-      };
-
-      var events = Events.create({
-        open: Event([]),
-        cancel: Event([]),
-        close: Event([])
-      });
-
-      var showDialog = function (settings, callback) {
-        var clean = function () {
-          hide();
-          result(false, settings, callback);
-        };
-
-        var merge = function () {
-          hide();
-          result(true, settings, callback);
-        };
-
-        var content = Element.fromTag('div');
-
-        Class.add(content, Styles.resolve('styles-dialog-content'));
-
-        var instructions = Element.fromTag('p');
-        var text = Element.fromText(translations('cement.dialog.paste.instructions'));
-        Insert.append(instructions, text);
-        Insert.append(content, instructions);
-
-        var cleanButton = {
-          text: translations('cement.dialog.paste.clean'),
-          tabindex: 0,
-          className: Styles.resolve('clean-styles'),
-          click: clean
-        };
-        var mergeButton = {
-          text: translations('cement.dialog.paste.merge'),
-          tabindex: 1,
-          className: Styles.resolve('merge-styles'),
-          click: merge
-        };
-
-        var dialog = createDialog(true);
-        dialog.setTitle(translations('cement.dialog.paste.title'));
-        dialog.setContent(content);
-        dialog.setButtons([cleanButton, mergeButton]);
-        dialog.show();
-
-        var hide = function () {
-          events.trigger.close();
-          dialog.destroy();
-        };
-
-        var cancel = function () {
-          events.trigger.cancel();
-          hide();
-        };
-
-        dialog.events.close.bind(cancel);
-
-        events.trigger.open();
-      };
-
-      var get = function (officePaste, callback) {
-        var input = officePaste ? 'officeStyles' : 'htmlStyles';
-
-        var settingToUse = settings[input];
-
-        if (settingToUse === 'clean') {
-          result(false, settings, callback);
-        } else if (settingToUse === 'merge') {
-          result(true, settings, callback);
-        } else {
-          // everything else is prompt
-          showDialog(settings, callback);
-        }
-      };
-
-      return {
-        events: events.registry,
-        get: get,
-        destroy: Fun.noop
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.smartpaste.Inspection',
-
-  [
-
-  ],
-
-  function () {
-    var isValidData = function (data) {
-      // IE doesn't even have data. Spartan has data, but no types.
-      return data !== undefined && data.types !== undefined && data.types !== null;
-    };
-
-    return {
-      isValidData: isValidData
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.html.Transform',
-
-  [
-    'ephox.classify.Type',
-    'ephox.sugar.api.Attr'
-  ],
-
-  function (Type, Attr) {
-    var rotateImage = function (img, vshapeAttrs) {
-      // MS Word tends to store rotated images as raw with a rotation applied
-      var style = vshapeAttrs.style;
-      if (Attr.has(img, 'width') && Attr.has(img, 'height') && Type.isString(style)) {
-        var rotation = style.match(/rotation:([^;]*)/);
-        if (rotation !== null && (rotation[1] === '90' || rotation[1] === '-90')) {
-          // We can't actually rotate the binary data, so just swap the width and height.
-          // When we decide to rotate the data, we can't do it here.
-          Attr.setAll(img, {
-            width: Attr.get(img, 'height'),
-            height: Attr.get(img, 'width')
-          });
-        }
-      }
-    };
-
-    return {
-      rotateImage: rotateImage
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Comments',
-
-  [
-    'ephox.fred.PlatformDetection',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Element',
-    'global!document'
-  ],
-
-  function (PlatformDetection, Fun, Element, document) {
-
-    var regularGetNodes = function (texas) {
-      var ret = [];
-      while (texas.nextNode() !== null) ret.push(Element.fromDom(texas.currentNode));
-      return ret;
-    };
-
-    var ieGetNodes = function (texas) {
-      // IE throws an error on nextNode() when there are zero nodes available, and any attempts I made to detect this
-      // just resulted in throwing away valid cases
-      try {
-        return regularGetNodes(texas);
-      } catch (e) {
-        return [];
-      }
-    };
-
-    // I hate needing platform detection in Sugar, but the alternative is to always try/catch which will swallow coding errors as well
-    var browser = PlatformDetection.detect().browser;
-    var getNodes = browser.isIE() || browser.isSpartan() ? ieGetNodes : regularGetNodes;
-
-    // Weird, but oh well
-    var noFilter = Fun.constant(Fun.constant(true));
-
-    var find = function (node, filterOpt) {
-
-      var vmlFilter = filterOpt.fold(noFilter, function (filter) {
-        return function (comment) {
-          return filter(comment.nodeValue);
-        };
-      });
-
-      // the standard wants an object, IE wants a function. But everything is an object, so let's be sneaky
-      // http://www.bennadel.com/blog/2607-finding-html-comment-nodes-in-the-dom-using-treewalker.htm
-      vmlFilter.acceptNode = vmlFilter;
-
-      // TODO: Add NodeFilter to numerosity (requires IE9 so can't be a global import)
-      var texas = document.createTreeWalker(node.dom(), NodeFilter.SHOW_COMMENT, vmlFilter, false);
-
-      return getNodes(texas);
-    };
-    return {
-      find: find
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.alien.Comments',
-
-  [
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.Comments',
-    'ephox.violin.Strings',
-    'global!document'
-  ],
-
-  function (Option, Comments, Strings, document) {
-
-    var find = function (node) {
-      // TODO: Should this be in lingo?
-      return Comments.find(node, Option.some(function (value) {
-        return Strings.startsWith(value, '[if gte vml 1]'); // faster than contains on huge MS office comments
-      }));
-    };
-    return {
-      find: find
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.perhaps.Options',
-
-  [
-    'ephox.perhaps.Option'
-  ],
-
-  function (Option) {
-    var cat = function (arr) {
-      var r = [];
-      var push = function (x) {
-        r.push(x);
-      };
-      for (var i = 0; i < arr.length; i++) {
-        arr[i].each(push);
-      }
-      return r;
-    };
-
-    var findMap = function (arr, f) {
-      for (var i = 0; i < arr.length; i++) {
-        var r = f(arr[i], i);
-        if (r.isSome()) {
-          return r;
-        }
-      }
-      return Option.none();
-    };
-
-    /**
-    if all elements in arr are 'some', their inner values are passed as arguments to f
-    f must have arity arr.length
-    */
-    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));
-    };
-
-    return {
-      cat: cat,
-      findMap: findMap,
-      liftN: liftN
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.images.ImageReference',
-
-  [
-    'ephox.cement.alien.Comments',
-    'ephox.compass.Arr',
-    'ephox.limbo.api.RtfImage',
-    'ephox.perhaps.Option',
-    'ephox.perhaps.Options',
-    'ephox.scullion.Struct',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Elements',
-    'ephox.sugar.api.SelectorFilter',
-    'global!console'
-  ],
-
-  function (Comments, Arr, RtfImage, Option, Options, Struct, Attr, Elements, SelectorFilter, console) {
-    var imgData = Struct.immutable('img', 'vshape');
-
-    var getImageAttrs = function (image) {
-      var imgAttrs = getAttrs(image);
-      imgAttrs._rawElement = image.dom();
-      return imgAttrs;
-    };
-
-    var getVshapeAttrs = function (vshape) {
-      var vsAttr = getAttrs(vshape);
-      vsAttr._rawElement = vshape.dom();
-      return vsAttr;
-    };
-
-    var getAttrs = function (element) {
-      return Attr.clone(element);
-    };
-
-    var extract = function (raw) {
-      var nodes = Elements.fromHtml(raw);
-      var images = Arr.bind(nodes, function (n) {
-        return SelectorFilter.descendants(n, 'img');
-      });
-
-      var comments = Arr.bind(nodes, Comments.find);
-      var vshapes = Options.cat(Arr.map(comments, RtfImage.scour));
-
-      var list = Arr.map(images, function (image) {
-        return traverse(image, vshapes);
-      });
-      return Options.cat(list);
-    };
-
-    var traverse = function (element, vshapes) {
-      var vshapeTarget = Attr.get(element, 'v:shapes');
-
-      var vshapeOpt = Option.from(Arr.find(vshapes, function (vshape) {
-        return Attr.get(vshape, 'id') === vshapeTarget;
-      }));
-
-      if (vshapeOpt.isNone()) console.log('WARNING: unable to find data for image', element.dom());
-
-      return vshapeOpt.map(function (vshape) {
-        return pack(element, vshape);
-      });
-    };
-
-    var pack = function (img, vshape) {
-      return imgData(
-        getImageAttrs(img),
-        getVshapeAttrs(vshape)
-      );
-    };
-
-    return {
-      extract: extract
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.photon.Reader',
-
-  [
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (Option, Element) {
-
-    var iframeDoc = function (element) {
-      var dom = element.dom();
-      try {
-        var idoc = dom.contentWindow ? dom.contentWindow.document : dom.contentDocument;
-        return idoc !== undefined && idoc !== null ? Option.some(Element.fromDom(idoc)) : Option.none();
-      } catch (err) {
-        // ASSUMPTION: Permission errors result in an unusable iframe.
-        console.log('Error reading iframe: ', dom);
-        console.log('Error was: ' + err);
-        return Option.none();
-      }
-    };
-
-    var doc = function (element) {
-      var optDoc = iframeDoc(element);
-      return optDoc.fold(function () {
-        return element;
-      }, function (v) {
-        return v;
-      });
-    };
-
-    return {
-      doc: doc
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.photon.Writer',
-
-  [
-    'ephox.photon.Reader',
-    'ephox.sugar.api.Body'
-  ],
-
-  function (Reader, Body) {
-
-    var write = function (element, content) {
-      if (!Body.inBody(element)) throw 'Internal error: attempted to write to an iframe that is not in the DOM';
-
-      var doc = Reader.doc(element);
-      var dom = doc.dom();
-      dom.open();
-      dom.writeln(content);
-      dom.close();
-    };
-
-    return {
-      write: write
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Ready',
-
-  [
-    'ephox.sugar.api.DomEvent',
-    'ephox.sugar.api.Element',
-    'global!document'
-  ],
-
-  function (DomEvent, Element, document) {
-    var execute = function (f) {
-      /*
-       * We only use this in one place, so creating one listener per ready request is more optimal than managing
-       * a single event with a queue of functions.
-       */
-
-      /* The general spec describes three states: loading, complete, and interactive.
-       * https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness
-       *
-       * loading: the document is not ready (still loading)
-       * interactive: the document is ready, but sub-resources are still loading
-       * complete: the document is completely ready.
-       *
-       * Note, IE and w3 schools talk about: uninitialized and loaded. We may have to handle them in the future.
-       */
-      if (document.readyState === 'complete' || document.readyState === 'interactive') f();
-      else {
-        // Note that this fires when DOM manipulation is allowed, but before all resources are
-        // available. This is the best practice but might be a bit weird.
-        var listener = DomEvent.bind(Element.fromDom(document), 'DOMContentLoaded', function () { // IE9 minimum
-          f();
-          listener.unbind();
-        });
-      }
-    };
-
-    return {
-      execute: execute
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.keurig.loader.GWTLoader',
-
-  [
-    'ephox.fred.PlatformDetection',
-    'ephox.oilspill.callback.Globaliser',
-    'ephox.peanut.Fun',
-    'ephox.peanut.Thunk',
-    'ephox.perhaps.Option',
-    'ephox.photon.Writer',
-    'ephox.sugar.api.Body',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.DomEvent',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.Ready',
-    'ephox.sugar.api.Remove'
-  ],
-
-  function (PlatformDetection, Globaliser, Fun, Thunk, Option, Writer, Body, Css, DomEvent, Element, Insert, Ready, Remove) {
-    var globaliser = Globaliser.install('ephox.keurig.init');
-    var cleanFunction = Option.none();
-
-    // IE11 can't handle loading GWT in an iframe, not with the collapse into a single JS file instead of 5 HTML files.
-    // It seems to load ok in WordTest.html, though, which does it directly - worth thinking about if we ever need GWT in IE.
-    var load = PlatformDetection.detect().browser.isIE() ? Fun.noop : Thunk.cached(function (baseUrl) {
-      var container = Element.fromTag('div');
-      if (baseUrl === undefined) throw 'baseUrl was undefined';
-
-      var iframe = Element.fromTag('iframe');
-
-      Css.setAll(container, {
-        display: 'none'
-      });
-
-      var frameLoad = DomEvent.bind(iframe, 'load', function () {
-        // called when gwt moudle has finished loading.
-        var gwtInitCallback = function (cleanDocument) {
-          cleanFunction = Option.some(cleanDocument);
-          if (!PlatformDetection.detect().browser.isSafari()) {
-            // Safari can't handle executing JS in an iframe that has been removed from the page
-            Remove.remove(container);
-          }
-        };
-
-        var gwtInitRef = globaliser.ephemeral(gwtInitCallback);
-        var gwtjs = baseUrl + '/wordimport.js';
-
-        Writer.write(iframe,
-        '<script type="text/javascript" src="' + gwtjs + '"></script>' +
-        '<script type="text/javascript">' +
-          'function gwtInited () {' +
-            'parent.window.' + gwtInitRef + '(com.ephox.keurig.WordCleaner.cleanDocument);' +
-          '};' +
-        '</script>');
-        frameLoad.unbind();
-      });
-
-      Ready.execute(function () {
-        Insert.append(Body.body(), container);
-        Insert.append(container, iframe);
-      });
-    });
-
-    var cleanDocument = function (wordHTML, merge) {
-      return cleanFunction.map(function (f) {
-        // TODO: This should probably do something with the log instead of throwing it away in the Java side
-        return f(wordHTML, merge);
-      });
-    };
-
-    var ready = function () {
-      return cleanFunction.isSome();
-    };
-
-    return {
-      load: load,
-      cleanDocument: cleanDocument,
-      ready: ready
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.keurig.api.WordCleaner',
-
-  [
-    'ephox.keurig.loader.GWTLoader'
-  ],
-
-  function (GWTLoader) {
-    return function (baseUrl) {
-      if (!GWTLoader.ready()) GWTLoader.load(baseUrl);
-
-      return {
-        cleanDocument: GWTLoader.cleanDocument
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.photon.Sandbox',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.photon.Writer',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.DomEvent',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.Remove',
-    'global!setTimeout'
-  ],
-
-  function (Fun, Writer, Css, DomEvent, Element, Insert, Remove, setTimeout) {
-    return function (uiContainer) {
-       /**
-        * Creates a sandbox to play in.
-        *
-        * Asynchronously creates an iframe, runs the synchronous function `f` on the DOM, and then passes the result to the callback.
-        *
-        * This is done so that the sandbox can guarantee the iframe has been removed from the page, and available for garbage collection, before the callback is executed.
-        *
-        * html:
-        *   source to load into the iframe
-        * f: (document -> body -> A)
-        *   function that operates on the iframe DOM, passed both document reference and body element
-        * callback: (A -> Unit)
-        *   function that receives the output of `f` when the iframe has been cleaned up
-        */
-      var play = function (html, f, callback) {
-        var outputContainer = Element.fromTag('div');
-        var iframe = Element.fromTag('iframe');
-
-        Css.setAll(outputContainer, {
-          display: 'none'
-        });
-
-        var load = DomEvent.bind(iframe, 'load', function () {
-          Writer.write(iframe, html);
-
-          var rawDoc = iframe.dom().contentWindow.document;
-          if (rawDoc === undefined) throw "sandbox iframe load event did not fire correctly";
-          var doc = Element.fromDom(rawDoc);
-
-          var rawBody = rawDoc.body;
-          if (rawBody === undefined) throw "sandbox iframe does not have a body";
-          var body = Element.fromDom(rawBody);
-
-          // cache
-          var result = f(doc, body);
-
-          // unbind and remove everything
-          load.unbind();
-          Remove.remove(outputContainer);
-
-          // setTimeout should allow the garbage collector to cleanup if necessary
-          setTimeout(Fun.curry(callback, result), 0);
-        });
-        Insert.append(outputContainer, iframe);
-        Insert.append(uiContainer, outputContainer);
-      };
-
-      return {
-        play: play
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.impl.NodeValue',
-
-  [
-    'ephox.perhaps.Option',
-    'global!Error'
-  ],
-
-  function (Option, Error) {
-    return function (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 getOption = function (element) {
-        try {
-          return is(element) ? Option.some(element.dom().nodeValue) : Option.none();
-        } catch (e) {
-          return Option.none(); // Prevent IE10 from throwing exception when setting parent innerHTML clobbers (TBIO-451).
-        }
-      };
-
-      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
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Comment',
-
-  [
-    'ephox.sugar.api.Node',
-    'ephox.sugar.impl.NodeValue'
-  ],
-
-  function (Node, NodeValue) {
-    var api = NodeValue(Node.isComment, 'comment');
-
-    var get = function (element) {
-      return api.get(element);
-    };
-
-    var getOption = function (element) {
-      return api.getOption(element);
-    };
-
-    var set = function (element, value) {
-      api.set(element, value);
-    };
-
-    return {
-      get: get,
-      getOption: getOption,
-      set: set
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Html',
-
-  [
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert'
-  ],
-
-  function ( Element, Insert) {
-    var get = function (element) {
-      return element.dom().innerHTML;
-    };
-
-    var set = function (element, content) {
-      element.dom().innerHTML = content;
-    };
-
-    var getOuter = function (element) {
-      var container = Element.fromTag('div');
-      var clone = Element.fromDom(element.dom().cloneNode(true));
-      Insert.append(container, clone);
-      return get(container);
-    };
-
-    return {
-      get: get,
-      set: set,
-      getOuter: getOuter
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.vogue.css.Set',
-
-  [
-    'ephox.sugar.api.Insert'
-  ],
-
-  function (Insert) {
-
-    var setCss = function (style, css, element) {
-      if (style.dom().styleSheet)
-        style.dom().styleSheet.cssText = css;  // IE
-      else
-        Insert.append(style, element);
-    };
-
-    return {
-      setCss: setCss
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.vogue.util.Regex',
-
-  [
-  ],
-
-  function () {
-    var escape = function (text) {
-      return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
-    };
-
-    return {
-      escape: escape
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-ephox.bolt.module.api.define("global!RegExp", [], function () { return RegExp; });
-(function (define, require, demand) {
-define(
-  'ephox.vogue.css.Url',
-
-  [
-    'ephox.compass.Obj',
-    'ephox.vogue.util.Regex',
-    'global!RegExp'
-  ],
-
-  function (Obj, Regex, RegExp) {
-    var replace = function (css, urlPrefix, replacement) {
-      var r = new RegExp('url\\(\\s*[\'"]?' + Regex.escape(urlPrefix) + '(.*?)[\'"]?\\s*\\)', 'g');
-      return css.replace(r, 'url("' + replacement + '$1")');
-    };
-
-    var replaceMany = function (css, replacements) {
-      var current = css;
-      Obj.each(replacements, function (value, key) {
-        current = replace(current, key, value);
-      });
-      return current;
-    };
-
-    return {
-      replace: replace,
-      replaceMany: replaceMany
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.vogue.api.DocStyle',
-
-  [
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.SelectorFind',
-    'ephox.vogue.css.Set',
-    'ephox.vogue.css.Url',
-    'global!Array'
-  ],
-
-  function (Attr, Element, Insert, SelectorFind, Set, Url, Array) {
-
-    var styletag = function (doc) {
-      var style = Element.fromTag('style', doc.dom());
-      Attr.set(style, 'type', 'text/css');
-      return style;
-    };
-
-    var setCss = function (style, css, doc) {
-      Set.setCss(style, css, Element.fromText(css, doc.dom()));
-    };
-
-    var inject = function (css, replacements, doc) {
-      var style = styletag(doc);
-      var replacedCss = replacements === undefined ? css : Url.replaceMany(css, replacements);
-      setCss(style, replacedCss, doc);
-      var head = SelectorFind.descendant(doc, 'head').getOrDie();
-      Insert.append(head, style);
-    };
-
-    var stylesheets = function (doc) {
-      var domStyleSheets = doc.dom().styleSheets;
-      return Array.prototype.slice.call(domStyleSheets);
-    };
-
-    return {
-      stylesheets: stylesheets,
-      inject: inject
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.vogue.css.Rules',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.scullion.Struct'
-  ],
-
-  function (Arr, Struct) {
-    var ruleStruct = Struct.immutable('selector', 'style');
-
-    var extract = function (stylesheet) {
-      var domRules = stylesheet.cssRules;
-      return Arr.map(domRules, function (rule) {
-        var selector = rule.selectorText;
-        var style = rule.style.cssText;
-        if (style === undefined) {
-          // This should be picked up in testing, and perhaps delete the check eventually
-          throw "WARNING: Browser does not support cssText property";
-        }
-        return ruleStruct(selector, style);
-      });
-    };
-
-    var extractAll = function (stylesheets) {
-      return Arr.bind(stylesheets, extract);
-    };
-
-    return {
-      extract: extract,
-      extractAll: extractAll
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.vogue.api.Rules',
-
-  [
-    'ephox.vogue.css.Rules'
-  ],
-
-  function (Rules) {
-    var extract = function (stylesheet) {
-      return Rules.extract(stylesheet);
-    };
-
-    var extractAll = function (stylesheets) {
-      return Rules.extractAll(stylesheets);
-    };
-
-    return {
-      extract: extract,
-      extractAll: extractAll
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.html.HtmlPaste',
-
-  [
-    'ephox.cement.html.Transform',
-    'ephox.cement.images.ImageReference',
-    'ephox.classify.Type',
-    'ephox.compass.Arr',
-    'ephox.keurig.api.WordCleaner',
-    'ephox.peanut.Fun',
-    'ephox.photon.Sandbox',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Comment',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Elements',
-    'ephox.sugar.api.Html',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.SelectorFilter',
-    'ephox.sugar.api.Traverse',
-    'ephox.vogue.api.DocStyle',
-    'ephox.vogue.api.Rules',
-    'global!document'
-  ],
-
-  function (Transform, ImageReference, Type, Arr, WordCleaner, Fun, Sandbox, Event, Events, Attr, Class, Comment, Element, Elements, Html, Remove, SelectorFilter, Traverse, DocStyle, Rules, document) {
-    var flagAttribute = 'data-textbox-image';
-
-    var emptyString = function (s)  {
-      return s === undefined || s === null || s.length === 0;
-    };
-
-    var stripImageSources = function (html) {
-      var count = 1;
-      return html.replace(/(<img[^>]*)src=".*?"/g, function (match, p1, offset) {
-        // the actual contents are irrelevant, it just needs to be unique
-        return p1 + flagAttribute + '="' + count++ +  '"';
-      });
-    };
-
-    var removeFragmentComments = function (body) {
-      var bodyChildren = Traverse.children(body);
-      Arr.each(bodyChildren, function (c) {
-        Comment.getOption(c).each(function (commentText) {
-          if (commentText === 'StartFragment' || commentText === 'EndFragment') {
-            Remove.remove(c);
-          }
-        });
-      });
-    };
-
-    var insertRtfCorrelation = function (sourceImageList, tordImages) {
-      Arr.each(tordImages, function (img) {
-        var imageCounter = Attr.get(img, flagAttribute);
-        Arr.each(sourceImageList, function (imgData) {
-          var imgAttrs = imgData.img();
-          var vshapeAttrs = imgData.vshape();
-          if (imgAttrs[flagAttribute] == imageCounter) {
-            // NOTE: If we discover more than 2 possible attributes, de-dupe with RtfImage somehow
-            var spid = vshapeAttrs['o:spid'];
-            var vshapeId = spid === undefined ? vshapeAttrs.id : spid;
-
-            Transform.rotateImage(img, vshapeAttrs);
-
-            Class.add(img, 'rtf-data-image');
-            Attr.set(img, 'data-image-id', vshapeId.substr('_x0000_'.length));
-            Attr.set(img, 'data-image-type', 'code');
-            Attr.remove(img, flagAttribute);
-          }
-        });
-      });
-    };
-
-    var mergeInlineStyles = function (body, stylesheets) {
-      var rules = Rules.extractAll(stylesheets);
-      Arr.each(rules, function (rule) {
-
-        var matchingElements = SelectorFilter.descendants(body, rule.selector());
-
-        Arr.each(matchingElements, function (element) {
-          Attr.remove(element, 'class');
-          Attr.set(element, 'style', rule.style());
-        });
-      });
-    };
-
-    var tordPostProcessor = function (sourceImageList, mergeStyles) {
-      var sandbox = Sandbox(Element.fromDom(document.body));
-      return function (dump, callback) {
-        // loading dump into the sandbox *will* perform some built-in browser cleanup operations,
-        // we are hoping this is a suitable replacement for the use of HTML Tidy in ELJ.
-        sandbox.play(dump, function (iframeDoc, body) {
-          var images = SelectorFilter.descendants(body, 'img');
-
-          // post-tord DOM filters
-          removeFragmentComments(body);
-          insertRtfCorrelation(sourceImageList, images);
-          if (mergeStyles) {
-            mergeInlineStyles(body, DocStyle.stylesheets(iframeDoc));
-          }
-
-          return Html.get(body);
-        }, callback);
-      };
-    };
-
-    var cleanEnd = function (raw) {
-      // Trim any weirdness that exists after the closing HTML tag.
-      var i = raw.indexOf('</html>');
-      return (i > -1) ? raw.substr(0, i + '</html>'.length) : raw;
-    };
-
-    return function (mergeSettings, pasteSettings) {
-      var cleaner = WordCleaner(pasteSettings.baseUrl);
-
-      var events = Events.create({
-        paste: Event(['elements', 'assets']),
-        error: Event(['message'])
-      });
-
-      var handler = function (raw) {
-        var html = cleanEnd(raw);
-        // This will only be called if we have word styles, so force true
-        mergeSettings.get(true, function (settings) {
-          var mergeStyles = settings.mergeOfficeStyles;
-
-          // remove local file references, so that loading the HTML into a DOM does not trigger console warnings
-          var safeHtml = stripImageSources(html);
-
-          var sourceImageList = ImageReference.extract(safeHtml);
-
-          var postProcess = tordPostProcessor(sourceImageList, mergeStyles);
-
-          cleaner.cleanDocument(safeHtml, mergeStyles).fold(function () {
-            events.trigger.error('errors.paste.word.notready');
-          }, function (dump) {
-            if (emptyString(dump)) events.trigger.paste([], []);
-            else {
-              // postProcess is basically String -> Future (String)
-              postProcess(dump, function (tordHtml) {
-                var elements = Elements.fromHtml(tordHtml);
-                events.trigger.paste(elements, []);
-              });
-            }
-
-          });
-        });
-        return true;
-      };
-
-      return {
-        handler: handler,
-        isSupported: Fun.constant(true),
-        events: events.registry
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.images.ImagePaste',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.fred.PlatformDetection',
-    'ephox.hermes.api.ImageAsset',
-    'ephox.hermes.api.ImageExtract',
-    'ephox.peanut.Fun',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Element',
-    'global!console'
-  ],
-
-  function (Arr, PlatformDetection, ImageAsset, ImageExtract, Fun, Event, Events, Attr, Element, console) {
-    return function (pasteSettings) {
-      var platform = PlatformDetection.detect();
-      var CAPTUTED_EVENT = true;
-
-      //IE & FF handle image paste conversion into base64 data URIs automatically
-      var isSupported = !platform.browser.isIE() && !platform.browser.isFirefox();
-
-      var events = Events.create({
-        paste: Event(['elements', 'assets']),
-        error: Event(['message'])
-      });
-
-      var readImages = function (assets) {
-        return Arr.bind(assets, function (asset) {
-          return ImageAsset.cata(asset,
-            function (id, file, objurl, data) {
-              // create an image and inject it at the current selection
-              var image = Element.fromTag('img');
-              Attr.set(image, 'src', objurl);
-              return image;
-            },
-            function (id, url, raw) {
-              // TODO: Is this the best way?
-              console.log('Internal error: Paste operation produced an image URL instead of a Data URI: ', url);
-            }
-          );
-        });
-      };
-
-      var actualHandler = function (clipboardItems) {
-        var images = Arr.filter(clipboardItems, function (item) {
-          return item.kind === 'file' && /image/.test(item.type);
-        });
-
-        var files = Arr.map(images, function (image) {
-          return image.getAsFile();
-        });
-
-        ImageExtract.toAssets(files, function (assets) {
-          // perform the insert (SmartPaste handles undo and focus trickery)
-          var elements = readImages(assets);
-          events.trigger.paste(elements, assets);
-        });
-        //prevent other content from coming through
-        return CAPTUTED_EVENT;
-      };
-
-      var safariHandler = function () {
-        events.trigger.error('safari.imagepaste');
-        // prevent default paste
-        return CAPTUTED_EVENT;
-      };
-
-      var imageDisabled = function () {
-        events.trigger.error('errors.local.images.disallowed');
-        return CAPTUTED_EVENT;
-      };
-
-      var imageHandler = platform.browser.isSafari() ? safariHandler : actualHandler;
-
-      var handler = pasteSettings.allowLocalImages ? imageHandler : imageDisabled;
-
-      return {
-        handler: handler,
-        isSupported: Fun.constant(isSupported),
-        events: events.registry
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.api.CementConstants',
-
-  [
-    'ephox.cement.style.Styles',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Styles, Fun) {
-
-    /*
-      The filter history may not quite work as I would hope. The problem it is likely to
-      have is that it might be the content's selection as well, which means that we are
-      changing what is about to used as serialisation ... likely leading to issues. I think
-      it just only sets valid selections, so it will probably be ok .. but the cursor will
-      be jarring.
-
-      The paste bin class is added when the paste event is being triggered in the setTimeout.
-      That may be too late for it not to end up in the undo history, but currently it seems
-      like it will possibly work. Adding the class directly to the element would be more reliable,
-      but I haven't thought of a clean enough way to do that yet.
-    */
-    var bin = Styles.resolve('smartpaste-eph-bin');
-
-    return {
-      binStyle: Fun.constant(bin)
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.knoch.core.Bounce',
-
-  [
-    'global!Array'
-  ],
-
-  function (Array) {
-
-    var bounce = function(f) {
-      return function() {
-        var args = Array.prototype.slice.call(arguments);
-        var me = this;
-        setTimeout(function() {
-          f.apply(me, args);
-        }, 0);
-      };
-    };
-
-    return {
-      bounce: bounce
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.knoch.core.FutureOps',
-
-  [
-  ],
-
-  function () {
-
-    return function (nu, get) {
-
-      /** map :: this Future a -> (a -> b) -> Future b */
-      var map = function(fab) {
-        return nu(function(callback) {
-          get(function(a) {
-            callback(fab(a));
-          });
-        });
-      };
-
-      /** bind :: this Future a -> (a -> Future b) -> Future b */
-      var bind = function(aFutureB) {
-        return nu(function(callback) {
-          get(function(a) {
-            aFutureB(a).get(callback);
-          });
-        });
-      };
-
-      /** anonBind :: this Future a -> Future b -> Future b
-       *  Returns a future, which evaluates the first future, ignores the result, then evaluates the second.
-       */
-      var anonBind = function(futureB) {
-        return nu(function(callback) {
-          get(function(a) {
-            futureB.get(callback);
-          });
-        });
-      };
-
-      return {
-        get: get,
-        map: map,
-        bind: bind,
-        anonBind: anonBind
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.knoch.future.Future',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.knoch.core.Bounce',
-    'ephox.knoch.core.FutureOps'
-  ],
-
-  /** A future value that is evaluated on demand. The base function is re-evaluated each time 'get' is called. */
-  function (Arr, Bounce, FutureOps) {
-
-    // baseFn is a function(callback) { ... }
-    var nu = function(baseFn) {
-
-      var get = function(callback) {
-        baseFn(Bounce.bounce(callback));
-      };
-
-      return FutureOps(nu, get);
-    };
-
-    /** [Future a] -> Future [a] */
-    var par = function(futures) {
-      return nu(function(callback) {
-        var r = [];
-        var count = 0;
-
-        var cb = function(i) {
-          return function(value) {
-            r[i] = value;
-            count++;
-            if (count >= futures.length) {
-              callback(r);
-            }
-          };
-        };
-
-        if (futures.length === 0) {
-          callback([]);
-        } else {
-          Arr.each(futures, function(future, i) {
-            future.get(cb(i));
-          });
-        }
-      });
-    };
-
-    /** [a] -> (a -> Future b) -> Future [b] */
-    var mapM = function(as, fn) {
-      return par(Arr.map(as, fn));
-    };
-
-    /** (Future a, Future b) -> ((a, b) -> c) -> Future C
-      * Executes the two futures in "parallel" with respect to browser JS threading.
-      */
-    var lift2 = function(fa, fb, abc) {
-      return nu(function(callback) {
-        var completeA = false;
-        var completeB = false;
-        var valueA = undefined;
-        var valueB = undefined;
-
-        var done = function() {
-          if (completeA && completeB) {
-            var c = abc(valueA, valueB);
-            callback(c);
-          }
-        };
-
-        fa.get(function(a) {
-          valueA = a;
-          completeA = true;
-          done();
-        });
-
-        fb.get(function(b) {
-          valueB = b;
-          completeB = true;
-          done();
-        });
-      });
-    };
-
-    return {
-      nu: nu,
-      par: par,
-      mapM: mapM,
-      lift2: lift2
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.knoch.future.CachedFuture',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.highway.Merger',
-    'ephox.knoch.core.Bounce',
-    'ephox.knoch.core.FutureOps',
-    'ephox.knoch.future.Future',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option'
-  ],
-
-  /**
-   *  A future value.
-   *  The base function is evaluated eagerly, and only evaluated once.
-   *  Each call to 'get' queues a callback, which is invoked when the value is available.
-   */
-  function (Arr, Merger, Bounce, FutureOps, Future, Fun, Option) {
-
-    // f is a function(callback) { ... }
-    var nu = function (baseFn) {
-
-      var data = Option.none();
-      var callbacks = [];
-
-      var get = function (callback) {
-        isSet() ? call(callback) : callbacks.push(callback);
-      };
-
-      var set = function (x) {
-        data = Option.some(x);
-        run(callbacks);
-        callbacks = [];
-      };
-
-      var isSet = function() {
-        return data.isSome();
-      };
-
-      var run = function (cbs) {
-        Arr.each(cbs, call);
-      };
-
-      var call = function(cb) {
-        data.each(function(x) {
-          Bounce.bounce(cb)(x);
-        });
-      };
-
-      Future.nu(baseFn).get(set);
-
-      var ops = FutureOps(nu, get);
-
-      return Merger.merge(ops, {
-        isSet: isSet
-      });
-    };
-
-    return {
-      nu: nu
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.pastiche.IeBlob',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.epithet.Resolve',
-    'ephox.hermes.api.ImageExtract',
-    'ephox.knoch.future.CachedFuture',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Arr, Resolve, ImageExtract, CachedFuture, Fun, Option) {
-    var convertURL = function (raw) {
-      return raw.convertURL !== undefined ? raw.convertURL     // Use standard if available.
-           : raw.msConvertURL !== undefined ? raw.msConvertURL
-           : undefined;
-    };
-
-    var convert = function (raw) {
-      // IE11 defines data on the window, but requires the event to convert... /headdesk
-      var files = Resolve.resolve('window.clipboardData.files');
-
-      var convert = convertURL(raw);
-
-      if (files !== undefined && convert !== undefined && files.length > 0) {
-        var blobs = Arr.map(files, function (file) {
-          var blob = ImageExtract.blob(file);
-          convert.apply(raw, [file, 'specified', blob.objurl()]);
-
-          return blob;
-        });
-
-        // do the async operation in a future
-        var future = CachedFuture.nu(function (callback) {
-          ImageExtract.fromBlobs(blobs, callback);
-        });
-
-        // initiate the conversion immediately
-        future.get(Fun.noop);
-
-        return Option.some(future);
-      } else {
-        return Option.none();
-      }
-    };
-
-    return {
-      convert: convert
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.api.Situ',
-
-  [
-  ],
-
-  function () {
-    var on = function (element, offset) {
-      return folder(function (b, o, a) {
-        return o(element, offset);
-      });
-    };
-
-    var before = function (element) {
-      return folder(function (b, o, a) {
-        return b(element);
-      });
-    };
-
-    var after = function (element) {
-      return folder(function (b, o, a) {
-        return a(element);
-      });
-    };
-
-
-    var folder = function(fold) {
-      return {
-        fold: fold
-      };
-    };
-
-    return {
-      on: on,
-      before: before,
-      after: after
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.api.SelectionRange',
-
-  [
-    'ephox.fussy.api.Situ',
-    'ephox.scullion.Struct',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (Situ, Struct, Element) {
-    var read = Struct.immutable('start', 'soffset', 'finish', 'foffset');
-    var general = Struct.immutable('start', 'soffset', 'finish', 'foffset');
-    var write = Struct.immutable('start', 'finish');
-
-    var writeFromNative = function (range) {
-      var start = Element.fromDom(range.startContainer);
-      var finish = Element.fromDom(range.endContainer);
-      return write(
-        Situ.on(start, range.startOffset),
-        Situ.on(finish, range.endOffset)
-      );
-    };
-
-    return {
-      read: read,
-      general: general,
-      write: write,
-      writeFromNative: writeFromNative
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.api.Supported',
-
-  [
-  ],
-
-  function () {
-    var run = function (win, w3c) {
-      // this is scaffolding for what was an alternate selection model.
-      // We now only have one but the concept could be useful later.
-      if (win.getSelection) return w3c(win, win.getSelection());
-      else throw 'No selection model supported.';
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.DocumentPosition',
-
-  [
-    'ephox.sugar.api.Compare',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Compare, Traverse ) {
-    var after = function (start, soffset, finish, foffset) {
-      var doc = Traverse.owner(start);
-
-      // TODO: Find a sensible place to put the native range creation code.
-      var rng = doc.dom().createRange();
-      rng.setStart(start.dom(), soffset);
-      rng.setEnd(finish.dom(), foffset);
-
-      var same = Compare.eq(start, finish) && soffset === foffset;
-      return rng.collapsed && !same;
-    };
-
-    return {
-      after: after
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.wwwc.Directions',
-
-  [
-    'ephox.fussy.api.SelectionRange',
-    'ephox.sugar.api.DocumentPosition',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (SelectionRange, DocumentPosition, Element, Traverse) {
-    var isReversed = function (model) {
-      return DocumentPosition.after(Element.fromDom(model.anchorNode), model.anchorOffset, Element.fromDom(model.focusNode), model.focusOffset);
-    };
-
-    var flipGet = function (model, range) {
-      var start = Element.fromDom(range.startContainer);
-      var finish = Element.fromDom(range.endContainer);
-      return isReversed(model) ?
-        SelectionRange.read(finish, range.endOffset, start, range.startOffset) :
-        SelectionRange.read(start, range.startOffset, finish, range.endOffset);
-    };
-
-    var isRtlGet = function (model) {
-      return isReversed(model);
-    };
-
-    var flipSet = function (start, startOffset, end, endOffset) {
-      return function (model) {
-        if (model.extend) {
-          model.collapse(start.dom(), startOffset);
-          model.extend(end.dom(), endOffset);
-        } else {
-          // this is IE... we can’t have a backwards range, so reverse it.
-          var range = Traverse.owner(start).dom().createRange();
-          range.setStart(end.dom(), endOffset);
-          range.setEnd(start.dom(), startOffset);
-          model.removeAllRanges();
-          model.addRange(range);
-        }
-      };
-    };
-
-    var isRtlSet = function (start, startOffset, end, endOffset) {
-      return DocumentPosition.after(start, startOffset, end, endOffset);
-    };
-
-    var read = function () {
-      return {
-        flip: flipGet,
-        isRtl: isRtlGet
-      };
-    };
-
-    var write = function () {
-      return {
-        flip: flipSet,
-        isRtl: isRtlSet
-      };
-    };
-
-    return {
-      read: read,
-      write: write
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.wwwc.DomRange',
-
-  [
-    'ephox.fussy.api.SelectionRange',
-    'ephox.fussy.wwwc.Directions',
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.DocumentPosition',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (SelectionRange, Directions, Option, DocumentPosition, Element) {
-
-    /*
-     * The approach here is to create a range using the selection. If it collapses,
-     * and the inverse of the selection does not collapse ... then it is a backwards
-     * selection.
-     */
-    var reversed = function (win, selection) {
-      // Calculate the range going from start -> finish
-      var startToFinish = toNativeFrom(win, selection.start(), selection.finish());
-      // If it is collapsed, there is a chance that it only collapsed because it was RTL
-      if (startToFinish.collapsed === true) {
-        // Check that the inverted selection isn't collapsed.
-        // If the inverted selection is not collapsed ... it is a backwards selection, otherwise it is just collapsed anyway
-        var finishToStart = toNativeFrom(win, selection.finish(), selection.start());
-        return finishToStart.collapsed === true ? Option.none() : Option.some(SelectionRange.general(
-          Element.fromDom(finishToStart.endContainer),
-          finishToStart.endOffset,
-          Element.fromDom(finishToStart.startContainer),
-          finishToStart.startOffset
-        ));
-      } else {
-        return Option.none();
-      }
-    };
-
-    var forceRange = function (win, selection) {
-      var range = toNativeFrom(win, selection.start(), selection.finish());
-      return range.collapsed === true ? toNativeFrom(win, selection.finish(), selection.start()) : range;
-    };
-
-    var toNativeFrom = function (win, start, finish) {
-      var range = create(win);
-
-      start.fold(function (e) {
-        range.setStartBefore(e.dom());
-      }, function (e, o) {
-        range.setStart(e.dom(), o);
-      }, function (e) {
-        range.setStartAfter(e.dom());
-      });
-
-      finish.fold(function (e) {
-        range.setEndBefore(e.dom());
-      }, function (e, o) {
-        range.setEnd(e.dom(), o);
-      }, function (e) {
-        range.setEndAfter(e.dom());
-      });
-
-      return range;
-    };
-
-    var toNative = function (win, selection) {
-      return toNativeFrom(win, selection.start(), selection.finish());
-    };
-
-    var toExactNative = function (win, s, so, e, eo) {
-      var backwards = DocumentPosition.after(s, so, e, eo);
-      var range = win.document.createRange();
-      if (backwards) {
-        range.setStart(e.dom(), eo);
-        range.setEnd(s.dom(), so);
-      } else {
-        range.setStart(s.dom(), so);
-        range.setEnd(e.dom(), eo);
-      }
-      return range;
-    };
-
-    var forwards = function (win, selection) {
-      var range = toNative(win, selection);
-
-      return function (model) {
-        model.addRange(range);
-      };
-    };
-
-    var build = function (win, selection) {
-      var backwards = reversed(win, selection);
-      return backwards.fold(function () {
-        return forwards(win, selection);
-      }, function (range) {
-        return Directions.write().flip(range.start(), range.soffset(), range.finish(), range.foffset());
-      });
-    };
-
-    var create = function (win) {
-      return win.document.createRange();
-    };
-
-    return {
-      create: create,
-      build: build,
-      toNative: toNative,
-      forceRange: forceRange,
-      toExactNative: toExactNative
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.search.Within',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.fussy.wwwc.DomRange',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Node',
-    'ephox.sugar.api.SelectorFilter',
-    'ephox.sugar.api.Selectors'
-  ],
-
-  function (Arr, DomRange, Element, Node, SelectorFilter, Selectors) {
-    // Adapted from: http://stackoverflow.com/questions/5605401/insert-link-in-contenteditable-element
-    var inRange = function (tempRange, range, element) {
-      tempRange.selectNodeContents(element.dom());
-      return tempRange.compareBoundaryPoints(range.END_TO_START, range) < 1 && tempRange.compareBoundaryPoints(range.START_TO_END, range) > -1;
-    };
-
-    var withinContainer = function (win, container, range, selector) {
-      var tempRange = win.document.createRange();
-      var self = Selectors.is(container, selector) ? [ container ] : [];
-      var elements = self.concat(SelectorFilter.descendants(container, selector));
-      return Arr.filter(elements, function (elem) {
-        return inRange(tempRange, range, elem);
-      });
-    };
-
-    var find = function (win, raw, selector) {
-      // Reverse the selection if it is RTL when doing the comparison
-      var range  = DomRange.forceRange(win, raw);
-      var container = Element.fromDom(range.commonAncestorContainer);
-      // Note, this might need to change when we have to start looking for non elements.
-      return Node.isElement(container) ? withinContainer(win, container, range, selector) : [];
-    };
-
-    return {
-      find: find
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.wwwc.Prefilter',
-
-  [
-    'ephox.fussy.api.SelectionRange',
-    'ephox.fussy.api.Situ',
-    'ephox.sugar.api.Node'
-  ],
-
-  function (SelectionRange, Situ, Node) {
-    var beforeBr = function (element, offset) {
-      return Node.name(element) === 'br' ? Situ.before(element) : Situ.on(element, offset);
-    };
-
-    var preprocess = function (selection) {
-      var start = selection.start().fold(Situ.before, beforeBr, Situ.after);
-      var finish = selection.finish().fold(Situ.before, beforeBr, Situ.after);
-      return SelectionRange.write(start, finish);
-    };
-
-    return {
-      preprocess: preprocess
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Fragment',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.sugar.api.Element',
-    'global!document'
-  ],
-
-  function (Arr, Element, document) {
-    var fromElements = function (elements, scope) {
-      var doc = scope || document;
-      var fragment = doc.createDocumentFragment();
-      Arr.each(elements, function (element) {
-        fragment.appendChild(element.dom());
-      });
-      return Element.fromDom(fragment);
-    };
-
-    return {
-      fromElements: fromElements
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.wwwc.WwwcModel',
-
-  [
-    'ephox.fussy.api.SelectionRange',
-    'ephox.fussy.wwwc.Directions',
-    'ephox.fussy.wwwc.DomRange',
-    'ephox.fussy.wwwc.Prefilter',
-    'ephox.perhaps.Option',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Fragment'
-  ],
-
-  function (SelectionRange, Directions, DomRange, Prefilter, Option, Element, Fragment) {
-    var set = function (raw) {
-      return function (win, model) {
-        var selection = Prefilter.preprocess(raw);
-        var modifier = DomRange.build(win, selection);
-        if (model !== undefined && model !== null) {
-          model.removeAllRanges();
-          modifier(model);
-        }
-      };
-    };
-
-    var selectElementContents = function (element) {
-      return function (win, model) {
-        var rng = DomRange.create(win);
-        rng.selectNodeContents(element.dom());
-        model.removeAllRanges();
-        model.addRange(rng);
-      };
-    };
-
-    var normaliseRange = function (win, model) {
-      // In a multiple rangeset we take the first and the last item in the range, and create a new range model
-      var first = model.getRangeAt(0);
-      var last = model.getRangeAt(model.rangeCount - 1);
-      var range = win.document.createRange();
-      range.setStart(first.startContainer, first.startOffset);
-      range.setEnd(last.endContainer, last.endOffset);
-      return range;
-    };
-
-    var fromNative = function (model, range) {
-      var start = Element.fromDom(range.startContainer);
-      var finish = Element.fromDom(range.endContainer);
-
-      return Directions.read().isRtl(model) ?
-        Directions.read().flip(model, range) :
-        SelectionRange.read(start, range.startOffset, finish, range.endOffset);
-    };
-
-    var getNative = function (win, model) {
-      return model !== undefined && model !== null && model.rangeCount > 0 ? Option.from(normaliseRange(win, model)) : Option.none();
-    };
-
-    var get = function (win, model) {
-      var range = getNative(win, model);
-      return range.map(function (r) {
-        return fromNative(model, r);
-      });
-    };
-
-    var replace = function (elements) {
-      return function (win, model) {
-        var selection = getNative(win, model);
-        selection.each(function (range) {
-          doReplaceRange(win, range, elements);
-        });
-      };
-    };
-
-    var doReplaceRange = function (win, range, elements) {
-      // Note: this document fragment approach may not work on IE9.
-      var fragment = Fragment.fromElements(elements, win.document);
-      range.deleteContents();
-      range.insertNode(fragment.dom());
-    };
-
-    var replaceRange = function (raw, elements) {
-      return function (win, model) {
-        var selection = Prefilter.preprocess(raw);
-        // NOTE: This selection has to be LTR, or the range will collapse.
-        var range = DomRange.toNative(win, selection);
-        doReplaceRange(win, range, elements);
-      };
-    };
-
-    var deleteRange = function (s, so, e, eo) {
-      return function (win, model) {
-        var rng = DomRange.toExactNative(win, s, so, e, eo);
-        rng.deleteContents();
-      };
-    };
-
-    var cloneFragment = function (s, so, e, eo) {
-      return function (win, model) {
-        var rng = DomRange.toExactNative(win, s, so, e, eo);
-        var fragment = rng.cloneContents();
-        return Element.fromDom(fragment);
-      };
-    };
-
-    var rectangleAt = function (s, so, e, eo) {
-      return function (win, model) {
-        var rng = DomRange.toExactNative(win, s, so, e, eo);
-        var rects = rng.getClientRects();
-        // ASSUMPTION: The first rectangle is the start of the selection
-        var bounds = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();
-        return bounds.width > 0 || bounds.height > 0  ? Option.some(bounds) : Option.none();
-      };
-    };
-
-    var clearSelection = function (win, model) {
-      win.getSelection().removeAllRanges();
-    };
-
-    return {
-      get: get,
-      set: set,
-      selectElementContents: selectElementContents,
-      replace: replace,
-      replaceRange: replaceRange,
-      deleteRange: deleteRange,
-      cloneFragment: cloneFragment,
-      rectangleAt: rectangleAt,
-      clearSelection: clearSelection
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.fussy.api.WindowSelection',
-
-  [
-    'ephox.fussy.api.SelectionRange',
-    'ephox.fussy.api.Situ',
-    'ephox.fussy.api.Supported',
-    'ephox.fussy.search.Within',
-    'ephox.fussy.wwwc.DomRange',
-    'ephox.fussy.wwwc.WwwcModel',
-    'ephox.sugar.api.Compare',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (SelectionRange, Situ, Supported, Within, DomRange, WwwcModel, Compare, Element) {
-    var get = function (win) {
-      return Supported.run(win, WwwcModel.get);
-    };
-
-    var set = function (win, raw) {
-      Supported.run(win, WwwcModel.set(raw));
-    };
-
-    var setExact = function (win, s, so, e, eo) {
-      var raw = SelectionRange.write(
-        Situ.on(s, so),
-        Situ.on(e, eo)
-      );
-      set(win, raw);
-    };
-
-    var selectElementContents = function (win, element) {
-      Supported.run(win, WwwcModel.selectElementContents(element));
-    };
-
-    var replace = function (win, elements) {
-      Supported.run(win, WwwcModel.replace(elements));
-    };
-
-    var replaceRange = function (win, raw, elements) {
-      Supported.run(win, WwwcModel.replaceRange(raw, elements));
-    };
-
-    var deleteRange = function (win, s, so, e, eo) {
-      Supported.run(win, WwwcModel.deleteRange(s, so, e, eo));
-    };
-
-    var cloneFragment = function (win, s, so, e, eo) {
-      return Supported.run(win, WwwcModel.cloneFragment(s, so, e, eo));
-    };
-
-    var isCollapsed = function (s, so, e, eo) {
-      return Compare.eq(s, e) && so === eo;
-    };
-
-    var rectangleAt = function (win, s, so, e, eo) {
-      return Supported.run(win, WwwcModel.rectangleAt(s, so, e, eo));
-    };
-
-    var findWithin = function (win, raw, selector) {
-      // Note, we don't need the getSelection() model for this.
-      return Within.find(win, raw, selector);
-    };
-
-    var findWithinExact = function (win, s, so, e, eo, selector) {
-      var raw = SelectionRange.write(
-        Situ.on(s, so),
-        Situ.on(e, eo)
-      );
-      // Note, we don't need the getSelection() model for this.
-      return findWithin(win, raw, selector);
-    };
-
-    var deriveExact = function (win, raw) {
-      var rng = DomRange.forceRange(win, raw);
-      return SelectionRange.general(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);
-    };
-
-    var clearAll = function (win) {
-      Supported.run(win, WwwcModel.clearSelection);
-    };
-
-    return {
-      get: get,
-      set: set,
-      setExact: setExact,
-      selectElementContents: selectElementContents,
-      replace: replace,
-      replaceRange: replaceRange,
-      deleteRange: deleteRange,
-      isCollapsed: isCollapsed,
-      cloneFragment: cloneFragment,
-      rectangleAt: rectangleAt,
-      findWithin: findWithin,
-      findWithinExact: findWithinExact,
-      deriveExact: deriveExact,
-      clearAll: clearAll
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.api.HtmlPatterns',
-
-  [
-
-  ],
-
-  function () {
-    return {
-      validStyles: function () {
-        return /^(mso-.*|tab-stops|tab-interval|language|text-underline|text-effect|text-line-through|font-color|horiz-align|list-image-[0-9]+|separator-image|table-border-color-(dark|light)|vert-align|vnd\..*)$/;
-      },
-      specialInline: function () {
-        return /^(font|em|strong|samp|acronym|cite|code|dfn|kbd|tt|b|i|u|s|sub|sup|ins|del|var|span)$/;
-      }
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.violin.StringMatch',
-
-  [
-
-  ],
-
-  function () {
-    var starts = function (value) {
-      return folder(function (s, p, c, e, a, n) {
-        return s(value);
-      });
-    };
-
-    var pattern = function (regex) {
-      return folder(function (s, p, c, e, a, n) {
-        return p(regex);
-      });
-    };
-
-    var contains = function (value) {
-      return folder(function (s, p, c, e, a, n) {
-        return c(value);
-      });
-    };
-
-    var exact = function (value) {
-      return folder(function (s, p, c, e, a, n) {
-        return e(value);
-      });
-    };
-
-    var all = function () {
-      return folder(function (s, p, c, e, a, n) {
-        return a();
-      });
-    };
-
-    var not = function (sm) {
-      return folder(function (s, p, c, e, a, n) {
-        return n(sm);
-      });
-    };
-
-    var folder = function (fold) {
-      var matches = function (str) {
-        return fold(function (value) {
-          return str.toLowerCase().indexOf(value.toLowerCase()) === 0;
-        }, function (regex) {
-          return regex.test(str.toLowerCase());
-        }, function (value) {
-          return str.toLowerCase().indexOf(value.toLowerCase()) >= 0;
-        }, function (value) {
-          return str.toLowerCase() === value.toLowerCase();
-        }, function () {
-          return true;
-        }, function (other) {
-          return !other.matches(str);
-        });
-      };
-
-      return {
-        fold: fold,
-        matches: matches
-      };
-    };
-
-    var cata = function (subject, s, p, c, e, a, n) {
-      return subject.fold(s, p, c, e, a, n);
-    };
-
-    return {
-      starts: starts,
-      pattern: pattern,
-      contains: contains,
-      exact: exact,
-      all: all,
-      not: not,
-      cata: cata
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.api.RuleMatch',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Node',
-    'ephox.violin.StringMatch'
-  ],
-
-  function (Fun, Node, StringMatch) {
-    var keyval = function (element, value, key, rule) {
-      var ruleName = rule.name;
-      var ruleCondition = rule.condition !== undefined ? rule.condition : Fun.constant(true);
-      var ruleValue = rule.value !== undefined ? rule.value : StringMatch.all();
-      return ruleName.matches(key) && ruleValue.matches(value) && ruleCondition(element);
-    };
-
-    var name = function (element, rule) {
-      var tag = Node.name(element);
-      var ruleName = rule.name;
-      var ruleCondition = rule.condition !== undefined ? rule.condition : Fun.constant(true);
-      return ruleName.matches(tag) && ruleCondition(element);
-    };
-
-    return {
-      keyval: keyval,
-      name: name
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.cleanup.AttributeAccess',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.compass.Obj',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Attr'
-  ],
-
-  function (Arr, Obj, Fun, Attr) {
-    var filter = function (element, predicate) {
-      var r = {};
-      Arr.each(element.dom().attributes, function (a) {
-        if (!predicate(a.value, a.name)) r[a.name] = a.value;
-      });
-      return r;
-    };
-
-    var update = function (element, names, keepers) {
-      Arr.each(names, function (name) {
-        Attr.remove(element, name);
-      });
-
-      Obj.each(keepers, function (v, k) {
-        Attr.set(element, k, v);
-      });
-    };
-
-    var clobber = function (element, supported, _unsupported) {
-      var names = Arr.map(element.dom().attributes, function (attribute) {
-        return attribute.name;
-      });
-
-      if (Obj.size(supported) !== names.length) update(element, names, supported);
-    };
-
-    return {
-      filter: filter,
-      clobber: clobber,
-      // There are no hidden attributes that I know about.
-      scan: Fun.constant({})
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.cleanup.StyleAccess',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.compass.Obj',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Css',
-    'ephox.violin.Strings'
-  ],
-
-  function (Arr, Obj, Attr, Css, Strings) {
-    var separate = function (style) {
-      var css = {};
-      var bits = style !== undefined && style !== null ? style.split(';') : [];
-      Arr.each(bits, function (bit) {
-        var parts = bit.split(':');
-        if (parts.length === 2) {
-          css[Strings.trim(parts[0])] = Strings.trim(parts[1]);
-        }
-      });
-      return css;
-    };
-
-    var get = function (element, property) {
-      return element.dom().style.getPropertyValue(property);
-    };
-
-    var filter = function (element, predicate) {
-      var r = {};
-      Arr.each(element.dom().style, function (property) {
-        var value = get(element, property);
-        if (!predicate(value, property)) r[property] = value;
-      });
-      return r;
-    };
-
-    var set = function (element, property, value) {
-      Css.set(element, property, value);
-    };
-
-    // Find the style for any special styles.
-    var scan = function (element, special, predicate) {
-      var style = element.dom().getAttribute('style');
-      var css = separate(style);
-
-      var before = {};
-      Arr.each(special, function (property) {
-        var value = css[property];
-        if (value !== undefined && !predicate(value, property)) before[property] = value;
-      });
-
-      return before;
-    };
-
-    var serialise = function (unsupported) {
-      var preserved = Obj.keys(unsupported);
-      return Arr.map(preserved, function (pre) {
-        return pre + ': ' + unsupported[pre];
-      }).join('; ');
-    };
-
-    var clobber = function (element, supported, unsupported) {
-      Attr.set(element, 'style', '');
-
-      var numSupported = Obj.size(supported);
-      var numUnsupported = Obj.size(unsupported);
-
-      if (numSupported === 0 && numUnsupported === 0) Attr.remove(element, 'style');
-      else if (numSupported === 0) Attr.set(element, 'style', serialise(unsupported));
-      else {
-        Obj.each(supported, function (v, k) {
-          set(element, k, v);
-        });
-
-        var base = Attr.get(element, 'style');
-        var extra = numUnsupported > 0 ? serialise(unsupported) + '; ' : '';
-        Attr.set(element, 'style', extra + base);
-      }
-    };
-
-    return {
-      filter: filter,
-      clobber: clobber,
-      scan: scan
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.cleanup.Cleaners',
-
-  [
-    'ephox.pastiche.cleanup.AttributeAccess',
-    'ephox.pastiche.cleanup.StyleAccess',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (AttributeAccess, StyleAccess, Fun, Element) {
-    var special = [ 'mso-list' ];
-
-    var style = function (element, predicate) {
-      var unsupported = StyleAccess.scan(element, special, predicate);
-      var supported = StyleAccess.filter(element, predicate);
-      StyleAccess.clobber(element, supported, unsupported);
-    };
-
-    var attribute = function (element, predicate) {
-      var keepers = AttributeAccess.filter(element, predicate);
-      AttributeAccess.clobber(element, keepers, {});
-    };
-
-    var validateStyles = function (element) {
-      var supported = StyleAccess.filter(element, Fun.constant(false));
-      StyleAccess.clobber(element, supported, {});
-    };
-
-    var styleDom = function (dom, predicate) {
-      style(Element.fromDom(dom), predicate);
-    };
-
-    var attributeDom = function (dom, predicate) {
-      attribute(Element.fromDom(dom), predicate);
-    };
-
-    return {
-      style: style,
-      attribute: attribute,
-      styleDom: styleDom,
-      attributeDom: attributeDom,
-      validateStyles: validateStyles
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Classes',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.sugar.api.Class',
-    'global!Array'
-  ],
-
-  function (Arr, Class, Array) {
-    /*
-     * ClassList is IE10 minimum:
-     * https://developer.mozilla.org/en-US/docs/Web/API/Element.classList
-     */
-
-    var add = function (element, classes) {
-      Arr.each(classes, function (x) {
-        Class.add(element, x);
-      });
-    };
-
-    var remove = function (element, classes) {
-      Arr.each(classes, function (x) {
-        Class.remove(element, x);
-      });
-    };
-
-    var toggle = function (element, classes) {
-      Arr.each(classes, function (x) {
-        Class.toggle(element, x);
-      });
-    };
-
-    var hasAll = function (element, classes) {
-      return Arr.forall(classes, function (clazz) {
-        return Class.has(element, clazz);
-      });
-    };
-
-    var hasAny = function (element, classes) {
-      return Arr.exists(classes, function (clazz) {
-        return Class.has(element, clazz);
-      });
-    };
-
-    var get = function (element) {
-      var classList = element.dom().classList;
-      var r = new Array(classList.length);
-      for (var i = 0; i < classList.length; i++) {
-        r[i] = classList.item(i);
-      }
-      return r;
-    };
-
-    // set deleted, risks bad performance. Be deterministic.
-
-    return {
-      add: add,
-      remove: remove,
-      toggle: toggle,
-      hasAll: hasAll,
-      hasAny: hasAny,
-      get: get
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.engine.Pipeless',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.highway.Merger',
-    'ephox.pastiche.api.RuleMatch',
-    'ephox.pastiche.cleanup.Cleaners',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Classes',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.SelectorFilter'
-  ],
-
-  function (Arr, Merger, RuleMatch, Cleaners, Fun, Attr, Class, Classes, Remove, SelectorFilter) {
-    var cleaner = function (type, rules, element) {
-      // Use Cleaners.style or Cleaners.attribute as "type".
-      type(element, function (value, key) {
-        return Arr.exists(rules, function (rule) {
-          return RuleMatch.keyval(element, value, key, rule);
-        });
-      });
-    };
-
-    var remover = function (container, strat) {
-      var strategy = Merger.merge({ styles: [], attributes: [], classes: [], tags: [] }, strat);
-
-      var elements = SelectorFilter.descendants(container, '*');
-      Arr.each(elements, function (element) {
-        cleaner(Cleaners.style, strategy.styles, element);
-        cleaner(Cleaners.attribute, strategy.attributes, element);
-
-        Arr.each(strategy.classes, function (rule) {
-          var actual = Attr.has(element, 'class') ? Classes.get(element) : [];
-          Arr.each(actual, function (act) {
-            if (rule.name.matches(act)) Class.remove(element, act);
-          });
-        });
-      });
-
-      // Now, remove the tags.
-      var postElements = SelectorFilter.descendants(container, '*');
-      Arr.each(postElements, function (element) {
-        var matching = Arr.exists(strategy.tags, Fun.curry(RuleMatch.name, element));
-        if (matching) Remove.remove(element);
-      });
-    };
-
-    var unwrapper = function (container, strat) {
-      var strategy = Merger.merge({ tags: [] }, strat);
-
-      var elements = SelectorFilter.descendants(container, '*');
-      Arr.each(elements, function (element) {
-        var matching = Arr.exists(strategy.tags, Fun.curry(RuleMatch.name, element));
-        if (matching) Remove.unwrap(element);
-      });
-    };
-
-    var transformer = function (container, strat) {
-      var strategy = Merger.merge({ tags: [] }, strat);
-
-      var elements = SelectorFilter.descendants(container, '*');
-      Arr.each(elements, function (element) {
-        var rule = Arr.find(strategy.tags, Fun.curry(RuleMatch.name, element));
-        if (rule !== undefined && rule !== null) rule.mutate(element);
-      });
-    };
-
-    var validator = function (container) {
-      var elements = SelectorFilter.descendants(container, '*');
-      Arr.each(elements, function (element) {
-        Cleaners.validateStyles(element);
-      });
-    };
-
-    return {
-      remover: remover,
-      unwrapper: unwrapper,
-      transformer: transformer,
-      validator: validator
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.engine.Token',
-
-  [
-    'ephox.compass.Obj',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (Obj, Css, Element) {
-    var START_ELEMENT_TYPE = 'startElement';
-    var END_ELEMENT_TYPE = 'endElement';
-    var TEXT_TYPE = 'text';
-    var COMMENT_TYPE = 'comment';
-
-    var token = function(node, endNode, syntheticStyles) {
-      var tokenType;
-      var tagName;
-      var tokenText;
-
-      var element = Element.fromDom(node);
-
-      switch (node.nodeType) {
-        case 1:
-          if (endNode) {
-            tokenType = END_ELEMENT_TYPE;
-          } else {
-            tokenType = START_ELEMENT_TYPE;
-
-            Css.setAll(element, syntheticStyles || {});
-          }
-          if (node.scopeName !== "HTML" && node.scopeName && node.tagName && node.tagName.indexOf(':') <= 0) {
-            tagName = (node.scopeName + ":" + node.tagName).toUpperCase();
-          } else {
-            tagName = node.tagName;
-          }
-
-          break;
-        case 3:
-          tokenType = TEXT_TYPE;
-          tokenText = node.nodeValue;
-          break;
-        case 8:
-          tokenType = COMMENT_TYPE;
-          tokenText = node.nodeValue;
-          break;
-        default:
-          console.log("WARNING: Unsupported node type encountered: " + node.nodeType);
-          break;
-      }
-
-      var getNode = function() {
-        return node;
-      };
-
-      var tag = function() {
-        return tagName;
-      };
-
-      var type = function() {
-        return tokenType;
-      };
-
-      var text = function() {
-        return tokenText;
-      };
-
-      return {
-        getNode: getNode,
-        tag: tag,
-        type: type,
-        text: text
-      };
-    };
-
-    var createStartElement = function(tag, attributes, styles, document) {
-      var node = document.createElement(tag), css = "";
-
-      Obj.each(attributes, function(value, name) {
-        node.setAttribute(name, value);
-      });
-
-      return token(node, false, styles);
-    };
-
-    var createEndElement = function(tag, document) {
-      return token(document.createElement(tag), true);
-    };
-
-    var createComment = function(text, document) {
-      return token(document.createComment(text), false);
-    };
-
-    var createText = function(text, document) {
-      return token(document.createTextNode(text));
-    };
-
-    var FINISHED = createEndElement('HTML', window.document);
-
-    return {
-      START_ELEMENT_TYPE: START_ELEMENT_TYPE,
-      END_ELEMENT_TYPE: END_ELEMENT_TYPE,
-      TEXT_TYPE: TEXT_TYPE,
-      COMMENT_TYPE: COMMENT_TYPE,
-      FINISHED: FINISHED,
-      token: token,
-      createStartElement: createStartElement,
-      createEndElement: createEndElement,
-      createComment: createComment,
-      createText: createText
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.engine.Serialiser',
-
-  [
-    'ephox.pastiche.engine.Token'
-  ],
-
-  function (Token) {
-    var create = function (doc) {
-      var currentNode = doc.createDocumentFragment();
-      var initialNode = currentNode;
-
-      var push = function(node) {
-        append(node);
-        currentNode = node;
-      };
-
-      var pop = function() {
-        currentNode = currentNode.parentNode;
-      };
-
-      var append = function(node) {
-        currentNode.appendChild(node);
-      };
-
-      var receive = function(token) {
-        var startElement = function(token) {
-          var node = token.getNode().cloneNode(false);
-          push(node);
-        };
-
-        var text = function(token, serializer) {
-          // IE7 will crash if you clone a text node that's a URL.
-          // IE8 throws an invalid argument error.
-          // So while cloning may be faster, we have to create a new node here.
-          var node = doc.createTextNode(token.text());
-          append(node);
-        };
-
-        switch (token.type()) {
-          case Token.START_ELEMENT_TYPE:
-            startElement(token);
-            break;
-          case Token.TEXT_TYPE:
-            text(token);
-            break;
-          case Token.END_ELEMENT_TYPE:
-            pop();
-            break;
-          case Token.COMMENT_TYPE:
-            // Ignore.
-            break;
-          default:
-            throw { message: 'Unsupported token type: ' + token.type() };
-        }
-      };
-
-      return {
-        dom: initialNode,
-        receive: receive,
-        label: 'SERIALISER'
-      };
-    };
-
-    return {
-      create: create
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.engine.Tokeniser',
-
-  [
-    'ephox.pastiche.engine.Token'
-  ],
-
-  function (Token) {
-    var tokenise = function(html, document) {
-      var container;
-      document = document || window.document;
-      container = document.createElement('div');
-      document.body.appendChild(container);
-      container.style.position = 'absolute';
-      container.style.left = '-10000px';
-      container.innerHTML = html;
-
-      nextNode = container.firstChild || Token.FINISHED;
-
-      var nodeStack = [];
-      endNode = false;
-
-      var getTokenForNode = function(node, endTag) {
-        if (node === Token.FINISHED) {
-          return node;
-        } else if (node) {
-          return Token.token(node, endTag);
-        } else {
-          return undefined;
-        }
-      };
-
-      var next = function() {
-        var currentNode = nextNode;
-        var currentEndNode = endNode;
-        if (!endNode && nextNode.firstChild) {
-          nodeStack.push(nextNode);
-          nextNode = nextNode.firstChild;
-        } else if (!endNode && nextNode.nodeType === 1) {
-          // Empty element.
-          endNode = true;
-        } else if (nextNode.nextSibling) {
-          nextNode = nextNode.nextSibling;
-          endNode = false;
-        } else {
-          nextNode = nodeStack.pop();
-          endNode = true;
-        }
-
-        if (currentNode !== Token.FINISHED && !nextNode) {
-          document.body.removeChild(container);
-          nextNode = Token.FINISHED;
-        }
-
-        return getTokenForNode(currentNode, currentEndNode);
-      };
-
-      var hasNext = function() {
-        return nextNode !== undefined;
-      };
-
-      return {
-        hasNext: hasNext,
-        next: next
-      };
-    };
-
-    return {
-      tokenise: tokenise
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.engine.Pipeline',
-
-  [
-    'ephox.pastiche.engine.Serialiser',
-    'ephox.pastiche.engine.Tokeniser'
-  ],
-
-  function (Serialiser, Tokeniser) {
-    var build = function(doc, filters, sink) {
-      var i, filter = sink;
-      for (i = filters.length - 1; i >= 0; i--) {
-        //This is calling the function defined by Filter.createFilter().
-        //The best description I can come up with is "function composition using CPS".
-        //Filters are run in reverse order to the loop, which is reversed so the arrays below define the order.
-        //And then the sink comes last (which means it's injected on the first pass of the loop).
-        // filter = filters[i](doc, filter);
-
-        // TEMPORARY:
-        filter = filters[i](filter, {}, doc);
-      }
-      return filter;
-    };
-
-    var run = function(doc, content, filters) {
-      var sink = Serialiser.create(doc);
-      var tokeniser = Tokeniser.tokenise(content, doc);
-      var pipeline = build(doc, filters, sink);
-      while (tokeniser.hasNext()) {
-        var token = tokeniser.next();
-        pipeline.receive(token);
-      }
-      return sink.dom;
-    };
-
-    return {
-      build: build,
-      run: run
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.api.HybridAction',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.pastiche.engine.Pipeless',
-    'ephox.pastiche.engine.Pipeline',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Html',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Arr, Pipeless, Pipeline, Element, Html, Remove, Traverse) {
-    var removal = function (spec) {
-      return function (container) {
-        Pipeless.remover(container, spec);
-      };
-    };
-
-    var unwrapper = function (spec) {
-      return function (container) {
-        Pipeless.unwrapper(container, spec);
-      };
-    };
-
-    var transformer = function (spec) {
-      return function (container) {
-        Pipeless.transformer(container, spec);
-      };
-    };
-
-    var validate = function () {
-      return function (container) {
-        Pipeless.validator(container);
-      };
-    };
-
-    var pipeline = function (pipes) {
-      return function (container) {
-        var html = Html.get(container);
-        var doc = Traverse.owner(container);
-        var sink = Pipeline.run(doc.dom(), html, pipes);
-        Remove.empty(container);
-        container.dom().appendChild(sink);
-      };
-    };
-
-    var go = function (doc, input, actions) {
-      var container = Element.fromTag('div', doc.dom());
-      container.dom().innerHTML = input;
-      Arr.each(actions, function (action) {
-        action(container);
-      });
-      return Html.get(container);
-    };
-
-    var isWordContent = function (content) {
-      return content.indexOf('<o:p>') >= 0 || // IE, Safari, Opera
-        content.indexOf('p.MsoNormal, li.MsoNormal, div.MsoNormal') >= 0 || // Firefox Mac
-        content.indexOf('MsoListParagraphCxSpFirst') >= 0 || // Windows list only selection
-        content.indexOf('<w:WordDocument>') >= 0; // Firefox Windows
-    };
-
-    return {
-      removal: removal,
-      unwrapper: unwrapper,
-      transformer: transformer,
-      validate: validate,
-      pipeline: pipeline,
-      isWordContent: isWordContent,
-      go: go
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.api.RuleConditions',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Html',
-    'ephox.sugar.api.Node',
-    'ephox.sugar.api.PredicateExists'
-  ],
-
-  function (Arr, Attr, Html, Node, PredicateExists) {
-    var isNotImage = function (elem) {
-      return Node.name(elem) !== 'img';
-    };
-
-    var isImportantSpan = function (elem) {
-      var attrs = elem.dom().attributes;
-      var hasAttrs = attrs !== undefined && attrs !== null && attrs.length > 0;
-      return Node.name(elem) === 'span' ? hasAttrs : true;
-    };
-
-    var hasContent = function (elem) {
-      if (!hasNoAttributes(elem)) return true;
-      else {
-        return isImportantSpan(elem) && PredicateExists.descendant(elem, function (e) {
-          var hasAttributes = !hasNoAttributes(e);
-          var isContentTag = !Arr.contains([
-            'font', 'em', 'strong', 'samp', 'acronym', 'cite', 'code', 'dfn', 'kbd', 'tt', 'b', 'i',
-            'u', 's', 'sub', 'sup', 'ins', 'del', 'var', 'span'
-          ], Node.name(e));
-
-          return Node.isText(e) || hasAttributes || isContentTag;
-        });
-      }
-    };
-
-    var isList = function (elem) {
-      return Node.name(elem) === 'ol' || Node.name(elem) === 'ul';
-    };
-
-    var isLocal = function (element) {
-      var src = Attr.get(element, 'src');
-      return (/^file:/).test(src);
-    };
-
-    var hasNoAttributes = function (elem) {
-      if (elem.dom().attributes === undefined || elem.dom().attributes === null) return true;
-      return elem.dom().attributes.length === 0 || (elem.dom().attributes.length === 1 && elem.dom().attributes[0].name === 'style');
-    };
-
-    var isEmpty = function (elem) {
-      // Note, this means that things with zero width cursors are NOT considered empty
-      return Html.get(elem).length === 0;
-    };
-
-    return {
-      isNotImage: isNotImage,
-      hasContent: hasContent,
-      isList: isList,
-      isLocal: isLocal,
-      hasNoAttributes: hasNoAttributes,
-      isEmpty: isEmpty
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.api.RuleMutations',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.compass.Obj',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Html',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.InsertAll',
-    'ephox.sugar.api.Node',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Arr, Obj, Attr, Css, Element, Html, Insert, InsertAll, Node, Remove, Traverse) {
-    var changeTag = function (tag, element) {
-      // We cannot use replication because it uses innerHTML rather than setting the children.
-      // Which means that any further transformations done to the children are not represented
-      // in the final output.
-      var replica = Element.fromTag(tag);
-      Insert.before(element, replica);
-
-      var attributes = element.dom().attributes;
-      Arr.each(attributes, function (attr) {
-        replica.dom().setAttribute(attr.name, attr.value);
-      });
-
-      var children = Traverse.children(element);
-      InsertAll.append(replica, children);
-      Remove.remove(element);
-      return replica;
-    };
-
-    // Adds a <br> tag to any <p> tags that are empty
-    var addBrTag = function (element) {
-      if (Html.get(element).length === 0) {
-        Insert.append(element, Element.fromTag('br'));
-      }
-    };
-
-    var properlyNest = function (element) {
-      Traverse.parent(element).each(function (parent) {
-        var tag = Node.name(parent);
-        if (Arr.contains([ 'ol', 'ul' ], tag)) {
-          var li = Element.fromTag('li');
-          Css.set(li, 'list-style-type', 'none');
-          Insert.wrap(element, li);
-        }
-      });
-    };
-
-    var fontToSpan = function (element) {
-      var span = changeTag('span', element);
-      var conversions = {
-        face: 'font-family',
-        size: 'font-size',
-        color: 'font-color'
-      };
-
-      var values = {
-        'font-size': {
-          '1': '8pt',
-          '2': '10pt',
-          '3': '12pt',
-          '4': '14pt',
-          '5': '18pt',
-          '6': '24pt',
-          '7': '36pt'
-        }
-      };
-
-      Obj.each(conversions, function (style, attribute) {
-        if (Attr.has(span, attribute)) {
-          var value = Attr.get(span, attribute);
-          var cssValue = values[style] !== undefined && values[style][value] !== undefined ? values[style][value] : value;
-          Css.set(span, style, cssValue);
-          Attr.remove(span, attribute);
-        }
-      });
-    };
-
-    return {
-      changeTag: changeTag,
-      addBrTag: addBrTag,
-      properlyNest: properlyNest,
-      fontToSpan: fontToSpan
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.engine.Filter',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.pastiche.engine.Token'
-  ],
-
-  function (Arr, Token) {
-    var createFilter = function(actualReceiver, clientReset, label) {
-      var filter = function(nextFilter, settings, document, _logger) {
-        var logger = _logger !== undefined ? _logger : [];
-
-        var deferred;
-        var receivedTokens, emittedTokens, inTransaction = false;
-
-        var resetState = function() {
-          if (clientReset) clientReset(api);
-          inTransaction = false;
-          receivedTokens = [];
-          emittedTokens = [];
-        };
-
-        var emitTokens = function(tokens) {
-          Arr.each(tokens, function(tok) {
-            nextFilter.receive(tok);
-          });
-        };
-
-        var emit = function(token) {
-          if (inTransaction) {
-            emittedTokens.push(token);
-          } else {
-            nextFilter.receive(token);
-          }
-        };
-
-        var receive = function(token) {
-          if (clientReset) receivedTokens.push(token);
-          actualReceiver(api, token);
-          if (token === Token.FINISHED) {
-            commit();
-          }
-        };
-
-        var startTransaction = function() {
-          inTransaction = true;
-        };
-
-        var rollback = function() {
-          emitTokens(receivedTokens);
-          resetState();
-        };
-
-        var commit = function() {
-          emitDeferred();
-          emitTokens(emittedTokens);
-          resetState();
-        };
-
-        var defer = function(token) {
-          deferred = deferred || [];
-          deferred.push(token);
-        };
-
-        var hasDeferred = function() {
-          return deferred && deferred.length > 0;
-        };
-
-        var emitDeferred = function() {
-          Arr.each(deferred || [], function(token) {
-            emit(token);
-          });
-          dropDeferred();
-        };
-
-        var dropDeferred = function() {
-          deferred = [];
-        };
-
-        var api = {
-          document: document || window.document,
-          settings: settings || {},
-          emit: emit,
-          receive: receive,
-          startTransaction: startTransaction,
-          rollback: rollback,
-          commit: commit,
-          defer: defer,
-          hasDeferred: hasDeferred,
-          emitDeferred: emitDeferred,
-          dropDeferred: dropDeferred,
-          label: label
-        };
-
-        resetState();
-        return api;
-      };
-      return filter;
-    };
-
-    return {
-      createFilter: createFilter
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.engine.TokenUtil',
-
-  [
-    'ephox.pastiche.cleanup.StyleAccess',
-    'ephox.pastiche.engine.Token',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (StyleAccess, Token, Fun, Attr, Css, Element) {
-    var getAttribute = function (token, property) {
-      var element = Element.fromDom(token.getNode());
-      return Attr.get(element, property);
-    };
-
-    var getStyle = function (token, property) {
-      var element = Element.fromDom(token.getNode());
-      return Css.get(element, property);
-    };
-
-    var isWhitespace = function (token) {
-      return token.type() === Token.TEXT_TYPE &&  /^[\s\u00A0]*$/.test(token.text());
-    };
-
-    var getMsoList = function (token) {
-      var element = Element.fromDom(token.getNode());
-      var styles = StyleAccess.scan(element, [ 'mso-list' ], Fun.constant(false));
-      return styles['mso-list'];
-    };
-
-    return {
-      getAttribute: getAttribute,
-      getStyle: getStyle,
-      isWhitespace: isWhitespace,
-      getMsoList: getMsoList
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.detect.ListSymbols',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.highway.Merger'
-  ],
-
-  function (Arr, Merger) {
-
-    var orderedListTypes = [
-      { regex: /^\(?[dc][\.\)]$/, type: { tag: 'OL', type: 'lower-alpha' } },
-      { regex: /^\(?[DC][\.\)]$/, type: { tag: 'OL', type: 'upper-alpha' } },
-      { regex: /^\(?M*(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})[\.\)]$/, type: { tag: 'OL', type: 'upper-roman' } },
-      { regex: /^\(?m*(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})[\.\)]$/, type: { tag: 'OL', type: 'lower-roman' } },
-      { regex: /^\(?[0-9]+[\.\)]$/, type: { tag: 'OL' } },
-      { regex: /^([0-9]+\.)*[0-9]+\.?$/, type: { tag: 'OL', variant: 'outline' } },
-      { regex: /^\(?[a-z]+[\.\)]$/, type: { tag: 'OL', type: 'lower-alpha' } },
-      { regex: /^\(?[A-Z]+[\.\)]$/, type: { tag: 'OL', type: 'upper-alpha' } }
-    ];
-
-    var ulChars = {
-      '\u2022': { tag: 'UL', type: 'disc' },
-      '\u00B7': { tag: 'UL', type: 'disc' },
-      '\u00A7': { tag: 'UL', type: 'square' }
-    };
-
-    var ulNonSymbolChars = {
-      'o': { tag: 'UL', type: 'circle' },
-      '-': { tag: 'UL', type: 'disc' },
-      '\u25CF': { tag: 'UL', type: 'disc' },
-      '�': { tag: 'UL', type: 'circle' }
-    };
-
-    var getVariant = function (type, text) {
-      if (type.variant !== undefined) return type.variant;
-      else if (text.charAt(0) === '(') return '()';
-      else if (text.charAt(text.length - 1) === ')') return ')';
-      else return '.';
-    };
-
-    var getStart = function (text) {
-      var number = parseInt(text, 10);
-      return isNaN(number) ? { } : { start: number };
-    };
-
-    var match = function (text, inSymbol) {
-      var nonSymbols = ulNonSymbolChars[text] ? [ ulNonSymbolChars[text] ] : [];
-      var symbols = inSymbol && ulChars[text] ? [ ulChars[text] ] : inSymbol ? [{ tag: 'UL', variant: text }] : [];
-      var ordered = Arr.bind(orderedListTypes, function (o) {
-        return o.regex.test(text) ? [ Merger.merge(o.type, getStart(text), {
-          variant: getVariant(o.type, text)
-        })] : [];
-      });
-
-      var result = nonSymbols.concat(symbols).concat(ordered);
-      return Arr.map(result, function (x) {
-        return x.variant !== undefined ? x : Merger.merge(x, {
-          variant: text
-        });
-      });
-    };
-
-    return {
-      match: match
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.detect.ListGuess',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.pastiche.list.detect.ListSymbols',
-    'ephox.perhaps.Option',
-    'ephox.violin.Strings'
-  ],
-
-  function (Arr, ListSymbols, Option, Strings) {
-
-    var guess = function(bulletInfo, preferredType) {
-      var text = bulletInfo ? Strings.trim(bulletInfo.text) : '';
-      var symbolFont = bulletInfo ? !!bulletInfo.symbolFont : false;
-      var candidates = ListSymbols.match(text, symbolFont);
-      var preferred = Arr.find(candidates, function (c) {
-        // The original code only ran preferred types for ordered lists. I have
-        // no idea whether this is a condition that we want preserved, but one
-        // of the QUnit tests implicitly stated it is.
-        return c.tag === 'UL' || (preferredType && eqListType(c, preferredType, true));
-      });
-      return preferred !== undefined ? Option.some(preferred) :
-        candidates.length > 0 ? Option.some(candidates[0]) : Option.none();
-    };
-
-    var eqListType = function(t1, t2, ignoreVariant) {
-      return t1 === t2 ||
-        (t1 && t2 && t1.tag === t2.tag && t1.type === t2.type &&
-            (ignoreVariant || t1.variant === t2.variant));
-    };
-
-    return {
-      guess: guess,
-      eqListType: eqListType
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.detect.ListTypes',
-
-  [
-    'ephox.pastiche.engine.Token',
-    'ephox.pastiche.engine.TokenUtil',
-    'ephox.pastiche.list.detect.ListGuess'
-  ],
-
-  function (Token, TokenUtil, ListGuess) {
-
-    var guess = function(bulletInfo, preferredType, originalToken) {
-      var candidate = ListGuess.guess(bulletInfo, preferredType);
-      return candidate.fold(function () {
-        return null;
-      }, function (c) {
-        if (c.tag === 'OL' && originalToken && (originalToken.tag() !== 'P' || /^MsoHeading/.test(TokenUtil.getAttribute(originalToken, 'class')))) {
-          // Don't convert numbered headings but do convert bulleted headings.
-          listType = null;
-        } else {
-          return c;
-        }
-      });
-    };
-
-    var eqListType = ListGuess.eqListType;
-
-    var checkFont = function(token, symbolFont) {
-      if (token.type() == Token.START_ELEMENT_TYPE) {
-        font = TokenUtil.getStyle(token, 'font-family');
-        if (font) {
-          symbolFont = (font === 'Wingdings' || font === 'Symbol');
-        } else if (/^(P|H[1-6]|DIV)$/.test(token.tag())) {
-          symbolFont = false;
-        }
-      }
-      return symbolFont;
-    };
-
-    return {
-      guess: guess,
-      eqListType: eqListType,
-      checkFont: checkFont
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Microsoft',
-
-  [
-    'ephox.pastiche.engine.Token',
-    'ephox.pastiche.engine.TokenUtil'
-  ],
-
-  function (Token, TokenUtil) {
-    var isList = function (state, token) {
-      var style = TokenUtil.getMsoList(token);
-      return style && style !== 'skip';
-    };
-
-    var isIgnore = function (state, token) {
-      return token.type() == Token.START_ELEMENT_TYPE && TokenUtil.getMsoList(token) === 'Ignore';
-    };
-
-    return {
-      isList: isList,
-      isIgnore: isIgnore
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Tags',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.pastiche.engine.Token',
-    'ephox.violin.Strings'
-  ],
-
-  function (Arr, Token, Strings) {
-    var isStart = function (state, token) {
-      return token.type() === Token.START_ELEMENT_TYPE;
-    };
-
-    var isEnd = function (state, token) {
-      return token.type() === Token.END_ELEMENT_TYPE;
-    };
-
-    var isTag = function (tag) {
-      return function (state, token) {
-        return token.tag() === tag;
-      };
-    };
-
-    var isWhitespace = function (tag) {
-      return function (state, token) {
-        return isTag(tag)(state, token) && Strings.trim(token.getNode().textContent) === '';
-      };
-    };
-
-    var isStartOf = function (tag) {
-      return function (state, token) {
-        return isStart(state, token) && token.tag() === tag;
-      };
-    };
-
-    var isEndOf = function (tag) {
-      return function (state, token) {
-        return isEnd(state, token) && token.tag() === tag;
-      };
-    };
-
-    var isStartAny = function (tags) {
-      return function (state, token) {
-        return isStart(state, token) && Arr.contains(tags, token.tag());
-      };
-    };
-
-    var isEndAny = function (tags) {
-      return function (state, token, tags) {
-        return isEnd(state, token) && Arr.contains(tags, token.tag());
-      };
-    };
-
-    return {
-      isStart: isStart,
-      isEnd: isEnd,
-      isTag: isTag,
-      isStartOf: isStartOf,
-      isEndOf: isEndOf,
-      isStartAny: isStartAny,
-      isEndAny: isEndAny,
-      isWhitespace: isWhitespace
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Paragraphs',
-
-  [
-    'ephox.pastiche.inspect.Microsoft',
-    'ephox.pastiche.inspect.Tags'
-  ],
-
-  function (Microsoft, Tags) {
-    // MOVE ME.
-    var isNormal = function (state, token) {
-      return !state.skippedPara.get() && Tags.isStart(state, token, 'P') && !Microsoft.isList(state, token);
-    };
-
-    return {
-      isNormal: isNormal
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Texts',
-
-  [
-    'ephox.pastiche.engine.Token',
-    'ephox.pastiche.engine.TokenUtil',
-    'ephox.violin.Strings'
-  ],
-
-  function (Token, TokenUtil, Strings) {
-    var isWhitespace = function (state, token) {
-      return is(state, token) && TokenUtil.isWhitespace(token);
-    };
-
-    var is = function (state, token) {
-      return token.type() === Token.TEXT_TYPE;
-    };
-
-    var eq = function (value) {
-      return function (state, token) {
-        return is(state, token) && token.text() === value;
-      };
-    };
-
-    var matches = function (value) {
-      return function (state, token) {
-        return is(state, token) && value.test(token.text());
-      };
-    };
-
-    // CHECK: Is this equivalent to isWhitespace?
-    var isBlank = function (state, token) {
-      return is(state, token) && Strings.trim(token.text()) === '';
-    };
-
-    return {
-      isWhitespace: isWhitespace,
-      is: is,
-      isBlank: isBlank,
-      eq: eq,
-      matches: matches
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.Handler',
-
-  [
-    'ephox.peanut.Fun'
-  ],
-
-  function (Fun) {
-    return function (pred, action, label) {
-      return {
-        pred: pred,
-        action: action,
-        label: Fun.constant(label)
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.Handlers',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Arr, Fun, Option) {
-    var logger = function (label, action) {
-      return function (api, state, token) {
-        // console.log('LOGGER: ', label, token.getNode().cloneNode(false));
-        return action(api, state, token);
-      };
-    };
-
-    return function (name, handlers, fallback) {
-      var logFallback = logger(name + ' :: FALLBACK --- ', fallback);
-
-      var r = function (api, state, token) {
-        // console.log('token: ', token.getNode().cloneNode(true));
-        var match = Option.from(Arr.find(handlers, function (x) {
-          return x.pred(state, token);
-        }));
-
-        var action = match.fold(Fun.constant(logFallback), function (m) {
-          var label = m.label();
-          return label === undefined ? m.action : logger(name + ' :: ' + label, m.action);
-        });
-        action(api, state, token);
-      };
-
-      r.toString = function () { return 'Handlers for ' + name; };
-      return r;
-    };
-
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.state.Transitions',
-
-  [
-  ],
-
-  function () {
-    var next = function (state, listState) {
-      if (state === undefined || listState === undefined) {
-        console.trace();
-        throw 'brick';
-      }
-      state.nextFilter.set(listState);
-    };
-
-    var setNext = function (listState) {
-      return function (api, state, token) {
-        next(state, listState);
-      };
-    };
-
-    var go = function (api, state, token) {
-      var nextFilter = state.nextFilter.get();
-      nextFilter(api, state, token);
-    };
-
-    var jump = function (listState) {
-      return function (api, state, token) {
-        next(state, listState);
-        go(api, state, token);
-      };
-    };
-
-    var isNext = function (state, listState) {
-      return state.nextFilter.get() === listState;
-    };
-
-    return {
-      next: next,
-      go: go,
-      jump: jump,
-      isNext: isNext,
-      setNext: setNext
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.AfterListState',
-
-  [
-    'ephox.pastiche.inspect.Paragraphs',
-    'ephox.pastiche.inspect.Texts',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Transitions'
-  ],
-
-  function (Paragraphs, Texts, Handler, Handlers, Transitions) {
-    var run = function (skipEmptyParaState, noListState) {
-
-      var blankAction = function (api, state, token) {
-        api.defer(token);
-      };
-
-      var normalParaAction = function (api, state, token) {
-        state.openedTag.set(token);
-        api.defer(token);
-        Transitions.next(state, skipEmptyParaState);
-      };
-
-      var fallback = function (api, state, token) {
-        noListState(api, state, token);
-      };
-
-      return Handlers('AfterListState', [
-        Handler(Texts.isBlank, blankAction, 'blank text'),
-        Handler(Paragraphs.isNormal, normalParaAction, 'normal paragraph')
-      ], fallback);
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.States',
-
-  [
-    'ephox.pastiche.engine.Token'
-  ],
-
-  function (Token) {
-    // MOVE ME?
-    var isCloser = function (state, token) {
-      return token.type() === Token.END_ELEMENT_TYPE && state.originalToken.get() && token.tag() === state.originalToken.get().tag();
-    };
-
-    return {
-      isCloser: isCloser
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.AfterNoBulletListState',
-
-  [
-    'ephox.pastiche.inspect.States',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Transitions'
-  ],
-
-  function (States, Handler, Handlers, Transitions) {
-    var run = function (afterListState) {
-
-      var action = function (api, state, token) {
-        Transitions.next(state, afterListState);
-        /*
-          I think that this should be 0, but it breaks qUnit test cases in powerpaste if it isn't -1. Probably
-          need to look into it in more detail. The level 0 check in ListModel in the emitter should
-          take care of it anyway.
-        */
-        state.styleLevelAdjust.set(-1);
-        api.emit(token);
-      };
-
-      var fallback = function (api, state, token) {
-        api.emit(token);
-      };
-
-      return Handlers('AfterNoBullet', [
-        Handler(States.isCloser, action, ' closing open tag')
-      ], fallback);
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Images',
-
-  [
-    'ephox.pastiche.inspect.Tags'
-  ],
-
-  function (Tags) {
-
-    var isEnd = Tags.isEndOf('IMG');
-    var isStart = Tags.isStartOf('IMG');
-
-    return {
-      isStart: isStart,
-      isEnd: isEnd
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Markers',
-
-  [
-    'ephox.pastiche.engine.Token'
-  ],
-
-  function (Token) {
-
-    var is = function (state, token) {
-      return token.tag() === 'A' || token.tag() === 'SPAN';
-    };
-
-    var isStart = function (state, token) {
-      return token.type() === Token.START_ELEMENT_TYPE && is(state, token);
-    };
-
-    var isEnd = function (state, token) {
-      return token.type() === Token.END_ELEMENT_TYPE && is(state, token);
-    };
-
-    return {
-      isStart: isStart,
-      isEnd: isEnd,
-      is: is
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.state.Spans',
-
-  [
-    'ephox.pastiche.list.state.Transitions'
-  ],
-
-  function (Transitions) {
-    var deferAndPop = function (api, state, token) {
-      api.defer(token);
-      pop(api, state, token);
-    };
-
-    var deferAndPush = function (api, state, token) {
-      api.defer(token);
-      push(api, state, token);
-    };
-
-    var push = function (api, state, token) {
-      state.spanCount.get().push(token);
-    };
-
-    var pop = function (api, state, token) {
-      state.spanCount.get().pop();
-    };
-
-    var pushThen = function (listState) {
-      return function (api, state, token) {
-        push(api, state, token);
-        Transitions.next(state, listState);
-      };
-    };
-
-    var popThen = function (listState) {
-      return function (api, state, token) {
-        pop(api, state, token);
-        Transitions.next(state, listState);
-      };
-    };
-
-    return {
-      deferAndPush: deferAndPush,
-      deferAndPop: deferAndPop,
-      push: push,
-      pop: pop,
-      pushThen: pushThen,
-      popThen: popThen
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.BeforeSpacerState',
-
-  [
-    'ephox.pastiche.inspect.Images',
-    'ephox.pastiche.inspect.Markers',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Spans',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Images, Markers, Handler, Handlers, Spans, Fun) {
-    var run = function (spacerState, closeSpansState, unexpectedToken) {
-
-      var fallback = function (api, state, token) {
-        unexpectedToken(api, token);
-      };
-
-      return Handlers('BeforeSpacer', [
-        Handler(Markers.isStart, Spans.pushThen(spacerState), 'start marker'),
-        Handler(Markers.isEnd, Spans.popThen(closeSpansState), 'end marker'),
-        Handler(Images.isEnd, Fun.noop, 'end image')
-      ], fallback);
-
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Comments',
-
-  [
-    'ephox.pastiche.engine.Token'
-  ],
-
-  function (Token) {
-
-    var is = function (state, token) {
-      return token.type() === Token.COMMENT_TYPE;
-    };
-
-    var isNotEndIf = function (state, token) {
-      return is(state, token) && token.text() !== '[endif]';
-    };
-
-    var isEndIf = function (state, token) {
-      return is(state, token) && token.text() === '[endif]';
-    };
-
-    var isListSupport = function (state, token) {
-      return is(state, token) && token.text() === '[if !supportLists]';
-    };
-
-    return {
-      is: is,
-      isNotEndIf: isNotEndIf,
-      isEndIf: isEndIf,
-      isListSupport: isListSupport
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Logic',
-
-  [
-    'ephox.compass.Arr'
-  ],
-
-  function (Arr) {
-    var any = function (conditions) {
-      return function (state, token) {
-        return Arr.exists(conditions, function (c) {
-          return c(state, token);
-        });
-      };
-    };
-
-    var all = function (conditions) {
-      return function (state, token) {
-        return Arr.forall(conditions, function (c) {
-          return c(state, token);
-        });
-      };
-    };
-
-    return {
-      any: any,
-      all: all
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.CloseSpansState',
-
-  [
-    'ephox.pastiche.inspect.Comments',
-    'ephox.pastiche.inspect.Logic',
-    'ephox.pastiche.inspect.Markers',
-    'ephox.pastiche.inspect.Tags',
-    'ephox.pastiche.inspect.Texts',
-    'ephox.pastiche.list.detect.ListTypes',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Spans',
-    'ephox.pastiche.list.state.Transitions',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.perhaps.Result'
-  ],
-
-  function (Comments, Logic, Markers, Tags, Texts, ListTypes, Handler, Handlers, Spans, Transitions, Fun, Option, Result) {
-    var run = function (itemContentState, unexpectedToken) {
-
-      var getListType = function (state) {
-        var currentType = state.emitter.getCurrentListType();
-        var currentLevel = state.emitter.getCurrentLevel();
-        // FIX: Don't coerce types.
-        var preferred = currentLevel == state.itemLevel.get() ? currentType : null;
-        return Option.from(ListTypes.guess(state.bulletInfo.get(), preferred, state.originalToken.get()));
-      };
-
-      var openItem = function (api, state, token) {
-        state.emitter.openItem(state.itemLevel.get(), state.originalToken.get(), state.listType.get(), state.skippedPara.get());
-        api.emitDeferred();
-        while (state.spanCount.get().length > 0) {
-          api.emit(state.spanCount.get().shift());
-        }
-      };
-
-      var updateState = function (state, token) {
-        Transitions.next(state, itemContentState);
-        if (state.commentMode.get()) {
-          var indent = state.indentGuesser.guessIndentLevel(token, state.originalToken.get(), state.styles, state.bulletInfo.get());
-          state.itemLevel.set(indent);
-        }
-      };
-
-      var tryItem = function (api, state, token) {
-        var listType = getListType(state);
-        return listType.fold(function () {
-          state.listType.set(null);
-          return Result.error("Unknown list type: "  + state.bulletInfo.get().text + " Symbol font? " + state.bulletInfo.get().symbolFont);
-        }, function (type) {
-          state.listType.set(type);
-          return Result.value(openItem);
-        });
-      };
-
-      var updateAndEmit = function (api, state, token) {
-        updateState(state, token);
-        var emitter = tryItem(api, state, token);
-        emitter.fold(function (msg) {
-          console.log(msg);
-          api.rollback();
-        }, function (x) {
-          x(api, state, token);
-          api.emit(token);
-        });
-      };
-
-      var skipComment = function (api, state, token) {
-        updateState(state, token);
-        var emitter = tryItem(api, state, token);
-        emitter.fold(function (msg) {
-          console.log(msg);
-          api.rollback();
-        }, function (x) {
-          x(api, state, token);
-        });
-      };
-
-      var handlers = [
-        Handler(Logic.any([ Texts.is, Tags.isStart ]), updateAndEmit, 'text or start tag'),
-        Handler(Comments.isNotEndIf, updateAndEmit, 'non-endif comment'),
-        Handler(Comments.isEndIf, skipComment, 'endif comment'),
-        Handler(Markers.isEnd, Spans.pop, 'end marker'),
-        Handler(Tags.isEnd, Fun.noop, 'end tag')
-      ];
-
-      return Handlers('CloseSpans', handlers, function (api, state, token) {
-        unexpectedToken(api, token);
-      });
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.FindListTypeState',
-
-  [
-    'ephox.pastiche.inspect.Images',
-    'ephox.pastiche.inspect.Markers',
-    'ephox.pastiche.inspect.Texts',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Spans',
-    'ephox.pastiche.list.state.Transitions',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Images, Markers, Texts, Handler, Handlers, Spans, Transitions, Fun) {
-    var run = function (beforeSpacerState, unexpectedToken) {
-      var action = function (bullets) {
-        return function (api, state, token) {
-          Transitions.next(state, beforeSpacerState);
-          state.bulletInfo.set(bullets(state, token));
-        };
-      };
-
-      var textAction = action(function (state, token) {
-        return {
-          text: token.text(),
-          symbolFont: state.symbolFont.get()
-        };
-      });
-
-      var imageAction = action(function (state, token) {
-        // Custom list image type.  We can't access the image so use a normal bullet instead.
-        // EditLive! may want this to come through as a CSS reference.
-        return {
-          text: '\u2202',
-          symbolFont: true
-        };
-      });
-
-      var fallback = function (api, state, token) {
-        unexpectedToken(api, token);
-      };
-
-      return Handlers('FindListType', [
-        Handler(Texts.isWhitespace, Fun.noop, 'text is whitespace'),
-        Handler(Texts.is, textAction, 'text'),
-        Handler(Markers.isStart, Spans.push, 'start marker'),
-        Handler(Markers.isEnd, Spans.pop, 'end marker'),
-        Handler(Images.isStart, imageAction, 'start image')
-      ], fallback);
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.ItemContentState',
-
-  [
-    'ephox.pastiche.inspect.States',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Transitions'
-  ],
-
-  function (States, Handler, Handlers, Transitions) {
-    var run = function (afterListState) {
-
-      var closeItem = function (api, state, token) {
-        Transitions.next(state, afterListState);
-        state.skippedPara.set(false);
-      };
-
-      var handlers = [
-        Handler(States.isCloser, closeItem, 'Closing open tag')
-      ];
-
-      return Handlers('ItemContentState', handlers, function (api, state, token) {
-        api.emit(token);
-      });
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.state.CommentOff',
-
-  [
-    'ephox.pastiche.inspect.Comments',
-    'ephox.pastiche.inspect.Texts'
-  ],
-
-  function (Comments, Texts) {
-    var isText = function (state, token) {
-      return !state.commentMode.get() && Texts.is(state, token);
-    };
-
-    var isComment = function (state, token) {
-      return !state.commentMode.get() && Comments.is(state, token);
-    };
-
-    return {
-      isText: isText,
-      isComment: isComment
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.state.CommentOn',
-
-  [
-    'ephox.pastiche.engine.TokenUtil',
-    'ephox.pastiche.inspect.Comments',
-    'ephox.pastiche.inspect.Texts'
-  ],
-
-  function (TokenUtil, Comments, Texts) {
-    var isText = function (state, token) {
-      return state.commentMode.get() && Texts.is(state, token);
-    };
-
-    var isComment = function (state, token) {
-      return state.commentMode.get() && Comments.is(state, token);
-    };
-
-    var isUnstyled = function (state, token) {
-      var style = TokenUtil.getAttribute(token, 'style');
-      return state.commentMode.get() && style === "" || style === null;
-    };
-
-    return {
-      isText: isText,
-      isComment: isComment,
-      isUnstyled: isUnstyled
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.ListStartState',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.pastiche.inspect.Logic',
-    'ephox.pastiche.inspect.Microsoft',
-    'ephox.pastiche.inspect.Tags',
-    'ephox.pastiche.inspect.Texts',
-    'ephox.pastiche.list.detect.ListSymbols',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.CommentOff',
-    'ephox.pastiche.list.state.CommentOn',
-    'ephox.pastiche.list.state.Spans',
-    'ephox.pastiche.list.state.Transitions',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Arr, Logic, Microsoft, Tags, Texts, ListSymbols, Handler, Handlers, CommentOff, CommentOn, Spans, Transitions, Fun) {
-    var run = function (findListTypeState, afterNoBulletListState, unexpectedToken) {
-
-      /* In one of the adhoc tests on Word 2007, Win XP ... a span with a massive number of nbsp was
-      added at the ListStart stage. This was added to jump to the end of it. */
-      var skipWhitespace = function () {
-        return Handlers('TESTER', [
-          Handler(Tags.isEndOf('SPAN'), Transitions.setNext(result), 'Finishing span'),
-          Handler(Texts.isWhitespace, Fun.noop, 'Is whitespace')
-        ], function (api, state, token) {
-          unexpectedToken(api, token);
-        });
-      };
-
-      var noBullet = function (api, state, token) {
-        // List type without a bullet, we should treat it as a paragraph.
-
-        // What about if it is 1. or something similar?
-        var start = state.originalToken.get();
-        var spans = state.spanCount.get();
-        state.emitter.closeAllLists();
-        api.emit(start);
-        Arr.each(spans, api.emit);
-        api.emit(token);
-        api.commit();
-        state.originalToken.set(start);
-        Transitions.next(state, afterNoBulletListState);
-      };
-
-      var isBulletSymbol = function (s, t) {
-        return Texts.is(s, t) && ListSymbols.match(t.text(), s.symbolFont.get()).length > 0;
-      };
-
-      var result = function (api, state, token) {
-        if (Microsoft.isIgnore(state, token)) {
-          Transitions.next(state, findListTypeState);
-        }
-
-        var r = Handlers('ListStartState', [
-          Handler(
-            Logic.all([ Tags.isStartOf('SPAN'), CommentOn.isUnstyled ]),
-            Spans.pushThen(findListTypeState),
-            'unstyled span'
-          ),
-
-          // This handler was added due to adhoc Word 2007 XP content. It breaks QUnit tests.
-          /* Handler(Logic.all([ Tags.isStart, Tags.isWhitespace('SPAN') ]), Transitions.setNext(skipWhitespace()), 'a whitespace tag'), */
-          Handler(Tags.isStartOf('SPAN'), Spans.push, 'starting span'),
-          Handler(Tags.isStartOf('A'), Spans.push, 'starting a'),
-          Handler(Tags.isEndOf('A'), Spans.pop, 'ending a'),
-          Handler(CommentOn.isText, Transitions.jump(findListTypeState), 'commentOn -> text'),
-          // This handler is new. It may be a problem.
-          Handler(isBulletSymbol, Transitions.jump(findListTypeState), 'mogran :: text is [1-9].'),
-          Handler(Texts.is, noBullet, 'text'),
-          Handler(CommentOff.isComment, Fun.noop, 'commentOff -> comment'),
-
-          // This was added to handle more gracefully the images in some of the test data. May be wrong.
-          Handler(Tags.isStartOf('IMG'), Transitions.jump(findListTypeState), 'mogran :: start image tag')
-        ], function (api, state, token) {
-          unexpectedToken(api, token);
-        });
-
-        return r(api, state, token);
-      };
-
-      result.toString = function () { return 'Handlers for ListStartState'; };
-      return result;
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Browser',
-
-  [
-    'ephox.pastiche.engine.Token',
-    'ephox.pastiche.inspect.Microsoft',
-    'global!document',
-    'global!navigator'
-  ],
-
-  function (Token, Microsoft, document, navigator) {
-    var supportsCustomStyles = function () {
-      // Firefox 4 preserves these styles in the DOM, but strips them when pasting.
-      // Since we can't trigger a paste there's no way to detect this situation apart from sniffing.
-      if (navigator.userAgent.indexOf('Gecko') > 0 && navigator.userAgent.indexOf('WebKit') < 0) return false;
-      var div = document.createElement('div');
-      try {
-        div.innerHTML = '<p style="mso-list: Ignore;">&nbsp;</p>';
-      } catch (ex) {
-        // Can't set innerHTML if we're in XHTML mode so just assume we don't get custom styles.
-        return false;
-      }
-
-      var token = Token.token(div.firstChild);
-      // INVESTIGATE: Does this need to be lowercased?
-      return Microsoft.isIgnore({}/*state*/, token);
-    };
-
-    return {
-      supportsCustomStyles: supportsCustomStyles
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.detect.ImageList',
-
-  [
-  ],
-
-  function () {
-    var is = function (state, node, symbol) {
-      var alt = node !== undefined && node !== null && node.getAttribute !== undefined && node.getAttribute !== null ? node.getAttribute('alt') : '';
-      // The check here for === * is because we are disabling image lists as they
-      // interfere with regular images. The one exception where it is reasonable
-      // to assume it is a list is if the alt text is *.
-      return !!node && node.tagName === 'IMG' && alt === '*';
-    };
-
-    return {
-      is: is
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.detect.TextList',
-
-  [
-    'ephox.pastiche.list.detect.ListTypes',
-    'ephox.violin.Strings'
-  ],
-
-  function (ListTypes, Strings) {
-    var is = function (state, rawNode, symbol) {
-      var node = rawNode;
-      var value = node.nodeValue;
-      if (!Strings.trim(value)) {
-        // This handles the case where there's a SPAN with nbsps before the bullet such as with roman numerals.
-        node = node.parentNode.nextSibling;
-        value = node ? node.nodeValue : '';
-      }
-
-      // Real lists have the bullet with NBSPs either side surrounded in a SPAN.  If there's anything else, it's not a list.
-      if (!node || Strings.trim(node.parentNode.textContent) != value) {
-        return false;
-      }
-      listType = ListTypes.guess({ text: value, symbolFont: symbol }, null, state.originalToken.get());
-
-      if (listType) {
-
-        // Don't convert numbered headings to lists.
-        var r = !!node.nextSibling && node.nextSibling.tagName === 'SPAN' && /^[\u00A0\s]/.test(node.nextSibling.firstChild.nodeValue) &&
-            (state.openedTag.get().tag() === 'P' || listType.tag === 'UL');
-        return r;
-      } else {
-        return false;
-      }
-    };
-
-    return {
-      is: is
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.detect.ListDetect',
-
-  [
-    'ephox.highway.Merger',
-    'ephox.pastiche.inspect.Tags',
-    'ephox.pastiche.list.detect.ImageList',
-    'ephox.pastiche.list.detect.TextList'
-  ],
-
-  function (Merger, Tags, ImageList, TextList) {
-
-    var update = function (output) {
-      var node = output.node;
-      var font = node.style.fontFamily;
-      return font ? Merger.merge(output, { symbol: (font === 'Wingdings' || font === 'Symbol') }) : output;
-    };
-
-    var hasMarkerFirst = function (node) {
-      return !!node.firstChild && (node.firstChild.tagName === 'SPAN' || node.firstChild.tagName === 'A');
-    };
-
-    var findItem = function (node) {
-      var output = update({ node: node });
-
-      var initialEmptyA = node.childNodes.length > 1 && output.node.firstChild.tagName === 'A' && output.node.firstChild.textContent === '';
-      output = initialEmptyA ? { node: output.node.childNodes[1], symbol: output.symbol } : output;
-
-      while (hasMarkerFirst(output.node)) {
-        output = update({ node: output.node.firstChild, symbol: output.symbol });
-      }
-
-      return {
-        node: output.node.firstChild,
-        symbol: output.symbol
-      };
-    };
-
-    var isUnofficialList = function (state, token) {
-      if (!Tags.isStartOf('SPAN')(state, token) || !state.openedTag.get()) return false;
-      var node = state.openedTag.get().getNode();
-      var item = findItem(node);
-      var detector = item.node && item.node.nodeType === 3 ? TextList : ImageList;
-      return detector.is(state, item.node, item.symbol);
-    };
-
-    return {
-      isUnofficialList: isUnofficialList
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.inspect.Lists',
-
-  [
-    'ephox.pastiche.engine.TokenUtil',
-    'ephox.pastiche.inspect.Browser',
-    'ephox.pastiche.inspect.Comments',
-    'ephox.pastiche.inspect.Microsoft',
-    'ephox.pastiche.inspect.Tags',
-    'ephox.pastiche.list.detect.ListDetect',
-    'ephox.perhaps.Option'
-  ],
-
-  function (TokenUtil, Browser, Comments, Microsoft, Tags, ListDetect, Option) {
-    var getLevel = function (token) {
-      var msoList = TokenUtil.getMsoList(token);
-      var lvl = / level([0-9]+)/.exec(msoList);
-      return lvl && lvl[1] ? Option.some(parseInt(lvl[1], 10)) : Option.none();
-    };
-
-    var isStart = function (state, token) {
-      return Tags.isStart(state, token) && Microsoft.isList(state, token) && token.tag() !== 'LI';
-    };
-
-    var isValidStart = function (state, token) {
-      return isStart(state, token) && getLevel(token).isSome();
-    };
-
-    var isInvalidStart = function (state, token) {
-      return isStart(state, token) && getLevel(token).isNone();
-    };
-
-    var isSpecial = function (state, token) {
-      var custom = Browser.supportsCustomStyles();
-      return !custom && Comments.isListSupport(state, token) || ListDetect.isUnofficialList(state, token);
-    };
-
-    return {
-      getLevel: getLevel,
-      isStart: isStart,
-      isValidStart: isValidStart,
-      isInvalidStart: isInvalidStart,
-      isSpecial: isSpecial
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.NoListState',
-
-  [
-    'ephox.pastiche.inspect.Lists',
-    'ephox.pastiche.inspect.Markers',
-    'ephox.pastiche.inspect.Tags',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Spans',
-    'ephox.pastiche.list.state.Transitions'
-  ],
-
-  function (Lists, Markers, Tags, Handler, Handlers, Spans, Transitions) {
-    var run = function (lazyListStartState) {
-
-      var startList = function (api, state, token) {
-        var level = Lists.getLevel(token);
-        level.each(function (l) {
-          state.itemLevel.set(l + state.styleLevelAdjust.get());
-          // Tokens between lists should be dropped (they're just whitespace anyway)
-          // however, tokens before a list should be emitted if we find an mso-list style
-          // since this is the very first token of the list.
-          var deferring = Transitions.isNext(state, result) ? api.emitDeferred : api.dropDeferred;
-          deferring();
-
-          Transitions.next(state, lazyListStartState());
-          api.startTransaction();
-          state.originalToken.set(token);
-          state.commentMode.set(false);
-        });
-      };
-
-      var specialList = function (api, state, token) {
-        if (Tags.isStartOf('SPAN')(state, token)) {
-          Spans.push(api, state, token);
-        }
-        Transitions.next(state, lazyListStartState());
-        api.startTransaction();
-        state.originalToken.set(state.openedTag.get());
-        state.commentMode.set(true);
-        state.openedTag.set(null);
-        api.dropDeferred();
-      };
-
-      var startTag = function (api, state, token) {
-        if (state.openedTag.get()) {
-          state.emitter.closeAllLists();
-          api.emitDeferred();
-        }
-        state.openedTag.set(token);
-        api.defer(token);
-      };
-
-      var closeOutLists = function (api, state, token) {
-        state.emitter.closeAllLists();
-        api.emitDeferred();
-        state.openedTag.set(null);
-        api.emit(token);
-        Transitions.next(state, result);
-      };
-
-      var result = Handlers('NoListState', [
-        Handler(Lists.isValidStart, startList, 'valid list so start it'),
-        Handler(Lists.isInvalidStart, closeOutLists, 'invalid list so close lists'),
-        Handler(Lists.isSpecial, specialList, 'special list'),
-        Handler(Markers.isEnd, Spans.deferAndPop, 'closing marker'),
-        Handler(Markers.isStart, Spans.deferAndPush, 'starting marker'),
-        Handler(Tags.isStart, startTag, 'starting tag')
-      ], closeOutLists);
-
-      return result;
-    };
-
-    return {
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.SkipEmptyParaState',
-
-  [
-    'ephox.pastiche.inspect.Browser',
-    'ephox.pastiche.inspect.Logic',
-    'ephox.pastiche.inspect.Microsoft',
-    'ephox.pastiche.inspect.Tags',
-    'ephox.pastiche.inspect.Texts',
-    'ephox.pastiche.list.detect.ListDetect',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Spans',
-    'ephox.pastiche.list.state.Transitions'
-  ],
-
-  function (Browser, Logic, Microsoft, Tags, Texts, ListDetect, Handler, Handlers, Spans, Transitions) {
-    var run = function (noListState, lazyAfterListState) {
-
-      var isFirstMarker = function (state, token) {
-        return Tags.isStartOf('SPAN')(state, token) && state.spanCount.get().length === 0;
-      };
-
-      var isNotList = function (state, token) {
-        return (Browser.supportsCustomStyles() || !ListDetect.isUnofficialList(state, token)) && !Microsoft.isList(state, token);
-      };
-
-      var skip = function (api, state, token) {
-        api.defer(token);
-        state.skippedPara.set(true);
-        state.openedTag.set(null);
-        Transitions.next(state, lazyAfterListState());
-      };
-
-      var defer = function (api, state, token) {
-        api.defer(token);
-      };
-
-      return Handlers('SkipEmptyPara', [
-        Handler(Logic.all([ isFirstMarker, isNotList ]), Spans.deferAndPush, 'first marker or not list'),
-        Handler(Tags.isEndOf('SPAN'), Spans.deferAndPop, 'end span'),
-        Handler(Tags.isEndOf('P'), skip, 'end p'),
-        Handler(Tags.isEnd, Transitions.jump(noListState), 'end tag'),
-        Handler(Texts.isWhitespace, defer, 'whitespace')
-      ], Transitions.jump(noListState));
-    };
-
-    return {
-      run: run
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.stage.SpacerState',
-
-  [
-    'ephox.pastiche.inspect.Markers',
-    'ephox.pastiche.inspect.Tags',
-    'ephox.pastiche.list.stage.Handler',
-    'ephox.pastiche.list.stage.Handlers',
-    'ephox.pastiche.list.state.Spans',
-    'ephox.pastiche.list.state.Transitions',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Markers, Tags, Handler, Handlers, Spans, Transitions, Fun) {
-    var run = function (closeSpansState) {
-      return Handlers('Spacer', [
-        Handler(Markers.isEnd, Spans.popThen(closeSpansState), 'end marker'),
-        Handler(Tags.isEnd, Transitions.setNext(closeSpansState), 'end tag')
-      ], Fun.noop);
-    };
-
-    return {
-      run: run
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.emit.Emission',
-
-  [
-    'ephox.scullion.Struct'
-  ],
-
-  function (Struct) {
-    var result = Struct.immutable('state', 'result');
-    var value = Struct.immutable('state', 'value');
-    var state = Struct.immutable('level', 'type', 'types', 'items');
-
-    return {
-      state: state,
-      value: value,
-      result: result
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.emit.ItemStack',
-
-  [
-    'ephox.pastiche.list.emit.Emission',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Emission, Option) {
-    var finish = function (state) {
-      var stack = state.items().slice(0);
-      if (stack.length > 0 && stack[stack.length - 1] !== 'P') {
-        var item = stack[stack.length - 1];
-        stack[stack.length - 1] = 'P';
-        var newState = Emission.state(state.level(), state.type(), state.types(), stack);
-        return Emission.value(newState, Option.some(item));
-      } else {
-        return Emission.value(state, Option.none());
-      }
-    };
-
-    var start = function (state, tag) {
-      var stack = state.items().slice(0);
-      var value = tag !== undefined && tag !== 'P' ? Option.some(tag) : Option.none();
-
-      value.fold(function () {
-        stack.push('P');
-      }, function (v) {
-        stack.push(v);
-      });
-
-      var newState = Emission.state(state.level(), state.type(), state.types(), stack);
-      return Emission.value(newState, value);
-    };
-
-    return {
-      start: start,
-      finish: finish
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.emit.ListLevels',
-
-  [
-    'ephox.pastiche.list.emit.Emission'
-  ],
-
-  function (Emission) {
-    var moveUntil = function (state, predicate, f) {
-      var tokens = [];
-
-      var current = state;
-      while (predicate(current)) {
-        var acc = f(current);
-        current = acc.state();
-        tokens = tokens.concat(acc.result());
-      }
-      return Emission.result(current, tokens);
-    };
-
-    var moveRight = function (state, level, open) {
-      var predicate = function (s) {
-        return s.level() < level;
-      };
-
-      return moveUntil(state, predicate, open);
-    };
-
-    var moveLeft = function (state, level, close) {
-      var predicate = function (state) {
-        return state.level() > level;
-      };
-
-      return moveUntil(state, predicate, close);
-    };
-
-    return {
-      moveRight: moveRight,
-      moveLeft: moveLeft,
-      moveUntil: moveUntil
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.emit.ListItemStyles',
-
-  [
-    'ephox.pastiche.engine.TokenUtil'
-  ],
-
-  function (TokenUtil) {
-
-    var unsafeFrom = function (token) {
-      var leftMargin = TokenUtil.getStyle(token, 'margin-left');
-      return leftMargin !== undefined && leftMargin !== '0px' ? { 'margin-left': leftMargin } : {};
-    };
-
-    var from = function (token) {
-      var noToken = {
-        'list-style-type': 'none'
-      };
-
-      return !token ? noToken : unsafeFrom(token);
-    };
-
-    return {
-      from: from
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.emit.SkippedTokens',
-
-  [
-    'ephox.pastiche.engine.Token',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Token, Fun) {
-    var para = function (doc) {
-      return [
-        Fun.curry(Token.createStartElement, 'P', {}, {}),
-        Fun.curry(Token.createText, '\u00A0'),
-        Fun.curry(Token.createEndElement, 'P')
-      ];
-    };
-
-    return {
-      para: para
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.emit.ListTokens',
-
-  [
-    'ephox.pastiche.cleanup.Cleaners',
-    'ephox.pastiche.engine.Token',
-    'ephox.pastiche.list.detect.ListTypes',
-    'ephox.pastiche.list.emit.Emission',
-    'ephox.pastiche.list.emit.ItemStack',
-    'ephox.pastiche.list.emit.ListItemStyles',
-    'ephox.pastiche.list.emit.SkippedTokens',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Cleaners, Token, ListTypes, Emission, ItemStack, ListItemStyles, SkippedTokens, Fun) {
-    var open = function(state, type, style) {
-      var attributes = type.start && type.start > 1 ? { start: type.start } : {};
-      var level = state.level() + 1;
-      var listType = type;
-      var listTypes = state.types().concat([type]);
-      var result = [ Fun.curry(Token.createStartElement, type.tag, attributes, style) ];
-      var newState = Emission.state(level, listType, listTypes, state.items());
-      return Emission.result(newState, result);
-    };
-
-    var close = function(state) {
-      var listTypes = state.types().slice(0);
-      var result = [ Fun.curry(Token.createEndElement, listTypes.pop().tag) ];
-      var level = state.level() - 1;
-      var listType = listTypes[listTypes.length - 1];
-      var newState = Emission.state(level, listType, listTypes, state.items());
-      return Emission.result(newState, result);
-    };
-
-    var shuffle = function (state, type, skippedPara) {
-      var e1 = close(state);
-      var extra = skippedPara ? SkippedTokens.para() : [];
-      var e2 = open(e1.state(), type, type.type ? { 'list-style-type': type.type } : {});
-      return Emission.result(e2.state(), e1.result().concat(extra).concat(e2.result()));
-    };
-
-    var openItem = function(state, paragraphToken, type, skippedPara) {
-      var attributes = {};
-      var style = ListItemStyles.from(paragraphToken);
-
-      var e1 = state.type() && !ListTypes.eqListType(state.type(), type) ?
-        shuffle(state, type, skippedPara) :
-        Emission.result(state, []);
-      var tokens = [ Fun.curry(Token.createStartElement, 'LI', attributes, style) ];
-
-      var e2 = ItemStack.start(e1.state(), paragraphToken && paragraphToken.tag());
-      var moreTokens = e2.value().map(function (v) {
-        Cleaners.styleDom(paragraphToken.getNode(), Fun.constant(true));
-        return [ Fun.constant(paragraphToken) ];
-      }).getOr([]);
-
-      return Emission.result(e2.state(), e1.result().concat(tokens).concat(moreTokens));
-    };
-
-    var closeItem = function(state) {
-      var li = Fun.curry(Token.createEndElement, 'LI');
-      var e1 = ItemStack.finish(state);
-      var r = e1.value().fold(function () {
-        return [ li ];
-      }, function (item) {
-        return [ Fun.curry(Token.createEndElement, item), li ];
-      });
-      return Emission.result(e1.state(), r);
-    };
-
-    return {
-      open: open,
-      openItem: openItem,
-      close: close,
-      closeItem: closeItem
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.emit.ListModel',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.pastiche.engine.Token',
-    'ephox.pastiche.list.emit.Emission',
-    'ephox.pastiche.list.emit.ItemStack',
-    'ephox.pastiche.list.emit.ListLevels',
-    'ephox.pastiche.list.emit.ListTokens',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Arr, Token, Emission, ItemStack, ListLevels, ListTokens, Fun, Option) {
-    var compose = function (emissions) {
-      if (emissions.length === 0) throw 'Compose must have at least one element in the list';
-      var last = emissions[emissions.length - 1];
-      var tokens = Arr.bind(emissions, function (emission) {
-        return emission.result();
-      });
-      return Emission.result(last.state(), tokens);
-    };
-
-    var closeLevel = function (state) {
-      var e1 = ListTokens.closeItem(state);
-      var e2 = ListTokens.close(e1.state());
-      return compose([ e1, e2 ]);
-    };
-
-    var openLevel = function (state, type, level, paragraphToken) {
-      var style = state.level() === level - 1 && type.type ? { 'list-style-type': type.type } : {};
-      var e1 = ListTokens.open(state, type, style);
-      var e2 = ListTokens.openItem(e1.state(), e1.state().level() == level ? paragraphToken : undefined, type);
-      return compose([ e1, e2 ]);
-    };
-
-    var sameLevel = function (state, type, paragraphToken, skippedPara) {
-      var e1 = state.level() > 0 ? ListTokens.closeItem(state) : Emission.result(state, []);
-      var e2 = ListTokens.openItem(e1.state(), paragraphToken, type, skippedPara);
-      return compose([ e1, e2 ]);
-    };
-
-    var openLevels = function (state, type, level, paragraphToken) {
-      return ListLevels.moveRight(state, level, function (s) {
-        return openLevel(s, type, level, paragraphToken);
-      });
-    };
-
-    var closeLevels = function (state, level) {
-      return ListLevels.moveLeft(state, level, closeLevel);
-    };
-
-    var jumpToLevel = function (state, type, level, paragraphToken) {
-      var e1 = level > 1 ? ItemStack.finish(state) : Emission.value(state, Option.none());
-      var tokens = e1.value().map(function (tag) {
-        return [ Fun.curry(Token.createEndElement, tag) ];
-      }).getOr([]);
-
-      var numLevels = level - e1.state().level();
-      var e2 = openLevels(e1.state(), type, level, paragraphToken);
-      return Emission.result(e2.state(), tokens.concat(e2.result()));
-    };
-
-    var openItem = function(state, level, paragraphToken, type, skippedPara) {
-      var e1 = state.level() > level ? closeLevels(state, level) : Emission.result(state, []);
-      var e2 = e1.state().level() === level ?
-        sameLevel(e1.state(), type, paragraphToken, skippedPara) :
-        jumpToLevel(e1.state(), type, level, paragraphToken);
-      return compose([ e1, e2 ]);
-    };
-
-    var closeAllLists = closeLevels;
-
-    return {
-      openItem: openItem,
-      closeAllLists: closeAllLists
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.emit.Emitter',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.pastiche.list.emit.Emission',
-    'ephox.pastiche.list.emit.ListModel'
-  ],
-
-  function (Arr, Emission, ListModel) {
-    var impliedULatLevel = [ 'disc', 'circle', 'square' ];
-
-    var removeImpliedListType = function(type, level) {
-      if (type.tag === 'UL') {
-        if (impliedULatLevel[level - 1] === type.type) {
-          type = { tag: 'UL' };
-        }
-      }
-      return type;
-    };
-
-    return function (api, doc) {
-
-      var state = Emission.state(0, undefined, [], []);
-
-      var emit = function (emission) {
-        Arr.each(emission.result(), function (x) {
-          var token = x(doc);
-          api.emit(token);
-        });
-      };
-
-      var closeAllLists = function() {
-        var e1 = ListModel.closeAllLists(state, 0);
-        state = e1.state();
-        emit(e1);
-        api.commit();
-      };
-
-      var openItem = function(level, paragraphToken, type, skippedPara) {
-        var style = {}, token;
-        if (!type) return;
-        var cleanType = removeImpliedListType(type, level);
-        var e1 = ListModel.openItem(state, level, paragraphToken, cleanType, skippedPara);
-        state = e1.state();
-        emit(e1);
-      };
-
-      var getCurrentLevel = function() {
-        return state.level();
-      };
-      var getCurrentListType = function() {
-        return state.type();
-      };
-
-      return {
-        closeAllLists: closeAllLists,
-        openItem: openItem,
-        getCurrentListType: getCurrentListType,
-        getCurrentLevel: getCurrentLevel
-      };
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.indent.ListIndent',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.pastiche.engine.TokenUtil',
-    'ephox.violin.Strings',
-    'global!Math'
-  ],
-
-  function (Arr, TokenUtil, Strings, Math) {
-    var getLeftOffset = function(node, paragraph) {
-      var parent, child, offset = 0;
-      parent = node.parentNode;
-      while (parent !== null && parent !== paragraph.parentNode) {
-        offset += parent.offsetLeft;
-        parent = parent.offsetParent;
-      }
-      return offset;
-    };
-
-    var ephoxGetComputedStyle = function(node) {
-      if (node.ownerDocument.defaultView) {
-        return node.ownerDocument.defaultView.getComputedStyle(node, null);
-      }
-      return node.currentStyle || {};
-    };
-
-
-    /** A simplified memoize function which only supports one or two function parameters.
-     *
-     * @param fn
-     * @param param the funtion p
-     * @returns
-     */
-    var memoize2 = function(fn) {
-      var cache = {};
-      return function(param1, param2) {
-        var result, key = param1 + "," + param2;
-        if (cache.hasOwnProperty(key)) {
-          return cache[key];
-        }
-        result = fn.call(null, param1, param2);
-        cache[key] = result;
-        return result;
-      };
-    };
-
-    var findStyles = memoize2(function(css, className) {
-      var results, matcher = /([^{]+){([^}]+)}/g, match, el, computedStyle;
-      matcher.lastIndex = 0; // Firefox Mac reuses the same regex so we need to reset it.
-      while ((results = matcher.exec(css)) !== null && !match) {
-        Arr.each(results[1].split(','), function(selector) {
-          var dotIndex = selector.indexOf('.');
-          if (dotIndex >= 0 && Strings.trim(selector.substring(dotIndex + 1)) === className) {
-            match = results[2];
-            return false;
-          }
-        });
-      }
-      if (match) {
-        el = document.createElement('p');
-        el.setAttribute("style", match);
-        computedStyle = ephoxGetComputedStyle(el);
-        return computedStyle ? "" + computedStyle.marginLeft : false;
-      }
-      return false;
-    });
-
-    var indentGuesser = function() {
-
-      var listIndentAdjust;
-      var listIndentAmount;
-      var guessIndentLevel = function(currentToken, token, styles, bulletInfo) {
-        var indentAmount, itemIndent, el, level = 1;
-
-        if (bulletInfo && /^([0-9]+\.)+[0-9]+\.?$/.test(bulletInfo.text)) {
-          // Outline list type so we can just count the number of sections.
-          return bulletInfo.text.replace(/([0-9]+|\.$)/g, '').length + 1;
-        }
-        indentAmount = listIndentAmount || parseInt(findStyles(styles, TokenUtil.getAttribute(token, 'class')));
-
-        itemIndent = getLeftOffset(currentToken.getNode(), token.getNode());
-        if (!indentAmount) {
-          indentAmount = 48;
-        } else {
-          // We might get a 0 item indent if the list CSS code wasn't pasted as happens on Windows.
-          if (listIndentAdjust) {
-            itemIndent += listIndentAdjust;
-          } else if (itemIndent === 0) {
-            listIndentAdjust = indentAmount;
-            itemIndent += indentAmount;
-          }
-        }
-        listIndentAmount = indentAmount = Math.min(itemIndent, indentAmount);
-        level = Math.max(1, Math.floor(itemIndent / indentAmount)) || 1;
-        return level;
-      };
-      return {
-        guessIndentLevel: guessIndentLevel
-      };
-    };
-
-    return {
-      indentGuesser: indentGuesser
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.state.ListStyles',
-
-  [
-    'ephox.pastiche.engine.Token'
-  ],
-
-  function (Token) {
-    return function () {
-      var inStyle = false;
-      var styles = "";
-      var check = function(token) {
-        if (inStyle && token.type() === Token.TEXT_TYPE) {
-          styles += token.text();
-          return true;
-        } else if (token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'STYLE') {
-          inStyle = true;
-          return true;
-        } else if (token.type() === Token.END_ELEMENT_TYPE && token.tag() === 'STYLE') {
-          inStyle = false;
-          return true;
-        }
-        return false;
-      };
-      return {
-        check: check
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.scullion.Cell',
-
-  [
-  ],
-
-  function () {
-    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
-      };
-    };
-
-    return Cell;
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.list.state.ListState',
-
-  [
-    'ephox.pastiche.list.emit.Emitter',
-    'ephox.pastiche.list.indent.ListIndent',
-    'ephox.pastiche.list.state.ListStyles',
-    'ephox.peanut.Fun',
-    'ephox.scullion.Cell'
-  ],
-
-  function (Emitter, ListIndent, ListStyles, Fun, Cell) {
-
-    var indentGuesser = ListIndent.indentGuesser();
-    var styles = ListStyles();
-
-
-    var emitter = {
-      getCurrentListType: function () {
-        return lazyEmitter().getCurrentListType();
-      },
-      getCurrentLevel: function () {
-        return lazyEmitter().getCurrentLevel();
-      },
-      closeAllLists: function () {
-        return lazyEmitter().closeAllLists.apply(undefined, arguments);
-      },
-      openItem: function () {
-        return lazyEmitter().openItem.apply(undefined, arguments);
-      }
-    };
-
-    var lazyEmitter = function () {
-      return {
-        getCurrentListType: Fun.constant({}),
-        getCurrentLevel: Fun.constant(1),
-        closeAllLists: Fun.identity,
-        openItem: Fun.identity
-      };
-    };
-
-    return function (initialState) {
-      var nextFilter = Cell(initialState);
-      var itemLevel = Cell(0);
-      var originalToken = Cell(null);
-      var commentMode = Cell(false);
-      var openedTag = Cell(null);
-      var symbolFont = Cell(false);
-      var listType = Cell(null);
-      var spanCount = Cell([]);
-      var skippedPara = Cell(false);
-      var styleLevelAdjust = Cell(0);
-      var bulletInfo = Cell(undefined);
-      var logger = Cell([]);
-
-      var reset = function (api) {
-        nextFilter.set(initialState);
-        itemLevel.set(0);
-        originalToken.set(null);
-        commentMode.set(false);
-        openedTag.set(null);
-        symbolFont.set(false);
-        listType.set(null);
-        spanCount.set([]);
-        skippedPara.set(false);
-        styleLevelAdjust.set(0);
-        bulletInfo.set(undefined);
-        logger.set([]);
-
-        // ASSUMPTION: I think this approach in the past also papered over the stack needing resetting in the emitter.
-        _emitter = Emitter(api, api.document);
-        lazyEmitter = Fun.constant(_emitter);
-      };
-
-      return {
-        reset: reset,
-        nextFilter: nextFilter,
-        itemLevel: itemLevel,
-        originalToken: originalToken,
-        commentMode: commentMode,
-        openedTag: openedTag,
-        symbolFont: symbolFont,
-        listType: listType,
-        spanCount: spanCount,
-        skippedPara: skippedPara,
-        styleLevelAdjust: styleLevelAdjust,
-        bulletInfo: bulletInfo,
-        logger: logger,
-
-        emitter: emitter,
-        styles: styles,
-        indentGuesser: indentGuesser
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.pastiche.filter.Lists',
-
-  [
-    'ephox.pastiche.engine.Filter',
-    'ephox.pastiche.list.detect.ListTypes',
-    'ephox.pastiche.list.stage.AfterListState',
-    'ephox.pastiche.list.stage.AfterNoBulletListState',
-    'ephox.pastiche.list.stage.BeforeSpacerState',
-    'ephox.pastiche.list.stage.CloseSpansState',
-    'ephox.pastiche.list.stage.FindListTypeState',
-    'ephox.pastiche.list.stage.ItemContentState',
-    'ephox.pastiche.list.stage.ListStartState',
-    'ephox.pastiche.list.stage.NoListState',
-    'ephox.pastiche.list.stage.SkipEmptyParaState',
-    'ephox.pastiche.list.stage.SpacerState',
-    'ephox.pastiche.list.state.ListState',
-    'ephox.pastiche.list.state.Transitions'
-  ],
-
-  function (Filter, ListTypes, AfterListState, AfterNoBulletListState, BeforeSpacerState, CloseSpansState, FindListTypeState, ItemContentState, ListStartState, NoListState, SkipEmptyParaState, SpacerState, ListState, Transitions) {
-    var unexpectedToken = function(api, token) {
-      var info = 'Type: ' + token.type() + ', Tag: ' + token.tag() + ' Text: ' + token.text();
-      console.log('Unexpected token in list conversion: ' + info, activeState.nextFilter.get());
-      api.rollback();
-    };
-
-    var noListState = NoListState.run(function () {
-      return listStartState;
-    });
-    var skipEmptyParaState = SkipEmptyParaState.run(noListState, function () {
-      return afterListState;
-    });
-    var afterListState = AfterListState.run(skipEmptyParaState, noListState);
-    var itemContentState = ItemContentState.run(afterListState);
-    var closeSpansState = CloseSpansState.run(itemContentState, unexpectedToken);
-    var spacerState = SpacerState.run(closeSpansState);
-    var beforeSpacerState = BeforeSpacerState.run(spacerState, closeSpansState, unexpectedToken);
-    var findListTypeState = FindListTypeState.run(beforeSpacerState, unexpectedToken);
-    var afterNoBulletListState = AfterNoBulletListState.run(afterListState);
-    var listStartState = ListStartState.run(findListTypeState, afterNoBulletListState, unexpectedToken);
-
-    var activeState = ListState(noListState);
-
-    var receive = function(api, token) {
-      if (activeState.styles && activeState.styles.check(token)) {
-        return;
-      }
-
-      activeState.symbolFont.set(ListTypes.checkFont(token, activeState.symbolFont.get()));
-      Transitions.go(api, activeState, token);
-    };
-
-    return Filter.createFilter(receive, activeState.reset, 'lists');
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.limbo.process.Strategies',
-
-  [
-    'ephox.pastiche.api.HtmlPatterns',
-    'ephox.pastiche.api.HybridAction',
-    'ephox.pastiche.api.RuleConditions',
-    'ephox.pastiche.api.RuleMutations',
-    'ephox.pastiche.filter.Lists',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Css',
-    'ephox.violin.StringMatch'
-  ],
-
-  function (HtmlPatterns, HybridAction, RuleConditions, RuleMutations, Lists, Fun, Class, Css, StringMatch) {
-    // This will UNWRAP! tags such as <O:> and <U1:>
-    // Context: Word copy and paste.
-    var unwrapWordTags = HybridAction.unwrapper({
-      tags: [
-        { name: StringMatch.pattern(/^([OVWXP]|U[0-9]+|ST[0-9]+):/i) }
-      ]
-    });
-
-    // This will try and turn p tags into ol,ul and li tags where appropriate
-    // Context: Word copy and paste.
-    var parseLists = HybridAction.pipeline([ Lists ]);
-
-    // This will remove attributes matching: v:.., href with #_toc|#_mso, xmlns:, align
-    // and type on lists.
-    // Context: Word copy and paste.
-    var removeWordAttributes = HybridAction.removal({
-      attributes: [
-        { name: StringMatch.pattern(/^v:/) },
-        { name: StringMatch.exact('href'), value: StringMatch.contains('#_toc') },
-        { name: StringMatch.exact('href'), value: StringMatch.contains('#_mso') },
-        { name: StringMatch.pattern(/^xmlns(:|$)/) },
-        { name: StringMatch.exact('align') },
-        { name: StringMatch.exact('type'), condition: RuleConditions.isList }
-      ]
-    });
-
-    // This will remove script,meta,link,empty-style tags and on,id,name,lang attributes
-    // or styles containing OLE_LINK
-    // Context: All
-    var removeExcess = HybridAction.removal({
-      tags: [
-        { name: StringMatch.exact('script') },
-        { name: StringMatch.exact('meta') },
-        { name: StringMatch.exact('link') },
-        { name: StringMatch.exact('style'), condition: RuleConditions.isEmpty }
-      ],
-      attributes: [
-        { name: StringMatch.starts('on') },
-        { name: StringMatch.exact('"') },
-        { name: StringMatch.exact('id') },
-        { name: StringMatch.exact('name') },
-        { name: StringMatch.exact('lang') },
-        { name: StringMatch.exact('language') }
-        // INVESTIGATE: Should language go here as well ?
-      ],
-      styles: [
-        { name: StringMatch.all(), value: StringMatch.pattern(/OLE_LINK/i) }
-      ]
-    });
-
-    var isNotTransformed = function (element) {
-      return !Class.has(element, 'ephox-limbo-transform');
-    };
-
-    // This will remove any styles that are not list-style-type for all tags, and keep the width and height
-    // styles only for images.
-    // Context: Clean copy and paste.
-    var cleanStyles = HybridAction.removal({
-      styles: [
-        {
-          name: StringMatch.not(
-            StringMatch.pattern(/width|height|list-style-type/)
-          ),
-          condition: isNotTransformed
-        },
-        { name: StringMatch.pattern(/width|height/), condition: RuleConditions.isNotImage }
-      ]
-    });
-
-    // This will remove all classes that are not 'rtf-data-image'
-    // Context: Clean copy and paste.
-    var cleanClasses = HybridAction.removal({
-      classes: [
-        {
-          name: StringMatch.not(
-            StringMatch.exact('rtf-data-image')
-          )
-        }
-      ]
-    });
-
-    // This will remove all styles that are not considered valid.
-    // Context: Merge copy and paste.
-    var mergeStyles = HybridAction.removal({
-      styles: [
-        { name: StringMatch.pattern(HtmlPatterns.validStyles()) }
-      ]
-    });
-
-    // This will remove all classes that have mso in them.
-    // Context: Merge copy and paste.
-    var mergeClasses = HybridAction.removal({
-      classes: [
-        { name: StringMatch.pattern(/mso/i) }
-      ]
-    });
-
-    // This will remove (unwrap) all images that have a file protocol
-    // Context: Copy and paste with images.
-    var removeLocalImages = HybridAction.unwrapper({
-      tags: [
-        { name: StringMatch.exact('img'), condition: RuleConditions.isLocal },
-        // OLE_LINK exact part.
-        { name: StringMatch.exact('a'), condition: RuleConditions.hasNoAttributes }
-      ]
-    });
-
-    // This will unwrap any <a> tags that have no attributes (i.e. are essentially useless)
-    // Context: Any
-    var removeVacantLinks = HybridAction.unwrapper({
-      tags: [
-        { name: StringMatch.exact('a'), condition: RuleConditions.hasNoAttributes }
-      ]
-    });
-
-    // This will remove any style attribute that has no content.
-    // Context: Any
-    var removeEmptyStyle = HybridAction.removal({
-      attributes: [
-        { name: StringMatch.exact('style'), value: StringMatch.exact(''), debug: true }
-      ]
-    });
-
-    // This will remove any style attribute that has no content.
-    // Context: Any
-    var removeEmptyClass = HybridAction.removal({
-      attributes: [
-        { name: StringMatch.exact('class'), value: StringMatch.exact(''), debug: true }
-      ]
-    });
-
-    // This will remove any inline elements that no longer serve a purpose:
-    // Fancy inline elements: contain no content
-    // Span inline elements: have no attributes
-    // Context: Any
-    var pruneInlineTags = HybridAction.unwrapper({
-      tags: [
-        {
-          name: StringMatch.pattern(HtmlPatterns.specialInline()),
-          condition: Fun.not(RuleConditions.hasContent)
-        }
-      ]
-    });
-
-    var addPlaceholders = HybridAction.transformer({
-      tags: [
-        { name: StringMatch.exact('p'), mutate: RuleMutations.addBrTag }
-      ]
-    });
-
-    var toUnderline = function (element) {
-      var span = RuleMutations.changeTag('span', element);
-      Class.add(span, 'ephox-limbo-transform');
-      Css.set(span, 'text-decoration', 'underline');
-    };
-
-    var nestedListFixes = HybridAction.transformer({
-      tags: [
-        { name: StringMatch.pattern(/ol|ul/), mutate: RuleMutations.properlyNest }
-      ]
-    });
-
-    var inlineTagFixes = HybridAction.transformer({
-      tags: [
-        { name: StringMatch.exact('b'), mutate: Fun.curry(RuleMutations.changeTag, 'strong') },
-        { name: StringMatch.exact('i'), mutate: Fun.curry(RuleMutations.changeTag, 'em') },
-        { name: StringMatch.exact('u'), mutate: toUnderline },
-        { name: StringMatch.exact('s'), mutate: Fun.curry(RuleMutations.changeTag, 'strike') },
-        { name: StringMatch.exact('font'), mutate: RuleMutations.fontToSpan, debug: true }
-      ]
-    });
-
-    // This will remove all classes that were put in to preserve transformations.
-    // Context: Any
-    var cleanupFlags = HybridAction.removal({
-      classes: [
-        { name: StringMatch.exact('ephox-limbo-transform') }
-      ]
-    });
-
-    // This will remove any href attributes of a tags that are local.
-    // Context: Any
-    var removeLocalLinks = HybridAction.removal({
-      attributes: [
-        { name: StringMatch.exact('href'), value: StringMatch.starts('file:///'), debug: true }
-      ]
-    });
-
-    return {
-      unwrapWordTags: unwrapWordTags,
-      removeWordAttributes: removeWordAttributes,
-      parseLists: parseLists,
-      removeExcess: removeExcess,
-      cleanStyles: cleanStyles,
-      cleanClasses: cleanClasses,
-      mergeStyles: mergeStyles,
-      mergeClasses: mergeClasses,
-      removeLocalImages: removeLocalImages,
-      removeVacantLinks: removeVacantLinks,
-      removeEmptyStyle: removeEmptyStyle,
-      removeEmptyClass: removeEmptyClass,
-      pruneInlineTags: pruneInlineTags,
-      addPlaceholders: addPlaceholders,
-      nestedListFixes: nestedListFixes,
-      inlineTagFixes: inlineTagFixes,
-      cleanupFlags: cleanupFlags,
-      removeLocalLinks: removeLocalLinks,
-      none: Fun.noop
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.limbo.process.PasteFilters',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.limbo.api.RtfImage',
-    'ephox.limbo.process.Strategies',
-    'ephox.pastiche.api.HybridAction',
-    'ephox.pastiche.engine.Filter',
-    'ephox.pastiche.engine.Token',
-    'ephox.sugar.api.Element'
-  ],
-
-  function (Arr, RtfImage, Strategies, HybridAction, Filter, Token, Element) {
-    var isIE11 = function (platform) {
-      return platform.browser.isIE() && platform.browser.version.major >= 11;
-    };
-
-    var transform = function (f) {
-      // TODO: Move this to API in pastiche or change how this works.
-      // I think the reason I want to keep it in the tokenizer is because
-      // it needs to access comments.
-      return Filter.createFilter(function (api, token) {
-        var next = f(Element.fromDom(token.getNode())).fold(function () {
-          return token;
-        }, function (sugared) {
-          var node = sugared.dom();
-          return Token.token(node, token.type() === Token.END_ELEMENT_TYPE, {});
-        });
-        api.emit(next);
-      });
-    };
-
-    var images = function (isWord, merging, platform) {
-      var searcher = platform.browser.isFirefox() ? RtfImage.local : RtfImage.vshape;
-      var transformer = isIE11(platform) ? Strategies.none : HybridAction.pipeline([ transform(searcher) ]);
-      var local = searcher === RtfImage.local ? Strategies.none : Strategies.removeLocalImages;
-      var annotate = isWord ? transformer : Strategies.none;
-
-      return {
-        annotate: [ annotate ],
-        local: [ local ]
-      };
-    };
-
-    var styling = function (isWord, merging, platform) {
-      var merge = [ Strategies.mergeStyles, Strategies.mergeClasses ];
-      var clean = [ Strategies.cleanStyles, Strategies.cleanClasses ];
-      return merging ? merge : clean;
-    };
-
-    var word = function (isWord, merging, platform) {
-      if (!isWord) return Strategies.none;
-      var base = [ Strategies.unwrapWordTags ];
-      var lists = isIE11(platform) ? [] : Strategies.parseLists;
-      return base.concat(lists);
-    };
-
-    var derive = function (isWord, merging, platform) {
-      var imageFilters = images(isWord, merging, platform);
-
-      return Arr.flatten([
-        imageFilters.annotate,
-        [ Strategies.inlineTagFixes ],
-        word(isWord, merging, platform),
-        [ Strategies.nestedListFixes ],
-        [ Strategies.removeExcess ],
-        imageFilters.local,
-        styling(isWord, merging, platform),
-        [ Strategies.removeLocalLinks, Strategies.removeVacantLinks ],
-        [ Strategies.removeEmptyStyle ],
-        [ Strategies.removeEmptyClass ],
-        [ Strategies.pruneInlineTags ],
-        [ Strategies.addPlaceholders ],
-        [ Strategies.cleanupFlags ]
-      ]);
-    };
-
-    return {
-      derive: derive
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.boss.common.TagBoundaries',
-
-  [
-
-  ],
-
-  function () {
-    // TODO: We need to consolidate this list. I think when we get rid of boss/universe, we can do it then.
-    return [
-      'body',
-      'p',
-      'div',
-      'article',
-      'aside',
-      'figcaption',
-      'figure',
-      'footer',
-      'header',
-      'nav',
-      'section',
-      'ol',
-      'ul',
-      'li',
-      'table',
-      'thead',
-      'tbody',
-      'caption',
-      'tr',
-      'td',
-      'th',
-      'h1',
-      'h2',
-      'h3',
-      'h4',
-      'h5',
-      'h6',
-      'blockquote',
-      'pre',
-      'address'
-    ];
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.Text',
-
-  [
-    'ephox.sugar.api.Node',
-    'ephox.sugar.impl.NodeValue'
-  ],
-
-  function (Node, NodeValue) {
-    var api = NodeValue(Node.isText, 'text');
-
-    var get = function (element) {
-      return api.get(element);
-    };
-
-    var getOption = function (element) {
-      return api.getOption(element);
-    };
-
-    var set = function (element, value) {
-      api.set(element, value);
-    };
-
-    return {
-      get: get,
-      getOption: getOption,
-      set: set
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.boss.api.DomUniverse',
-
-  [
-    'ephox.boss.common.TagBoundaries',
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Compare',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.InsertAll',
-    'ephox.sugar.api.Node',
-    'ephox.sugar.api.PredicateFilter',
-    'ephox.sugar.api.PredicateFind',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.SelectorFilter',
-    'ephox.sugar.api.SelectorFind',
-    'ephox.sugar.api.Text',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (TagBoundaries, Arr, Fun, Attr, Compare, Css, Element, Insert, InsertAll, Node, PredicateFilter, PredicateFind, Remove, SelectorFilter, SelectorFind, Text, Traverse) {
-    return function () {
-      var clone = function (element) {
-        return Element.fromDom(element.dom().cloneNode(false));
-      };
-
-      var isBoundary = function (element) {
-        if (!Node.isElement(element)) return false;
-        if (Node.name(element) === 'body') return true;
-        var display = Css.get(element, 'display');
-        // When the read display value is empty, we need to check the node name.
-        return display !== undefined && display.length > 0 ?
-          Arr.contains(['block', 'table-cell', 'table-row', 'table', 'list-item'], display) :
-          Arr.contains(TagBoundaries, Node.name(element));
-      };
-
-      var isEmptyTag = function (element) {
-        if (!Node.isElement(element)) return false;
-        return Arr.contains(['br', 'img', 'hr'], Node.name(element));
-      };
-
-      var comparePosition = function (element, other) {
-        return element.dom().compareDocumentPosition(other.dom());
-      };
-
-      var copyAttributesTo = function (source, destination) {
-        var as = Attr.clone(source);
-        Attr.setAll(destination, as);
-      };
-
-      return {
-        up: Fun.constant({
-          selector: SelectorFind.ancestor,
-          closest: SelectorFind.closest,
-          predicate: PredicateFind.ancestor,
-          all: Traverse.parents
-        }),
-        down: Fun.constant({
-          selector: SelectorFilter.descendants,
-          predicate: PredicateFilter.descendants
-        }),
-        styles: Fun.constant({
-          get: Css.get,
-          set: Css.set,
-          remove: Css.remove
-        }),
-        attrs: Fun.constant({
-          get: Attr.get,
-          set: Attr.set,
-          remove: Attr.remove,
-          copyTo: copyAttributesTo
-        }),
-        insert: Fun.constant({
-          before: Insert.before,
-          after: Insert.after,
-          afterAll: InsertAll.after,
-          append: Insert.append,
-          appendAll: InsertAll.append,
-          prepend: Insert.prepend,
-          wrap: Insert.wrap
-        }),
-        remove: Fun.constant({
-          unwrap: Remove.unwrap,
-          remove: Remove.remove
-        }),
-        create: Fun.constant({
-          nu: Element.fromTag,
-          clone: clone,
-          text: Element.fromText
-        }),
-        query: Fun.constant({
-          comparePosition: comparePosition,
-          prevSibling: Traverse.prevSibling,
-          nextSibling: Traverse.nextSibling
-        }),
-        property: Fun.constant({
-          children: Traverse.children,
-          name: Node.name,
-          parent: Traverse.parent,
-          isText: Node.isText,
-          isElement: Node.isElement,
-          getText: Text.get,
-          setText: Text.set,
-          isBoundary: isBoundary,
-          isEmptyTag: isEmptyTag
-        }),
-        eq: Compare.eq,
-        is: Compare.is
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.api.data.NamedPattern',
-
-  [
-    'ephox.scullion.Struct'
-  ],
-
-  function (Struct) {
-    return Struct.immutable('word', 'pattern');
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.api.data.Spot',
-
-  [
-    'ephox.scullion.Struct'
-  ],
-
-  function (Struct) {
-    var point = Struct.immutable('element', 'offset');
-    var delta = Struct.immutable('element', 'deltaOffset');
-    var range = Struct.immutable('element', 'start', 'finish');
-    var points = Struct.immutable('begin', 'end');
-    var text = Struct.immutable('element', 'text');
-
-    return {
-      point: point,
-      delta: delta,
-      range: range,
-      points: points,
-      text: text
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.extract.TypedItem',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option'
-  ],
-
-  /**
-   * Church encoded ADT representing whether an element is:
-   * - boundary (block tag or inline tag with block CSS display)
-   * - empty
-   * - text
-   */
-  function (Fun, Option) {
-    var no = Fun.constant(false);
-    var yes = Fun.constant(true);
-
-    var boundary = function (item, universe) {
-      return folder(function (b, e, t) {
-        return b(item, universe);
-      });
-    };
-
-    var empty = function (item, universe) {
-      return folder(function (b, e, t) {
-        return e(item, universe);
-      });
-    };
-
-    var text = function (item, universe) {
-      return folder(function (b, e, t) {
-        return t(item, universe);
-      });
-    };
-
-    var folder = function (fold) {
-      var isBoundary = function () {
-        return fold(yes, no, no);
-      };
-
-      var toText = function () {
-        return fold(Option.none, Option.none, function (item, universe) {
-          return Option.some(item);
-        });
-      };
-
-      var is = function (other) {
-        return fold(no, no, function (item, universe) {
-          return universe.eq(item, other);
-        });
-      };
-
-      var len = function () {
-        return fold(Fun.constant(0), Fun.constant(1), function (item, universe) {
-          return universe.property().getText(item).length;
-        });
-      };
-
-      return {
-        isBoundary: isBoundary,
-        fold: fold,
-        toText: toText,
-        is: is,
-        len: len
-      };
-    };
-
-    return {
-      text: text,
-      boundary: boundary,
-      empty: empty
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.array.Boundaries',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Arr, Fun) {
-    var boundAt = function (xs, left, right, comparator) {
-      var leftIndex = Arr.findIndex(xs, Fun.curry(comparator, left));
-      var first = leftIndex > -1 ?  leftIndex : 0;
-      var rightIndex = Arr.findIndex(xs, Fun.curry(comparator, right));
-      var last = rightIndex > -1  ? rightIndex + 1 : xs.length;
-      return xs.slice(first, last);
-    };
-
-    return {
-      boundAt: boundAt
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.array.Slice',
-
-  [
-    'ephox.compass.Arr'
-  ],
-
-  function (Arr) {
-    /**
-     * Slice an array at the first item matched by the predicate
-     */
-    var sliceby = function (list, pred) {
-      var index = Arr.findIndex(list, pred);
-      return list.slice(0, index);
-    };
-
-    return {
-      sliceby: sliceby
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.array.Split',
-
-  [
-    'ephox.compass.Arr'
-  ],
-
-  function (Arr) {
-    /**
-     * Split an array into chunks matched by the predicate
-     */
-    var splitby = function (xs, pred) {
-      var r = [];
-      var part = [];
-      Arr.each(xs, function (x) {
-        if (pred(x)) {
-          r.push(part);
-          part = [];
-        } else {
-          part.push(x);
-        }
-      });
-
-      if (part.length > 0) r.push(part);
-      return r;
-    };
-
-    return {
-      splitby: splitby
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.api.Arrays',
-
-  [
-    'ephox.polaris.array.Boundaries',
-    'ephox.polaris.array.Slice',
-    'ephox.polaris.array.Split'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (Boundaries, Slice, Split) {
-    var boundAt = function (xs, left, right, comparator) {
-      return Boundaries.boundAt(xs, left, right, comparator);
-    };
-
-    var splitby = function (array, predicate) {
-      return Split.splitby(array, predicate);
-    };
-
-    var sliceby = function (array, predicate) {
-      return Slice.sliceby(array, predicate);
-    };
-
-    return {
-      splitby: splitby,
-      sliceby: sliceby,
-      boundAt: boundAt
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.extract.TypedList',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.phoenix.api.data.Spot',
-    'ephox.polaris.api.Arrays'
-  ],
-
-  /**
-   * Extracts various information from a list of TypedItem
-   */
-  function (Arr, Fun, Option, Spot, Arrays) {
-
-    var count = function (parray) {
-      return Arr.foldr(parray, function (b, a) {
-        return a.len() + b;
-      }, 0);
-    };
-
-    var dropUntil = function (parray, target) {
-      return Arrays.sliceby(parray, function (x) {
-        return x.is(target);
-      });
-    };
-
-    /**
-     * Transform a TypedItem into a range representing that item from the start position.
-     *
-     * The generation function for making a PositionArray out of a list of TypedItems.
-     */
-    var gen = function (unit, start) {
-      return unit.fold(Option.none, function (e) {
-        return Option.some(Spot.range(e, start, start + 1));
-      }, function (t) {
-        return Option.some(Spot.range(t, start, start + unit.len()));
-      });
-    };
-
-    var justText = function (parray) {
-      return Arr.bind(parray, function (x) {
-        return x.fold(Fun.constant([]), Fun.constant([]), Fun.identity);
-      });
-    };
-
-    return {
-      count: count,
-      dropUntil: dropUntil,
-      gen: gen,
-      justText: justText
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.extract.Extract',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.phoenix.api.data.Spot',
-    'ephox.phoenix.extract.TypedItem',
-    'ephox.phoenix.extract.TypedList'
-  ],
-
-  function (Arr, Spot, TypedItem, TypedList) {
-    /**
-     * Flattens the item tree into TypedItem representations.
-     *
-     * Boundaries are returned twice, before and after their children.
-     */
-    var typed = function (universe, item, optimise) {
-      if (universe.property().isText(item)) {
-        return [ TypedItem.text(item, universe) ];
-      } else if (universe.property().isEmptyTag(item)) {
-        return [ TypedItem.empty(item, universe) ];
-      } else if (universe.property().isElement(item)) {
-        var children = universe.property().children(item);
-        var boundary = universe.property().isBoundary(item) ? [TypedItem.boundary(item, universe)] : [];
-        var rest = optimise !== undefined && optimise(item) ? [] : Arr.bind(children, function (child) {
-          return typed(universe, child, optimise);
-        });
-        return boundary.concat(rest).concat(boundary);
-      } else {
-        return [];
-      }
-    };
-
-    /**
-     * Returns just the actual elements from a call to typed().
-     */
-    var items = function (universe, item, optimise) {
-      var typedItemList = typed(universe, item, optimise);
-
-      var raw = function (item, universe) { return item; };
-
-      return Arr.map(typedItemList, function (typedItem) {
-        return typedItem.fold(raw, raw, raw);
-      });
-    };
-
-    var extractToElem = function (universe, child, offset, item, optimise) {
-      var extractions = typed(universe, item, optimise);
-      var prior = TypedList.dropUntil(extractions, child);
-      var count = TypedList.count(prior);
-      return Spot.point(item, count + offset);
-    };
-
-    /**
-     * Generates an absolute point in the child's parent
-     * that can be used to reference the offset into child later.
-     *
-     * To find the exact reference later, use Find.
-     */
-    var extract = function (universe, child, offset, optimise) {
-      return universe.property().parent(child).fold(function () {
-        return Spot.point(child, offset);
-      }, function (parent) {
-        return extractToElem(universe, child, offset, parent, optimise);
-      });
-    };
-
-    /**
-     * Generates an absolute point that can be used to reference the offset into child later.
-     * This absolute point will be relative to a parent node (specified by predicate).
-     *
-     * To find the exact reference later, use Find.
-     */
-    var extractTo = function (universe, child, offset, pred, optimise) {
-      return universe.up().predicate(child, pred).fold(function () {
-        return Spot.point(child, offset);
-      }, function (v) {
-        return extractToElem(universe, child, offset, v, optimise);
-      });
-    };
-
-    return {
-      typed: typed,
-      items: items,
-      extractTo: extractTo,
-      extract: extract
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.extract.ExtractText',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.phoenix.extract.Extract'
-  ],
-
-  function (Arr, Fun, Extract) {
-    var newline = '\n';
-    var space = ' ';
-
-    var onEmpty = function (item, universe) {
-      return universe.property().name(item) === 'img' ? space : newline;
-    };
-
-    var from = function (universe, item, optimise) {
-      var typed = Extract.typed(universe, item, optimise);
-      return Arr.map(typed, function (t) {
-        return t.fold(Fun.constant(newline), onEmpty, universe.property().getText);
-      }).join('');
-    };
-
-    return {
-      from: from
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.parray.Generator',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Arr, Fun) {
-
-    /**
-     * Generate a PositionArray
-     *
-     * xs:     list of thing
-     * f:      thing -> Optional unit
-     * _start: sets the start position to search at
-     */
-    var make = function (xs, f, _start) {
-
-      var init = {
-        len: _start !== undefined ? _start : 0,
-        list: []
-      };
-
-      var r = Arr.foldl(xs, function (b, a) {
-        var value = f(a, b.len);
-        return value.fold(Fun.constant(b), function (v) {
-          return {
-            len: v.finish(),
-            list: b.list.concat([v])
-          };
-        });
-      }, init);
-
-      return r.list;
-    };
-
-    return {
-      make: make
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.parray.Query',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Arr, Option) {
-
-    /**
-     * Simple "is position within unit" utility function
-     */
-    var inUnit = function (unit, position) {
-      return position >= unit.start() && position <= unit.finish();
-    };
-
-    /**
-     * Finds the unit in the PositionArray that contains this offset (if there is one)
-     */
-    var get = function (parray, offset) {
-      var unit = Arr.find(parray, function (x) {
-        return inUnit(x, offset);
-      });
-
-      return Option.from(unit);
-    };
-
-    var startindex = function (parray, offset) {
-      return Arr.findIndex(parray, function (unit) {
-        return unit.start() === offset;
-      });
-    };
-
-    var tryend = function (parray, finish) {
-      var finishes = parray[parray.length - 1] && parray[parray.length - 1].finish() === finish;
-      return finishes ? parray.length + 1 : -1;
-    };
-
-
-    /**
-     * Extracts the pieces of the PositionArray that are bounded *exactly* on the start and finish offsets
-     */
-    var sublist = function (parray, start, finish) {
-      var first = startindex(parray, start);
-      var rawlast = startindex(parray, finish);
-      var last = rawlast > -1 ? rawlast : tryend(parray, finish);
-
-      return first > -1 && last > -1 ? parray.slice(first, last) : [];
-    };
-
-    var find = function (parray, pred) {
-      return Option.from(Arr.find(parray, pred));
-    };
-
-    return {
-      get: get,
-      find: find,
-      inUnit: inUnit,
-      sublist: sublist
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.parray.Translate',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.highway.Merger',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Arr, Merger, Fun) {
-    /** Adjust a PositionArray positions by an offset */
-    var translate = function (parray, offset) {
-      return Arr.map(parray, function (unit) {
-        return Merger.merge(unit, {
-          start: Fun.constant(unit.start() + offset),
-          finish: Fun.constant(unit.finish() + offset)
-        });
-      });
-    };
-
-    return {
-      translate: translate
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.parray.Split',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.polaris.parray.Query',
-    'ephox.polaris.parray.Translate'
-  ],
-
-  function (Arr, Query, Translate) {
-    /**
-     * After subdivide has split the unit, update the resulting PositionArray based on the unit start position.
-     */
-    var divide = function (unit, positions, subdivide) {
-      var mini = subdivide(unit, positions);
-      return Translate.translate(mini, unit.start());
-    };
-
-    /**
-     * Adds extra split points into a PositionArray, using subdivide to split if necessary
-     */
-    var splits = function (parray, positions, subdivide) {
-      if (positions.length === 0) return parray;
-
-      return Arr.bind(parray, function (unit) {
-        var relevant = Arr.bind(positions, function (pos) {
-          return Query.inUnit(unit, pos) ? [ pos - unit.start() ] : [];
-        });
-
-        return relevant.length > 0 ? divide(unit, relevant, subdivide) : [ unit ];
-      });
-    };
-
-    return {
-      splits: splits
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.api.PositionArray',
-
-  [
-    'ephox.polaris.parray.Generator',
-    'ephox.polaris.parray.Query',
-    'ephox.polaris.parray.Split',
-    'ephox.polaris.parray.Translate'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (Generator, Query, Split, Translate) {
-    var generate = function (items, generator, _start) {
-      return Generator.make(items, generator, _start);
-    };
-
-    var get = function (parray, offset) {
-      return Query.get(parray, offset);
-    };
-
-    var find = function (parray, pred) {
-      return Query.find(parray, pred);
-    };
-
-    var splits = function (parray, positions, subdivide) {
-      return Split.splits(parray, positions, subdivide);
-    };
-
-    var translate = function (parray, amount) {
-      return Translate.translate(parray, amount);
-    };
-
-    var sublist = function (parray, start, finish) {
-      return Query.sublist(parray, start, finish);
-    };
-
-    return {
-      generate: generate,
-      get: get,
-      find: find,
-      splits: splits,
-      translate: translate,
-      sublist: sublist
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.extract.Find',
-
-  [
-    'ephox.phoenix.api.data.Spot',
-    'ephox.phoenix.extract.Extract',
-    'ephox.phoenix.extract.TypedList',
-    'ephox.polaris.api.PositionArray'
-  ],
-
-  function (Spot, Extract, TypedList, PositionArray) {
-
-    /**
-     * Finds an exact reference to a document point generated by Extract
-     */
-    var find = function (universe, parent, offset, optimise) {
-      var extractions = Extract.typed(universe, parent, optimise);
-
-      var parray = PositionArray.generate(extractions, TypedList.gen);
-      var spot = PositionArray.get(parray, offset);
-      return spot.map(function (v) {
-        return Spot.point(v.element(), offset - v.start());
-      });
-    };
-
-    return {
-      find: find
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.api.general.Extract',
-
-  [
-    'ephox.phoenix.extract.Extract',
-    'ephox.phoenix.extract.ExtractText',
-    'ephox.phoenix.extract.Find'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (Extract, ExtractText, Find) {
-
-    var from = function (universe, item, optimise) {
-      return Extract.typed(universe, item, optimise);
-    };
-
-    var all = function (universe, item, optimise) {
-      return Extract.items(universe, item, optimise);
-    };
-
-    var extract = function (universe, child, offset, optimise) {
-      return Extract.extract(universe, child, offset, optimise);
-    };
-
-    var extractTo = function (universe, child, offset, pred, optimise) {
-      return Extract.extractTo(universe, child, offset, pred, optimise);
-    };
-
-    var find = function (universe, parent, offset, optimise) {
-      return Find.find(universe, parent, offset, optimise);
-    };
-
-    var toText = function (universe, item, optimise) {
-      return ExtractText.from(universe, item, optimise);
-    };
-
-    return {
-      extract: extract,
-      extractTo: extractTo,
-      all: all,
-      from: from,
-      find: find,
-      toText: toText
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.family.Group',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.phoenix.api.general.Extract',
-    'ephox.polaris.api.Arrays'
-  ],
-
-  function (Arr, Extract, Arrays) {
-    /**
-     * Return an array of arrays split by boundaries
-     */
-    var group = function (universe, items, optimise) {
-      var extractions = Arr.bind(items, function (item) {
-        return Extract.from(universe, item, optimise);
-      });
-
-      var segments = Arrays.splitby(extractions, function (item) {
-        return item.isBoundary();
-      });
-
-      return Arr.filter(segments, function (x) { return x.length > 0; });
-    };
-
-    return {
-      group: group
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.family.Parents',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.perhaps.Option'
-  ],
-
-  function (Arr, Option) {
-    /**
-     * Search the parents of both items for a common element
-     */
-    var common = function (universe, item1, item2) {
-      var item1parents = [item1].concat(universe.up().all(item1));
-      var item2parents = [item2].concat(universe.up().all(item2));
-
-      var r = Arr.find(item1parents, function (x) {
-        return Arr.exists(item2parents, function (y) {
-          return universe.eq(y, x);
-        });
-      });
-
-      return Option.from(r);
-    };
-
-    return {
-      common: common
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.wrap.OrphanText',
-
-  [
-    'ephox.compass.Arr'
-  ],
-
-  function (Arr) {
-    // Textnodes cannot be children of these tags
-    var textBlacklist = [ 'table', 'tbody', 'thead', 'tfoot', 'tr', 'ul', 'ol' ];
-
-    return function (universe) {
-      var domUtils = universe.property();
-      var validateParent = function (node, blacklist) {
-        return domUtils.parent(node).map(domUtils.name).map(function (name) {
-          return !Arr.contains(blacklist, name);
-        }).getOr(false);
-      };
-
-      var validateText = function (textNode) {
-        return domUtils.isText(textNode) && validateParent(textNode, textBlacklist);
-      };
-
-      return {
-        validateText: validateText
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.family.Range',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.phoenix.api.general.Extract',
-    'ephox.phoenix.family.Parents',
-    'ephox.phoenix.wrap.OrphanText'
-  ],
-
-  function (Arr, Fun, Extract, Parents, OrphanText) {
-    var index = function (universe, items, item) {
-      return Arr.findIndex(items, Fun.curry(universe.eq, item));
-    };
-
-    var order = function (items, a, delta1, b, delta2) {
-      return a < b ? items.slice(a + delta1, b + delta2) : items.slice(b + delta2, a + delta1);
-    };
-
-    /**
-     * Returns a flat array of text nodes between two defined nodes.
-     *
-     * Deltas are a broken concept. They control whether the item passed is included in the result.
-     */
-    var range = function (universe, item1, delta1, item2, delta2) {
-      if (universe.eq(item1, item2)) return [item1];
-
-      return Parents.common(universe, item1, item2).fold(function () {
-        return []; // no common parent, therefore no intervening path. How does this clash with Path in robin?
-      }, function (parent) {
-        var items = [ parent ].concat(Extract.all(universe, parent, Fun.constant(false)));
-        var start = index(universe, items, item1);
-        var finish = index(universe, items, item2);
-        var result = start > -1 && finish > -1 ? order(items, start, delta1, finish, delta2) : [];
-        var orphanText = OrphanText(universe);
-        return Arr.filter(result, orphanText.validateText);
-      });
-    };
-
-    return {
-      range: range
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.api.general.Family',
-
-  [
-    'ephox.phoenix.family.Group',
-    'ephox.phoenix.family.Range'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (Group, Range) {
-    var range = function (universe, start, startDelta, finish, finishDelta) {
-      return Range.range(universe, start, startDelta, finish, finishDelta);
-    };
-
-    var group = function (universe, items, optimise) {
-      return Group.group(universe, items, optimise);
-    };
-
-    return {
-      range: range,
-      group: group
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.string.Sanitise',
-
-  [
-
-  ],
-
-  function () {
-    /**
-     * Sanitises a string for use in a CSS class name
-     */
-    var css = function (str) {
-      // special case; the first character must a letter. More strict than CSS, but easier to implement.
-      var r = /^[a-zA-Z]/.test(str) ? '' : 'e';
-
-      // any non-word character becomes a hyphen
-      var sanitised = str.replace(/[^\w]/gi, '-');
-
-      return r + sanitised;
-    };
-
-    return {
-      css: css
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.string.Split',
-
-  [
-    'ephox.compass.Arr'
-  ],
-
-  function (Arr) {
-    /**
-     * Splits a string into multiple chunks
-     */
-    var splits = function (value, indices) {
-      if (indices.length === 0) return [value];
-
-      var divisions = Arr.foldl(indices, function (acc, x) {
-        if (x === 0) return acc;
-
-        var part = value.substring(acc.prev, x);
-        return {
-          prev: x,
-          values: acc.values.concat([part])
-        };
-      }, { prev: 0, values: [] });
-
-      var lastPoint = indices[indices.length - 1];
-      return lastPoint < value.length ? divisions.values.concat(value.substring(lastPoint)) : divisions.values;
-    };
-
-    return {
-      splits: splits
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.api.Strings',
-
-  [
-    'ephox.polaris.string.Sanitise',
-    'ephox.polaris.string.Split'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (Sanitise, Split) {
-    var splits = function (text, points) {
-      return Split.splits(text, points);
-    };
-
-    var cssSanitise = function (str) {
-      return Sanitise.css(str);
-    };
-
-    return {
-      cssSanitise: cssSanitise,
-      splits: splits
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.search.Splitter',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.perhaps.Option',
-    'ephox.phoenix.api.data.Spot',
-    'ephox.polaris.api.PositionArray',
-    'ephox.polaris.api.Strings'
-  ],
-
-  function (Arr, Option, Spot, PositionArray, Strings) {
-
-    /**
-     * Re-generates an item's text nodes, split as defined by the positions array.
-     *
-     * Returns a PositionArray of the result.
-     */
-    var subdivide = function (universe, item, positions) {
-      var text = universe.property().getText(item);
-      var pieces = Arr.filter(Strings.splits(text, positions), function (section) {
-        return section.length > 0;
-      });
-
-      if (pieces.length <= 1) return [ Spot.range(item, 0, text.length) ];
-      universe.property().setText(item, pieces[0]);
-
-      var others = PositionArray.generate(pieces.slice(1), function (a, start) {
-        var nu = universe.create().text(a);
-        var result = Spot.range(nu, start, start + a.length);
-        return Option.some(result);
-      }, pieces[0].length);
-
-      var otherElements = Arr.map(others, function (a) { return a.element(); });
-      universe.insert().afterAll(item, otherElements);
-
-      return [ Spot.range(item, 0, pieces[0].length) ].concat(others);
-    };
-
-    return {
-      subdivide: subdivide
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.search.MatchSplitter',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.phoenix.search.Splitter',
-    'ephox.polaris.api.PositionArray'
-  ],
-
-  function (Arr, Fun, Splitter, PositionArray) {
-    /**
-     * Split each text node in the list using the match endpoints.
-     *
-     * Each match is then mapped to the word it matched and the elements that make up the word.
-     */
-    var separate = function (universe, list, matches) {
-      var allPositions = Arr.bind(matches, function (match) {
-        return [ match.start(), match.finish() ];
-      });
-
-      var subdivide = function (unit, positions) {
-        return Splitter.subdivide(universe, unit.element(), positions);
-      };
-
-      var structure = PositionArray.splits(list, allPositions, subdivide);
-
-      var collate = function (match) {
-        var sub = PositionArray.sublist(structure, match.start(), match.finish());
-
-        var elements = Arr.map(sub, function (unit) { return unit.element(); });
-
-        var exact = Arr.map(elements, universe.property().getText).join('');
-        return {
-          elements: Fun.constant(elements),
-          word: match.word,
-          exact: Fun.constant(exact)
-        };
-      };
-
-      return Arr.map(matches, collate);
-    };
-
-    return {
-      separate: separate
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.bud.Unicode',
-
-  [
-  ],
-
-  function () {
-    // \u200B needs to be removed manually as it is not considered whitespace when trimming
-    // \uFEFF does not need to be removed manually. It is considered whitespace when trimming
-    var zeroWidth = function () {
-      return '\u200B';
-    };
-
-    // Note, we are separating these out so that we are accounting for the subtle differences
-    // between them. Eventually, we'll want to combine them again.
-    var trimNative = function (str) {
-      return str.replace(/\u200B/, '').trim();
-    };
-
-    var trimWithRegex = function (str) {
-      return str.replace(/^\s+|\s+$/g, '').replace(/\u200B/, '');
-    };
-
-    return {
-      zeroWidth: zeroWidth,
-      trimNative: trimNative,
-      trimWithRegex: trimWithRegex
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.pattern.Chars',
-
-  [
-    'ephox.bud.Unicode',
-    'ephox.peanut.Fun'
-  ],
-
-  function (Unicode, Fun) {
-    // \w is a word character
-    // \' is an apostrophe
-    // '-' is a hyphen
-    // \u00C0 - \u00FF are various language characters
-    // \u2018 and \u2019 are the smart quote characters
-    var chars = '\\w' + '\'' + '\\-' + '\\u00C0-\\u00FF' + Unicode.zeroWidth() + '\\u2018\\u2019';
-    var wordbreak = '[^' + chars + ']';
-    var wordchar = '[' + chars + ']';
-
-    return {
-      chars: Fun.constant(chars),
-      wordbreak: Fun.constant(wordbreak),
-      wordchar: Fun.constant(wordchar)
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.pattern.Custom',
-
-  [
-    'global!RegExp'
-  ],
-
-  function (RegExp) {
-    return function (regex, prefix, suffix, flags) {
-      var term = function () {
-        return new RegExp(regex, flags.getOr('g'));
-      };
-
-      return {
-        term: term,
-        prefix: prefix,
-        suffix: suffix
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.pattern.Unsafe',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.polaris.pattern.Chars',
-    'ephox.polaris.pattern.Custom'
-  ],
-
-  function (Fun, Option, Chars, Custom) {
-
-    /**
-     * Tokens have no prefix or suffix
-     */
-    var token = function (input) {
-      return Custom(input, Fun.constant(0), Fun.constant(0), Option.none());
-    };
-
-    /**
-     * Words have complex rules as to what a "word break" actually is.
-     *
-     * These are consumed by the regex and then excluded by prefix/suffix lengths.
-     */
-    var word = function (input) {
-      var regex = '((?:^\'?)|(?:' + Chars.wordbreak() + '+\'?))' + input + '((?:\'?$)|(?:\'?' + Chars.wordbreak() + '+))';
-
-      // ASSUMPTION: There are no groups in their input
-      var prefix = function (match) {
-        return match.length > 1 ? match[1].length : 0;
-      };
-
-      var suffix = function (match) {
-        return match.length > 2 ? match[2].length : 0;
-      };
-
-      return Custom(regex, prefix, suffix, Option.none());
-    };
-
-    return {
-      token: token,
-      word: word
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.pattern.Safe',
-
-  [
-    'ephox.polaris.pattern.Unsafe'
-  ],
-
-  /** Sanitises all inputs to Unsafe */
-  function (Unsafe) {
-    /** Escapes regex characters in a string */
-    var sanitise = function (input) {
-      return input.replace(/[-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&');
-    };
-
-    var word = function (input) {
-      var value = sanitise(input);
-      return Unsafe.word(value);
-    };
-
-    var token = function (input) {
-      var value = sanitise(input);
-      return Unsafe.token(value);
-    };
-
-    return {
-      sanitise: sanitise,
-      word: word,
-      token: token
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.api.Pattern',
-
-  [
-    'ephox.polaris.pattern.Chars',
-    'ephox.polaris.pattern.Custom',
-    'ephox.polaris.pattern.Safe',
-    'ephox.polaris.pattern.Unsafe'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (Chars, Custom, Safe, Unsafe) {
-    var safeword = function (input) {
-      return Safe.word(input);
-    };
-
-    var safetoken = function (input) {
-      return Safe.token(input);
-    };
-
-    var custom = function (input, prefix, suffix, flags) {
-      return Custom(input, prefix, suffix, flags);
-    };
-
-    var unsafeword = function (input) {
-      return Unsafe.word(input);
-    };
-
-    var unsafetoken = function (input) {
-      return Unsafe.token(input);
-    };
-
-    var sanitise = function (input) {
-      return Safe.sanitise(input);
-    };
-
-    var chars = function () {
-      return Chars.chars();
-    };
-
-    var wordbreak = function () {
-      return Chars.wordbreak();
-    };
-
-    var wordchar = function () {
-      return Chars.wordchar();
-    };
-
-    return {
-      safeword: safeword,
-      safetoken: safetoken,
-      custom: custom,
-      unsafeword: unsafeword,
-      unsafetoken: unsafetoken,
-      sanitise: sanitise,
-      chars: chars,
-      wordbreak: wordbreak,
-      wordchar: wordchar
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.search.Find',
-
-  [
-    'ephox.peanut.Fun'
-  ],
-
-  function (Fun) {
-
-    /**
-     * Returns the offset pairs of all matches of pattern on the input string, adjusting for prefix and suffix offsets
-     */
-    var all = function (input, pattern) {
-      var term = pattern.term();
-      var r = [];
-      var match = term.exec(input);
-      while (match) {
-        var start = match.index + pattern.prefix(match);
-        var length = match[0].length - pattern.prefix(match) - pattern.suffix(match);
-        r.push({
-          start: Fun.constant(start),
-          finish: Fun.constant(start + length)
-        });
-        term.lastIndex = start + length;
-        match = term.exec(input);
-      }
-      return r;
-    };
-
-    return {
-      all: all
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.search.Sleuth',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.highway.Merger',
-    'ephox.polaris.search.Find',
-    'global!Array'
-  ],
-
-  function (Arr, Merger, Find, Array) {
-    var sort = function (array) {
-      var r = Array.prototype.slice.call(array, 0);
-      r.sort(function (a, b) {
-        if (a.start() < b.start()) return -1;
-        else if (b.start() < a.start()) return 1;
-        else return 0;
-      });
-      return r;
-    };
-
-    /**
-     * For each target (pattern, ....), find the matching text (if there is any) and record the start and end offsets.
-     *
-     * Then sort the result by start point.
-     */
-    var search = function (text, targets) {
-      var unsorted = Arr.bind(targets, function (t) {
-        var results = Find.all(text, t.pattern());
-        return Arr.map(results, function (r) {
-          return Merger.merge(t, {
-            start: r.start,
-            finish: r.finish
-          });
-        });
-      });
-
-      return sort(unsorted);
-    };
-
-    return {
-      search: search
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.polaris.api.Search',
-
-  [
-    'ephox.polaris.search.Find',
-    'ephox.polaris.search.Sleuth'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (Find, Sleuth) {
-    var findall = function (input, pattern) {
-      return Find.all(input, pattern);
-    };
-
-    var findmany = function (input, targets) {
-      return Sleuth.search(input, targets);
-    };
-
-    return {
-      findall: findall,
-      findmany: findmany
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.search.Searcher',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.perhaps.Option',
-    'ephox.phoenix.api.data.NamedPattern',
-    'ephox.phoenix.api.data.Spot',
-    'ephox.phoenix.api.general.Family',
-    'ephox.phoenix.extract.TypedList',
-    'ephox.phoenix.search.MatchSplitter',
-    'ephox.polaris.api.Pattern',
-    'ephox.polaris.api.PositionArray',
-    'ephox.polaris.api.Search'
-  ],
-
-  function (Arr, Option, NamedPattern, Spot, Family, TypedList, MatchSplitter, Pattern, PositionArray, Search) {
-    var gen = function (universe, input) {
-      return PositionArray.generate(input, function (unit, offset) {
-        var finish = offset + universe.property().getText(unit).length;
-        return Option.from(Spot.range(unit, offset, finish));
-      });
-    };
-
-    /**
-     * Extracts groups of elements separated by boundaries.
-     *
-     * For each group, search the text for pattern matches.
-     *
-     * Returns a list of matches.
-     */
-    var run = function (universe, elements, patterns, optimise) {
-      var sections = Family.group(universe, elements, optimise);
-      var result = Arr.bind(sections, function (x) {
-        var input = TypedList.justText(x);
-        var text = Arr.map(input, universe.property().getText).join('');
-
-        var matches = Search.findmany(text, patterns);
-        var plist = gen(universe, input);
-
-        return MatchSplitter.separate(universe, plist, matches);
-      });
-
-      return result;
-    };
-
-
-    /**
-     * Runs a search for one or more words
-     */
-    var safeWords = function (universe, elements, words, optimise) {
-      var patterns = Arr.map(words, function (word) {
-        var pattern = Pattern.safeword(word);
-        return NamedPattern(word, pattern);
-      });
-      return run(universe, elements, patterns, optimise);
-    };
-
-
-    /**
-     * Runs a search for a single token
-     */
-    var safeToken = function (universe, elements, token, optimise) {
-      var pattern = NamedPattern(token, Pattern.safetoken(token));
-      return run(universe, elements, [pattern], optimise);
-    };
-
-    return {
-      safeWords: safeWords,
-      safeToken: safeToken,
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.api.general.Search',
-
-  [
-    'ephox.phoenix.search.Searcher'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (Searcher) {
-    var run = function (universe, items, patterns, optimise) {
-      return Searcher.run(universe, items, patterns, optimise);
-    };
-
-    var safeWords = function (universe, items, words, optimise) {
-      return Searcher.safeWords(universe, items, words, optimise);
-    };
-
-    var safeToken = function (universe, items, token, optimise) {
-      return Searcher.safeToken(universe, items, token, optimise);
-    };
-
-    return {
-      safeWords: safeWords,
-      safeToken: safeToken,
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.phoenix.api.dom.DomSearch',
-
-  [
-    'ephox.boss.api.DomUniverse',
-    'ephox.phoenix.api.general.Search'
-  ],
-
-  /**
-   * Documentation is in the actual implementations.
-   */
-  function (DomUniverse, Search) {
-    var universe = DomUniverse();
-
-    var run = function (elements, patterns, optimise) {
-      return Search.run(universe, elements, patterns, optimise);
-    };
-
-    var safeWords = function (elements, words, optimise) {
-      return Search.safeWords(universe, elements, words, optimise);
-    };
-
-    var safeToken = function (elements, token, optimise) {
-      return Search.safeToken(universe, elements, token, optimise);
-    };
-
-    return {
-      safeWords: safeWords,
-      safeToken: safeToken,
-      run: run
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sugar.api.SelectorExists',
-
-  [
-    'ephox.sugar.api.SelectorFind'
-  ],
-
-  function (SelectorFind) {
-    var any = function (selector) {
-      return SelectorFind.first(selector).isSome();
-    };
-
-    var ancestor = function (scope, selector, isRoot) {
-      return SelectorFind.ancestor(scope, selector, isRoot).isSome();
-    };
-
-    var sibling = function (scope, selector) {
-      return SelectorFind.sibling(scope, selector).isSome();
-    };
-
-    var child = function (scope, selector) {
-      return SelectorFind.child(scope, selector).isSome();
-    };
-
-    var descendant = function (scope, selector) {
-      return SelectorFind.descendant(scope, selector).isSome();
-    };
-
-    var closest = function (scope, selector, isRoot) {
-      return SelectorFind.closest(scope, selector, isRoot).isSome();
-    };
-
-    return {
-      any: any,
-      ancestor: ancestor,
-      sibling: sibling,
-      child: child,
-      descendant: descendant,
-      closest: closest
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.limbo.process.Preprocessor',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.perhaps.Option',
-    'ephox.phoenix.api.dom.DomSearch',
-    'ephox.polaris.api.Pattern',
-    'ephox.scullion.Struct',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Html',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.InsertAll',
-    'ephox.sugar.api.Node',
-    'ephox.sugar.api.SelectorExists'
-  ],
-
-  function (Arr, Option, DomSearch, Pattern, Struct, Attr, Css, Element, Html, Insert, InsertAll, Node, SelectorExists) {
-    //the big fat holy grail of URL pattern matching..
-    var regex = '((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[\\-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9\\.\\-]+|(?:www\\.|[\\-;:&=\\+\\$,\\w]+@)[A-Za-z0-9\\.\\-]+)(:[0-9]+)?((?:\\/[\\+~%\\/\\.\\w\\-_]*)?\\??(?:[\\-\\+=&;%@\\.\\w_]*)#?(?:[\\.\\!\\/\\\\\\w]*))?)';
-
-    var findLinks = function (elements) {
-      var data = Struct.immutable('word', 'pattern');
-      var term = Pattern.unsafetoken(regex);
-      var pattern = data('__INTERNAL__', term);
-      return DomSearch.run(elements, [pattern]);
-    };
-
-    var notInLink = function (element) {
-      // return true;
-      return !SelectorExists.closest(element, 'a');
-    };
-
-    var wrap = function (elements) {
-      return Option.from(elements[0]).filter(notInLink).map(function (first) {
-        var tag = Element.fromTag('a');
-        Insert.before(first, tag);
-        InsertAll.append(tag, elements);
-        Attr.set(tag, 'href', Html.get(tag));
-        return tag;
-      });
-    };
-
-    var links = function (elements) {
-      var matches = findLinks(elements);
-      Arr.each(matches, function (match) {
-        // TBIO-2444 Do not wrap anything with @ symbol, it could be an email
-        if(match.exact().indexOf('@') < 0) wrap(match.elements());
-      });
-    };
-
-    var position = function (elements) {
-      Arr.each(elements, function (elem) {
-        if (Node.isElement(elem)) Css.remove(elem, 'position');
-      });
-    };
-
-    return {
-      links: links,
-      position: position
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.limbo.api.RunPaste',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.limbo.process.PasteFilters',
-    'ephox.limbo.process.Preprocessor',
-    'ephox.pastiche.api.HybridAction',
-    'ephox.sugar.api.Html',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Arr, PasteFilters, Preprocessor, HybridAction, Html, Traverse) {
-    var preprocess = function (platform, container) {
-      var children = Traverse.children(container);
-      Arr.each([ Preprocessor.links, Preprocessor.position ], function (f) {
-        f(children);
-      });
-    };
-
-    var go = function (doc, platform, container, merging, isWord) {
-      preprocess(platform, container);
-      var html = Html.get(container);
-      var filters = PasteFilters.derive(isWord, merging, platform);
-      return HybridAction.go(doc, html, filters);
-    };
-
-    return {
-      go: go
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.limbo.api.Sources',
-
-  [
-    'ephox.pastiche.api.HybridAction',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Html',
-    'ephox.sugar.api.PredicateExists'
-  ],
-
-  function (HybridAction, Attr, Html, PredicateExists) {
-    var ie11 = function (container) {
-      // This looks expensive. Using grep on corpus,
-      // string searching for "<font" or "mso-list:" picked up all relevant cases
-      return PredicateExists.descendant(container, function (el) {
-        return Attr.has(el, 'style') ? Attr.get(el, 'style').indexOf('mso-') > -1 : false;
-      });
-    };
-
-    var other = function (container) {
-      var html = Html.get(container);
-      return HybridAction.isWordContent(html);
-    };
-
-    var isWord = function (platform, container) {
-      var browser = platform.browser;
-      var detector = browser.isIE() && browser.version.major >= 11 ? ie11 : other;
-      return detector(container);
-    };
-
-    return {
-      isWord: isWord
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sloth.data.Range',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.sugar.api.Compare'
-  ],
-
-  function (Fun, Compare) {
-    return function (startContainer, startOffset, endContainer, endOffset) {
-      var collapsed = Compare.eq(startContainer, endContainer) && startOffset === endOffset;
-
-      return {
-        startContainer: Fun.constant(startContainer),
-        startOffset: Fun.constant(startOffset),
-        endContainer: Fun.constant(endContainer),
-        endOffset: Fun.constant(endOffset),
-        collapsed: Fun.constant(collapsed)
-      };
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sloth.api.BodySwitch',
-
-  [
-    'ephox.sloth.data.Range',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Range, Element, Insert, Remove, Traverse) {
-    return function (selection) {
-
-      var placeholder = Element.fromTag('br');
-
-      var toOn = function (element, offscreen) {
-        element.dom().focus();
-      };
-
-      var getWin = function (offscreen) {
-        var doc = Traverse.owner(offscreen);
-        return doc.dom().defaultView;
-      };
-
-      var toOff = function (element, offscreen) {
-        var win = getWin(offscreen);
-        win.focus();
-        Insert.append(offscreen, placeholder);
-        selection.set(win, Range(placeholder, 0, placeholder, 0));
-      };
-
-      var cleanup = function () {
-        Remove.remove(placeholder);
-      };
-
-      return {
-        cleanup: cleanup,
-        toOn: toOn,
-        toOff: toOff
-      };
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sloth.api.DivSwitch',
-
-  [
-    'ephox.peanut.Fun'
-  ],
-
-  function (Fun) {
-    return function () {
-      var toOn = function (element, offscreen) {
-        element.dom().focus();
-      };
-
-      var toOff = function (element, offscreen) {
-        offscreen.dom().focus();
-      };
-
-      var cleanup = Fun.identity;
-
-      return {
-        toOn: toOn,
-        toOff: toOff,
-        cleanup: cleanup
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.plumber.tap.control.BlockControl',
-
-  [
-  ],
-
-  function () {
-    var create = function () {
-      var blocked = false;
-      var isBlocked = function () { return blocked; };
-      var block = function () { blocked = true; };
-      var unblock = function () { blocked = false; };
-
-      return {
-        isBlocked: isBlocked,
-        block: block,
-        unblock: unblock
-      }
-    };
-
-    return {
-      create: create
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.plumber.tap.wrap.Tapped',
-
-  [
-  ],
-
-  function () {
-    var create = function (control, instance) {
-      return {
-        control: control,
-        instance: instance
-      }
-    };
-
-    return {
-      create: create
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.plumber.tap.function.BlockTap',
-
-  [
-    'ephox.plumber.tap.control.BlockControl',
-    'ephox.plumber.tap.wrap.Tapped'
-  ],
-
-  function (BlockControl, Tapped) {
-    var tap = function (fn) {
-      var control = BlockControl.create();
-
-      var instance = function () {
-        if (!control.isBlocked())
-          fn.apply(null, arguments);
-      };
-
-      return Tapped.create(control, instance);
-    };
-
-    return {
-      tap: tap
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sloth.api.Paste',
-
-  [
-    'ephox.fred.PlatformDetection',
-    'ephox.peanut.Fun',
-    'global!setTimeout'
-  ],
-
-  function (PlatformDetection, Fun, setTimeout) {
-    var detection = PlatformDetection.detect();
-
-    var ie10 = function (doc, tap, postpaste) {
-      // Block the tap, and fire a paste.
-      tap.control.block();
-      doc.dom().execCommand('paste');
-      postpaste();
-      tap.control.unblock();
-    };
-
-    var others = function (doc, tap, postpaste) {
-      setTimeout(postpaste, 1);
-    };
-
-    // Most browsers can just let the paste event continue.
-    // on IE10, the paste event must be cancelled and done manually
-    var willBlock = detection.browser.isIE() && detection.browser.version.major <= 10;
-
-    var runner = willBlock ? ie10 : others;
-
-    var run = function (doc, tap, postpaste) {
-      return runner(doc, tap, postpaste);
-    };
-
-    return {
-      willBlock: Fun.constant(willBlock),
-      run: run
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sloth.engine.Consolidator',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.InsertAll',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Arr, Element, Insert, InsertAll, Remove, Traverse) {
-    // TBIO-2440. In some situations on Windows 7 Chrome, pasting into the offscreen div
-    // actually splits the div in two. The purpose of this function is to incorporate
-    // any of the split divs into the main one.
-    var consolidate = function (offscreen, isOffscreen) {
-      Traverse.nextSibling(offscreen).filter(isOffscreen).each(function (other) {
-        var children = Traverse.children(other);
-        InsertAll.append(offscreen, children);
-        Remove.remove(other);
-      });
-      oneChild(offscreen, isOffscreen);
-    };
-    // TBIO-3010: In Chrome (reproducible in both Windows and Mac) when pasting from notepad the offscreen div
-    // generates multiple sloth divs, causing the content to be not pasted correctly. This function
-    // runs across the children of the offscreen div and if it is a sloth element then it extract
-    // the content and wraps it in a normal div.
-    var cleanChild = function (child, offscreen) {
-      var children = Traverse.children(child);
-      var wrapper = Element.fromTag('div', Traverse.owner(child).dom());
-      InsertAll.append(wrapper, children);
-      Insert.before(child, wrapper);
-      Remove.remove(child);
-    };
-
-    var oneChild = function (offscreen, isOffscreen) {
-      var children = Traverse.children(offscreen);
-      Arr.each(children, function (child) {
-        if (isOffscreen(child)) cleanChild(child, offscreen);
-      });
-    };
-
-    return {
-      consolidate: consolidate
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sloth.engine.Offscreen',
-
-  [
-    'ephox.epithet.Id',
-    'ephox.scullion.Struct',
-    'ephox.sloth.engine.Consolidator',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Css',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Html',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.SelectorFind',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Id, Struct, Consolidator, Attr, Class, Css, Element, Html, Insert, Remove, SelectorFind, Traverse) {
-    var hash = Id.generate('ephox-sloth-bin');
-
-    return function (switcher) {
-      var offscreen = Element.fromTag('div');
-      Attr.set(offscreen, 'contenteditable', 'true');
-      Class.add(offscreen, hash);
-      Css.setAll(offscreen, {
-        position: 'absolute',
-        left: '0px',
-        top: '0px',
-        width: '0px',
-        height: '0px',
-        overflow: 'hidden'
-      });
-
-      var attach = function (target) {
-        Remove.empty(offscreen);
-        Insert.append(target, offscreen);
-      };
-
-      var focus = function () {
-        var body = SelectorFind.ancestor(offscreen, 'body');
-        body.each(function (b) {
-          switcher.toOff(b, offscreen);
-        });
-      };
-
-      var isOffscreen = function (other) {
-        return Class.has(other, hash);
-      };
-
-      var contents = function () {
-        Consolidator.consolidate(offscreen, isOffscreen);
-        var data = Struct.immutable('elements', 'html', 'container');
-        var elements = Traverse.children(offscreen);
-        var html = Html.get(offscreen);
-        return data(elements, html, offscreen);
-      };
-
-      var detach = function () {
-        Remove.remove(offscreen);
-      };
-
-      var container = function () {
-        return offscreen;
-      };
-
-      return {
-        attach: attach,
-        focus: focus,
-        contents: contents,
-        container: container,
-        detach: detach
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.sloth.api.ProxyPaste',
-
-  [
-    'ephox.peanut.Fun',
-    'ephox.plumber.tap.function.BlockTap',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sloth.api.Paste',
-    'ephox.sloth.engine.Offscreen',
-    'ephox.sugar.api.Traverse'
-  ],
-
-  function (Fun, BlockTap, Event, Events, Paste, Offscreen, Traverse) {
-    return function (switcher, element) {
-      var offscreen = Offscreen(switcher);
-
-      var postpaste = function () {
-        switcher.cleanup();
-        var contents = offscreen.contents();
-        offscreen.detach();
-        events.trigger.after(contents.elements(), contents.html(), offscreen.container());
-      };
-
-      var tap = BlockTap.tap(function () {
-        events.trigger.before();
-        offscreen.attach(element);
-        offscreen.focus();
-        Paste.run(Traverse.owner(element), tap, postpaste);
-      });
-
-      var handler = function () {
-        tap.instance();
-      };
-
-      var events = Events.create({
-        before: Event([]),
-        after: Event(['elements', 'html', 'container'])
-      });
-
-      var destroy = Fun.noop;
-
-      return {
-        instance: Fun.constant(handler),
-        destroy: destroy,
-        events: events.registry
-      };
-    };
-
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.pastiche.Pastiche',
-
-  [
-    'ephox.cement.api.CementConstants',
-    'ephox.cement.pastiche.IeBlob',
-    'ephox.compass.Arr',
-    'ephox.fred.PlatformDetection',
-    'ephox.fussy.api.WindowSelection',
-    'ephox.limbo.api.RunPaste',
-    'ephox.limbo.api.Sources',
-    'ephox.peanut.Fun',
-    'ephox.perhaps.Option',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.sloth.api.BodySwitch',
-    'ephox.sloth.api.DivSwitch',
-    'ephox.sloth.api.ProxyPaste',
-    'ephox.sugar.api.Class',
-    'ephox.sugar.api.Elements',
-    'ephox.sugar.api.Node',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.Traverse',
-    'global!console',
-    'global!setTimeout'
-  ],
-
-  function (CementConstants, IeBlob, Arr, PlatformDetection, WindowSelection, RunPaste, Sources, Fun, Option, Event, Events, BodySwitch, DivSwitch, ProxyPaste, Class, Elements, Node, Remove, Traverse, console, setTimeout) {
-    var platform = PlatformDetection.detect();
-
-    return function (prePasteFilter, body, mergeSettings, intraFlag) {
-      // Temporary hack until we restructure in TBIO-1515
-      var findClipboardTags = function (container, isWord) {
-        return (intraFlag !== undefined && !isWord) ? intraFlag.findClipboardTags(Traverse.children(container)) : Option.none();
-      };
-
-
-      var events = Events.create({
-        paste: Event(['elements', 'assets']),
-        error: Event(['message'])
-      });
-
-      var fakeSelecton = {
-        // dupe from hare.selection.Selection
-        set: function (win, range) {
-          WindowSelection.setExact(win, range.startContainer(), range.startOffset(), range.endContainer(), range.endOffset());
-        }
-      };
-
-      // TBIO-2019: scrollbar lock on paste.
-      // When using DivSwitch for inline editing, FF & webkit browsers will lock the scrollbar after paste
-      // This is because the the offscreen div was not used and hence no filtration was run and the scrollbar unlock code never got called
-      // To verify this paste formatted html and see the formatting unchanged <span style="color:red">test</span>
-      // DivSwitch calls focus on the offscreen div, FF & Webkit do not set selection on focus,
-      // so inserting into offscreen div fails, bypassing the rest of the past process.
-      // It works in IE because amazingly IE sets selection on focus.
-      // Calling BodySwitch with IE inline mode paste fails altogether, the cause of the failure is unknown
-      var switchF = platform.browser.isIE() && Node.name(body) !== 'body' ? DivSwitch: BodySwitch;
-      var switcher = switchF(fakeSelecton);
-      var documentElement = Traverse.owner(body);
-      var proxyPaste = ProxyPaste(switcher, body);
-      var backgroundAssets = Option.none();
-
-      proxyPaste.events.after.bind(function (event) {
-        var container = event.container();
-        switcher.toOn(body, container);
-
-        // Run a paste filter over the off-screen div.
-        prePasteFilter(container);
-
-        Class.add(container, CementConstants.binStyle());
-        var isWord = Sources.isWord(platform, container);
-
-        var pasteImpl = function (pasteSettings) {
-          var merging = (isWord && pasteSettings.mergeOfficeStyles) === true || (!isWord && pasteSettings.mergeHtmlStyles === true);
-
-          try {
-            var dump = RunPaste.go(documentElement, platform, container, merging, isWord);
-            if (dump !== undefined && dump !== null && dump.length > 0) {
-              var elements = Elements.fromHtml(dump);
-
-              backgroundAssets.fold(function () {
-                events.trigger.paste(elements, []);
-              }, function (future) {
-                future.get(function (assets) {
-                  events.trigger.paste(elements, assets);
-                });
-              });
-              backgroundAssets = Option.none();
-            } else {
-              // This is required to stop the scroll blocking. (TBIO-2440)
-              events.trigger.paste([], []);
-            }
-          } catch (e) {
-            console.error(e);
-            events.trigger.error('errors.paste.process.failure');
-          }
-        };
-
-        // This potentially prompts the user, so it needs to be a callback
-        var normalPaste = Fun.curry(mergeSettings.get, isWord, pasteImpl);
-
-        // Temporary hack until we restructure in TBIO-1515
-        findClipboardTags(container, isWord).fold(normalPaste, function (tags) {
-          Arr.each(tags, Remove.remove);
-          // making sure it's asynchronous in both scenarios
-          setTimeout(function () {
-            // No need to call mergeSettings.get, we're just hard coding true
-            pasteImpl({ mergeHtmlStyles: true });
-          }, 0);
-        });
-      });
-
-      var destroy = function () {
-        proxyPaste.destroy();
-      };
-
-      var handler = function (raw) {
-        try {
-          backgroundAssets = IeBlob.convert(raw);
-          var instance = proxyPaste.instance();
-          instance();
-        } catch (e) {
-          console.error(e);
-          events.trigger.error('errors.paste.process.failure');
-        }
-      };
-
-      return {
-        handler: handler,
-        isSupported: Fun.constant(true),
-        events: events.registry,
-        destroy: destroy
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.smartpaste.PasteHandlers',
-
-  [
-    'ephox.cement.html.HtmlPaste',
-    'ephox.cement.images.ImagePaste',
-    'ephox.cement.pastiche.Pastiche',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.scullion.Struct',
-    'ephox.violin.Strings'
-  ],
-
-  function (HtmlPaste, ImagePaste, Pastiche, Event, Events, Struct, Strings) {
-    var result = Struct.immutable('captured');
-
-    var dataContainsMicrosoftOfficeUrn = function (data) {
-      // copied from ELJ, this logic doesn't exist in Tord and Pastiche's version isn't good enough
-      return Strings.contains(data, '<html') &&
-        (Strings.contains(data, 'xmlns:o="urn:schemas-microsoft-com:office:office"') ||
-         Strings.contains(data, 'xmlns:x="urn:schemas-microsoft-com:office:excel"'));
-    };
-
-    return function (prePasteFilter, body, mergeSettings, pasteSettings) {
-      // Temporary hack until we restructure in TBIO-1515
-      var intraFlag = pasteSettings.intraFlag;
-
-      var htmlPaste = HtmlPaste(mergeSettings, pasteSettings);
-      var imagePaste = ImagePaste(pasteSettings);
-      var fallback = Pastiche(prePasteFilter, body, mergeSettings, intraFlag);
-
-      var events = Events.create({
-        paste: Event(['elements', 'assets']),
-        error: Event(['message']),
-        cancel: Event([])
-      });
-
-      var bindEvents = function (source) {
-        // why can't this be easy
-        source.events.error.bind(function (event) {
-          events.trigger.error(event.message());
-        });
-        source.events.paste.bind(function (event) {
-          var elements = event.elements();
-          var assets = event.assets();
-
-          if (elements.length === 0 && assets.length === 0)
-               events.trigger.cancel();
-          else events.trigger.paste(elements, assets);
-        });
-      };
-
-      bindEvents(htmlPaste);
-      bindEvents(imagePaste);
-      bindEvents(fallback);
-
-      var htmlRawImpl = function (raw, preferredType) {
-        var data = raw.clipboardData.getData(preferredType);
-        // the decision was made that non-word HTML paste uses pastiche,
-        // rather than run pastiche after tord
-        var captured = dataContainsMicrosoftOfficeUrn(data) ?
-                htmlPaste.handler(data) :
-                execFallback(raw, preferredType);
-
-        return result(captured);
-      };
-
-      var imageRawImpl = function (raw, _) {
-        var captured = imagePaste.handler(raw.clipboardData.items);
-        return result(captured);
-      };
-
-      // has it's own function to ensure when the arguments change both places are updated
-      var execFallback = function (raw, _) {
-        fallback.handler(raw);
-        return false;
-      };
-
-      var fallbackImpl = function (raw, preferredType) {
-        var captured = execFallback(raw, preferredType);
-        return result(captured);
-      };
-
-      // this must contain everything from the priority list in PasteBroker
-      var handlers = {
-        'html': htmlRawImpl,
-        'image': imagePaste.isSupported() ? imageRawImpl : fallbackImpl,
-        'files': imagePaste.isSupported() ? imageRawImpl : fallbackImpl,
-        'fallback': fallbackImpl
-      };
-
-      // Temporary hack until we restructure in TBIO-1515
-      if (intraFlag !== undefined) {
-        handlers[intraFlag.clipboardType()] = fallbackImpl;
-      }
-
-      var destroy = function () {
-        fallback.destroy();
-      };
-
-      return {
-        events: events.registry,
-        handlers: handlers,
-        destroy: destroy
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.smartpaste.PasteBroker',
-
-  [
-    'ephox.cement.smartpaste.Inspection',
-    'ephox.cement.smartpaste.PasteHandlers',
-    'ephox.perhaps.Option',
-    'ephox.perhaps.Options',
-    'global!RegExp'
-  ],
-
-  function (Inspection, PasteHandlers, Option, Options, RegExp) {
-    // these must match the list of handler functions in PasteHandlers
-    var defaultPriority = ['html', 'image', 'files'];
-
-    var unknownFlavor = { flavor: 'fallback' };
-
-    var getPreferredFlavor = function (priority, data) {
-      if (!Inspection.isValidData(data)) return unknownFlavor;
-      var types = data.types;
-
-      var r = Options.findMap(priority, function (p) {
-        // case insensitive match on priority text (e.g. 'html' matches 'text/html')
-        var pmatch = new RegExp(p, 'i');
-        return Options.findMap(types, function (t) {
-          return t.match(pmatch) !== null ?
-                    Option.some({ type: t, flavor: p }) :
-                    Option.none();
-        });
-      });
-      return r.getOr(unknownFlavor);
-    };
-
-    // extracted to enforce separation of concerns between events, priority order and handling functions
-    var createHandler = function (intraFlag, handlers) {
-
-      // Temporary hack until we restructure in TBIO-1515
-      var priority = intraFlag === undefined ? defaultPriority : [ intraFlag.clipboardType() ].concat(defaultPriority);
-
-      return function (raw) {
-        var preferred = getPreferredFlavor(priority, raw.clipboardData);
-        var impl = handlers[preferred.flavor];
-        var result = impl(raw, preferred.type);
-        if (result.captured()) {
-          raw.preventDefault();
-        }
-      };
-    };
-
-    return function (prePasteFilter, body, mergeSettings, pasteSettings) {
-      var pasteHandlers = PasteHandlers(prePasteFilter, body, mergeSettings, pasteSettings);
-
-      var handlePaste = createHandler(pasteSettings.intraFlag, pasteHandlers.handlers);
-
-      var destroy = function () {
-        pasteHandlers.destroy();
-      };
-
-      return {
-        events: pasteHandlers.events,
-        handlePaste: handlePaste,
-        destroy: destroy
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.porkbun.SourceEvent',
-
-  [
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.porkbun.Event'
-  ],
-
-  function (Arr, Fun, Event) {
-
-    /** An event sourced from another event.
-
-      :: ([String], {bind: ..., unbind: ...}) -> SourceEvent
-    */
-    return function (fields, source) {
-      var mine = Event(fields);
-      var numHandlers = 0;
-
-      var triggerer = function(evt) {
-        // yay! Let's unbox this event, convert it to a varargs, so it can be re-boxed!
-        var args = Arr.map(fields, function (field) {
-          return evt[field]();
-        });
-        mine.trigger.apply(null, args);
-      };
-
-      var bind = function (handler) {
-        mine.bind(handler);
-        numHandlers++;
-        if (numHandlers === 1) {
-          source.bind(triggerer);
-        }
-      };
-
-      var unbind = function (handler) {
-        mine.unbind(handler);
-        numHandlers--;
-        if (numHandlers === 0) {
-          source.unbind(triggerer);
-        }
-      };
-
-      return {
-        bind: bind,
-        unbind: unbind,
-        trigger: Fun.die("Cannot trigger a source event.")
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.cement.api.Cement',
-
-  [
-    'ephox.cement.flash.Flash',
-    'ephox.cement.smartpaste.MergeSettings',
-    'ephox.cement.smartpaste.PasteBroker',
-    'ephox.limbo.api.RtfImage',
-    'ephox.plumber.tap.function.BlockTap',
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.porkbun.SourceEvent',
-    'ephox.sloth.api.Paste',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.InsertAll'
-  ],
-
-  function (Flash, MergeSettings, PasteBroker, RtfImage, BlockTap, Event, Events, SourceEvent, Paste, Element, InsertAll) {
-    return function (body, createDialog, prePasteFilter, cementConfig) {
-      var flash = Flash(createDialog, cementConfig);
-      var mergeSettings = MergeSettings(createDialog, cementConfig);
-      var pasteSettings = { baseUrl: cementConfig.baseUrl, allowLocalImages: cementConfig.allowLocalImages, intraFlag: cementConfig.intraFlag };
-      var pasteBroker = PasteBroker(prePasteFilter, body, mergeSettings, pasteSettings);
-
-      var events = Events.create({
-        cancel: SourceEvent([], mergeSettings.events.cancel), // only merge settings can cancel paste, not flash
-        error: Event(['message']),
-        insert: Event(['elements', 'assets'])
-      });
-
-      var insert = function (event) {
-        pasteTap.control.unblock();
-        events.trigger.insert(event.elements(), event.assets());
-      };
-
-      flash.events.insert.bind(insert);
-
-      var pasteTap = BlockTap.tap(function (nativeEvent) {
-        if (Paste.willBlock()) {
-          /*
-             On IE10, a second paste is required. That happens synchronously, before we can
-             return anything that says "block the tap".
-             In order to make this code reentrant, we need to eagerly block.
-          */
-          pasteTap.control.block();
-
-          /*
-            We then need to cancel the native event, because due to reentrancy the "is blocked"
-            check below actually returns false. If we don't prevent default here, we allow the
-            default paste to complete on the initial paste event.
-           */
-          nativeEvent.preventDefault();
-        }
-
-        pasteBroker.handlePaste(nativeEvent);
-
-        // If dialogs are opened, we set the block and need to prevent default
-        if (pasteTap.control.isBlocked()) nativeEvent.preventDefault();
-      });
-
-      // block the broker from receiving paste events while the merge window is open.
-      mergeSettings.events.open.bind(pasteTap.control.block);
-      mergeSettings.events.close.bind(pasteTap.control.unblock);
-
-      pasteBroker.events.paste.bind(function (event) {
-        var elements = event.elements();
-        var content = Element.fromTag('div');
-        InsertAll.append(content, elements);
-
-        if (RtfImage.exists(content)) {
-          // block the broker from receiving paste events while the flash window is open.
-          pasteTap.control.block();
-          flash.gordon(content, event.assets());
-        } else {
-          insert(event);
-        }
-      });
-
-      var destroy = function () {
-        pasteBroker.destroy();
-      };
-
-      var passThroughError = function (event) {
-        pasteTap.control.unblock();
-        events.trigger.error(event.message());
-      };
-      flash.events.error.bind(passThroughError);
-      pasteBroker.events.error.bind(passThroughError);
-
-      return {
-        paste: pasteTap.instance,
-        isBlocked: pasteTap.control.isBlocked,
-        destroy: destroy,
-        events: events.registry
-      };
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.settings.Defaults',
-
-  [
-
-  ],
-
-  function() {
-    return {
-      officeStyles: 'prompt',
-      htmlStyles: 'clean'
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.styles.Styles',
-
-  [
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.SelectorExists',
-    'ephox.sugar.api.SelectorFind',
-    'global!document'
-  ],
-
-  function(Attr, Element, Insert, Remove, SelectorExists, SelectorFind, document) {
-    var styleid = 'powerpaste-styles';
-    var styleidselector = '#' + styleid;
-
-    var injectStyles = function(url) {
-      if (!SelectorExists.any(styleidselector)){
-        var htmlString =
-          '<style>' +
-            '.ephox-cement-flashbin-helpcopy-kbd ' +
-            '{font-size: 3em !important; text-align: center !important; vertical-align: middle !important; margin: .5em 0} ' +
-            '.ephox-cement-flashbin-helpcopy-kbd .ephox-polish-help-kbd ' +
-            '{font-size: 3em !important; vertical-align: middle !important;} ' +
-            '.ephox-cement-flashbin-helpcopy a ' +
-            '{text-decoration: underline} ' +
-            '.ephox-cement-flashbin-loading-spinner ' +
-            '{background-image: url(' + url + ') !important; width: 96px !important; height:96px !important; display: block; margin-left: auto !important; margin-right: auto !important; margin-top: 2em !important; margin-bottom: 2em !important;} ' +
-            '.ephox-cement-flashbin-loading p ' +
-            '{text-align: center !important; margin: 2em 0 !important} ' +
-            '.ephox-cement-flashbin-target ' +
-            '{height: 1px !important;} ' +
-            '.ephox-cement-flashbin-target.ephox-cement-flash-activate ' +
-            '{height: 150px !important; width: 100% !important;} ' +
-            '.ephox-cement-flashbin-target object ' +
-            '{height: 1px !important;} ' +
-            '.ephox-cement-flashbin-target.ephox-cement-flash-activate object ' +
-            '{height: 150px !important; width: 100% !important;} ' +
-          '</style>';
-
-        var style = Element.fromHtml(htmlString);
-        Attr.set(style, 'type', 'text/css');
-        Attr.set(style, 'id', styleid);
-
-        var head = SelectorFind.first('head').getOrDie('Head element could not be found.');
-
-        Insert.append(head, style);
-
-      }
-    };
-
-    var removeStyles = function() {
-      if (SelectorExists.any(styleidselector)) {
-
-        var head = SelectorFind.first('head').getOrDie('Head element could not be found.');
-        var style = SelectorFind.descendant(head, styleidselector).getOrDie('The style element could not be removed');
-
-        Remove.remove(style);
-
-      }
-    };
-
-    return {
-      injectStyles: injectStyles,
-      removeStyles: removeStyles
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.tinymce.ModernTinyDialog',
-
-  [
-    'ephox.porkbun.Event',
-    'ephox.porkbun.Events',
-    'ephox.powerpaste.util.NodeUtil',
-    'ephox.sugar.api.Attr',
-    'ephox.sugar.api.Element',
-    'ephox.sugar.api.Insert',
-    'ephox.sugar.api.Remove',
-    'ephox.sugar.api.SelectorFind'
-  ],
-
-  function(Event, Events, NodeUtil, Attr, Element, Insert, Remove, SelectorFind) {
-    return function(editor) {
-      var createDialog = function() {
-        var win, title = "", content = "", controls = [], dialogContent = null;
-
-        var events = Events.create({
-          close: Event([])
-        });
-
-        var setTitle = function(label) {
-          title = label;
-        };
-
-        var setContent = function(c) {
-          if (tinymce.Env.safari) {
-
-          }
-          var contentString = NodeUtil.nodeToString(c.dom());
-          content = [{
-            type: 'container',
-            html: contentString
-          }];
-          dialogContent = c;
-        };
-
-        var setButtons = function(buttons) {
-          var tinyButtons = [];
-
-          buttons.forEach(function(element, index, array){
-            //Convert cement buttons into tiny buttons
-            tinyButtons.push({
-              text: element.text,
-              onclick: element.click
-            });
-          });
-
-          controls = tinyButtons;
-
-        };
-
-        var winCloseEvent = function(e) {
-          events.trigger.close();
-        };
-
-        var programmaticWinClose = function() {
-          //Unbind the close event, as the dialog close event has already triggered and doesn't need to be triggered again
-          win.off('close', winCloseEvent);
-          win.close('close');
-        };
-
-        var show = function() {
-          //If we don't have any buttons, we need to add one (even if it just closes the dialog)
-          if (controls.length === 0) {
-            //This gives us back the capability to hit esc to close the dialog & the dialog doesn't take focus away from the editor
-            controls = [{
-              text: 'Close',
-              onclick: function() {
-                win.close();
-              }
-            }];
-          }
-
-          var winSettings = {
-            title: title,
-            spacing: 10,
-            padding: 10,
-            items: content,
-            buttons: controls
-          };
-
-          win = editor.windowManager.open(winSettings);
-
-          var tinyWindow = Element.fromDom(win.getEl());
-          var proxy = SelectorFind.descendant(tinyWindow, '.' + Attr.get(dialogContent, 'class')).getOrDie('We must find this element or we cannot continue');
-          Insert.before(proxy, dialogContent);
-          Remove.remove(proxy);
-
-          win.on('close', winCloseEvent);
-
-        };
-
-        var hide = function() {
-          programmaticWinClose();
-        };
-
-        var destroy = function() {
-          programmaticWinClose();
-        };
-
-        var reflow = function() {
-          //(this doesn't work, reflow doesn't calc based on what's actually there, it works it out based on what's in the container on tiny's side)
-          //So we could update the items, but for now the dialog sizes match so...
-        };
-
-        return {
-          events: events.registry,
-          setTitle: setTitle,
-          setContent: setContent,
-          setButtons: setButtons,
-          show: show,
-          hide: hide,
-          destroy: destroy,
-          reflow: reflow
-        };
-      };
-
-      return {
-        createDialog: createDialog
-      };
-    };
-
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.tinymce.ModernPowerPaste',
-  [
-    'ephox.cement.api.Cement',
-    'ephox.compass.Arr',
-    'ephox.peanut.Fun',
-    'ephox.powerpaste.i18n.I18n',
-    'ephox.powerpaste.settings.Defaults',
-    'ephox.powerpaste.styles.Styles',
-    'ephox.powerpaste.tinymce.ErrorDialog',
-    'ephox.powerpaste.tinymce.ModernTinyDialog',
-    'ephox.powerpaste.util.NodeUtil',
-    'ephox.sugar.api.DomEvent',
-    'ephox.sugar.api.Element',
-    'global!setTimeout',
-    'global!tinymce'
-  ],
-  function (Cement, Arr, Fun, I18n, Defaults, Styles, ErrorDialog, ModernTinyDialog, NodeUtil, DomEvent, Element, setTimeout, tinymce) {
-    return function (editor, url, settings, uploader) {
-
-      var bm, swfUrl, imgUrl, cssUrl, jsUrl;
-
-      jsUrl = (settings ? settings.swfUrl : url) + '/js';
-      swfUrl = (settings ? settings.swfUrl : url) + '/flash/textboxpaste.swf';
-      imgUrl = (settings ? settings.imgUrl : url) + '/img/spinner_96.gif';
-      cssUrl = (settings ? settings.cssUrl : url) + '/css/editorcss.css';
-
-      editor.on('init', function(e) {
-        //Inject the styles for our dialog into the page
-        Styles.injectStyles(imgUrl);
-
-        //Inject css into editor
-        editor.dom.loadCSS(cssUrl);
-
-        var cementSettings = {
-          baseUrl: jsUrl,
-          swf: swfUrl,
-          officeStyles: editor.settings.powerpaste_word_import || Defaults.officeStyles,
-          htmlStyles: editor.settings.powerpaste_html_import || Defaults.htmlStyles,
-          translations: I18n.translate,
-          allowLocalImages: editor.settings.powerpaste_allow_local_images
-        };
-
-        var tinyDialog = ModernTinyDialog(editor);
-        var ed = Element.fromDom(editor.getBody());
-        var cement = Cement(ed, tinyDialog.createDialog, Fun.noop, cementSettings);
-
-        cement.events.cancel.bind(function() {
-          bm = null;
-        });
-
-        cement.events.error.bind(function(event) {
-
-          bm = null;
-
-          ErrorDialog.showDialog(editor,
-            I18n.translate(
-              event.message()
-            )
-          );
-        });
-
-        cement.events.insert.bind(function(event) {
-
-          var stringHTML = Arr.map(event.elements(), function (element) {
-              return NodeUtil.nodeToString(element.dom());
-            }).join('');
-
-          //This code was taken from tiny4
-          if (editor.hasEventListeners('PastePostProcess')) {
-            // We need to attach the element to the DOM so Sizzle selectors work on the contents
-            var tempBody = editor.dom.add(editor.getBody(), 'div', {style: 'display:none'}, stringHTML);
-            stringHTML = editor.fire('PastePostProcess', {node: tempBody}).node.innerHTML;
-            editor.dom.remove(tempBody);
-          }
-
-          //Ensure the editor has focus
-          editor.focus();
-
-          //Wait for focus to come back (ie10)
-          setTimeout(function(){
-
-            //Once we've got the html we want to insert and have performed post processing, return the
-            editor.selection.moveToBookmark(bm); //the selection to where it was
-
-            //Delete the bookmark reference so we can do it all again
-            bm = null;
-
-            editor.undoManager.transact(function(){
-              //Content insertion
-              editor.insertContent(stringHTML, {merge: editor.settings.paste_merge_formats !== false});
-
-              uploader.prepareImages(event.assets());
-            });
-
-            uploader.uploadImages(event.assets());
-
-          }, 1);
-
-
-        });
-
-        DomEvent.bind(ed, 'paste', function (e) {
-          //We need to bookmark the selection before we paste the content
-          //So that it knows where to place it back in to the editor when we insert from cement.
-
-          if (!bm) {
-            //Since ie pastes twice, we need to get the bookmark once and ignore the second
-            bm = editor.selection.getBookmark();
-          }
-
-          cement.paste(e.raw());
-
-          //IE appears to require that we blur the iframe
-          setTimeout(function() {
-            if (editor.windowManager.windows[0]) {
-              editor.windowManager.windows[0].getEl().focus();
-            }
-          }, 1);
-        });
-
-      });
-
-      editor.on('remove', function(e) {
-        //When we're removing the last editor, we need to remove our injected styles
-        if (tinymce.editors.length === 1) {
-          Styles.removeStyles();
-        }
-      });
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.tinymce.TinyPowerPaste',
-  [
-    'ephox.powerpaste.imageupload.UploaderFactory',
-    'ephox.powerpaste.tinymce.LegacyPowerPaste',
-    'ephox.powerpaste.tinymce.ModernPowerDrop',
-    'ephox.powerpaste.tinymce.ModernPowerPaste',
-    'global!tinymce'
-  ],
-
-  function (UploaderFactory, LegacyPowerPaste, ModernPowerDrop, ModernPowerPaste, tinymce) {
-    /*jshint jquery:true */
-    return function (settings) {
-
-      return function (editor, url) {
-
-        var setupModern = function () {
-          var uploader = UploaderFactory(editor);
-
-          ModernPowerPaste(editor, url, settings, uploader);
-
-          if (!editor.settings.powerpaste_block_drop) {
-            ModernPowerDrop(editor, url, settings, uploader);
-          }
-        };
-
-        var setupLegacy = function () {
-          LegacyPowerPaste(editor, settings);
-        };
-
-        if (tinymce.Env.ie && tinymce.Env.ie < 10) {
-          setupLegacy();
-        } else {
-          setupModern();
-        }
-
-        var blockDragEvents = function (element) {
-          editor.dom.bind(element, 'drop dragstart dragend dragover dragenter dragleave dragdrop draggesture', function(e) {
-            return tinymce.dom.Event.cancel(e);
-          });
-        };
-
-        if (editor.settings.powerpaste_block_drop) {
-          editor.on('init', function(e) {
-            blockDragEvents(editor.getBody());
-            blockDragEvents(editor.getDoc());
-          });
-        }
-
-        if (editor.settings.paste_postprocess) {
-          editor.on('PastePostProcess', function(e) {
-            editor.settings.paste_postprocess.call(this, this, e);
-          });
-        }
-      };
-    };
-  }
-);
-
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-(function (define, require, demand) {
-define(
-  'ephox.powerpaste.PowerPastePlugin',
-  [
-    'ephox.powerpaste.tinymce.TinyPowerPaste',
-    'global!tinymce'
-  ],
-  function(TinyPowerPaste, tinymce) {
-    return function(settings) {
-      tinymce.PluginManager.requireLangPack('powerpaste', 'ar,ca,cs,da,de,el,es,fa,fi,fr_FR,he_IL,hr,hu_HU,it,ja,kk,ko_KR,nb_NO,nl,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,sv_SE,th_TH,tr,uk,zh_CN,zh_TW');
-      tinymce.PluginManager.add('powerpaste', TinyPowerPaste(settings));
-
-    };
-  }
-);
-})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand);
-
-dem('ephox.powerpaste.PowerPastePlugin')();
-  if (this.ephox && this.ephox.bolt)
-    this.ephox.bolt = old;
-})();
diff --git a/static/tinymce1.3/plugins/powerpaste/plugin.min.js b/static/tinymce1.3/plugins/powerpaste/plugin.min.js
deleted file mode 100644
index a6f2107a..00000000
--- a/static/tinymce1.3/plugins/powerpaste/plugin.min.js
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-/* Ephox Fluffy plugin
- *
- * Copyright 2010-2016 Ephox Corporation.  All rights reserved.
- *
- * Version: 1.0.0-3
- */
-
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};g("1",[],function(){var a=function(a,b){return{isRequired:a,applyPatch:b}},b=function(a,b){return function(){var c=Array.prototype.slice.call(arguments),d=b.apply(this,c),e="undefined"==typeof d?c:d;return a.apply(this,e)}},c=function(a,b){return function(){var c=a.apply(this,arguments),d=b(c),e="undefined"==typeof d?c:d;return e}},d=function(a,b){if(a)for(var c=0;c<b.length;c++)b[c].isRequired(a)&&b[c].applyPatch(a);return a};return{nu:a,before:b,after:c,applyPatches:d}}),g("5",[],function(){var a=function(a,b){b=b.split(".");for(var c=0;c<b.length&&(a=a[b[c]],a);c++);return a};return{resolve:a}}),h("d",setInterval),h("e",clearInterval),g("b",["d","e"],function(a,b){var c=function(){return(new Date).getTime()},d=function(d,e,f,g,h){var i,j=c();i=a(function(){d()&&(b(i),e()),c()-j>h&&(b(i),f())},g)};return{waitFor:d}}),h("4",window),h("c",document),g("8",["b","4","c"],function(a,b,c){var d=function(a,c){var d=a.currentStyle?a.currentStyle[c]:b.getComputedStyle(a,null)[c];return d?d:""},e=function(a){return function(){var b=d(a,"position").toLowerCase();return"absolute"===b||"fixed"===b}},f=function(){var a=c.createElement("div");return a.style.display="none",a.className="mce-floatpanel",a},g=function(a){a.parentNode.removeChild(a)},h=function(b,d){var h=f();c.body.appendChild(h),a.waitFor(e(h),function(){g(h),b()},function(){g(h),d()},10,5e3)};return{waitForSkinLoaded:h}}),h("9",alert),g("6",["8","9"],function(a,b){var c=function(a,b){a.notificationManager?a.notificationManager.open({text:b,type:"warning",timeout:0,icon:""}):a.windowManager.alert(b)},d=function(d){d.EditorManager.on("AddEditor",function(d){var e=d.editor,f=e.settings.service_message;f&&a.waitForSkinLoaded(function(){c(e,e.settings.service_message)},function(){b(f)})})};return{error:c,register:d}}),g("2",["5","1","6","4"],function(a,b,c,d){var e=function(b){var c,e,f=a.resolve(d,"tinymce.util.URI");c=b.base_url,c&&(this.baseURL=new f(this.documentBaseURL).toAbsolute(c.replace(/\/+$/,"")),this.baseURI=new f(this.baseURL)),e=b.suffix,b.suffix&&(this.suffix=e),this.defaultSettings=b},f=function(b){var c=a.resolve(d,"tinymce.util.Tools");return[c.extend({},this.defaultSettings,b)]},g=function(a){return"function"!=typeof a.overrideDefaults},h=function(a){c.register(a),a.overrideDefaults=e,a.EditorManager.init=b.before(a.EditorManager.init,f)};return{patch:b.nu(g,h)}}),g("a",[],function(){var a=0,b=1,c=-1,d=function(a){return parseInt(a,10)},e=function(a){return function(){return a}},f=function(a,b,c){return{major:e(a),minor:e(b),patch:e(c)}},g=function(a){var b=/([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(a);return b?f(d(b[1]),d(b[2]),d(b[3])):f(0,0,0)},h=function(d,e){var f=d-e;return 0===f?a:f>0?b:c},i=function(b,c){var d=h(b.major(),c.major());if(d!==a)return d;var e=h(b.minor(),c.minor());if(e!==a)return e;var f=h(b.patch(),c.patch());return f!==a?f:a};return{nu:f,parse:g,compare:i}}),g("7",["a"],function(a){var b=function(a){var b=[a.majorVersion,a.minorVersion].join(".");return b.split(".").slice(0,3).join(".")},c=function(c){return c?a.parse(b(c)):null},d=function(b,d){return a.compare(c(b),a.parse(d))<0};return{getVersion:c,isLessThan:d}}),g("3",["7","1"],function(a,b){var c=function(a){return function(b){var c=b.plugin_base_urls;for(var d in c)a.PluginManager.urls[d]=c[d]}},d=function(b){return a.isLessThan(b,"4.5.0")},e=function(a){a.overrideDefaults=b.before(a.overrideDefaults,c(a))};return{patch:b.nu(d,e)}}),g("0",["1","2","3","4"],function(a,b,c,d){var e=function(d){a.applyPatches(d,[b.patch,c.patch])};return e(d.tinymce),function(){return{applyPatches:e}}}),d("0")()}();;
-
-/* Ephox PowerPaste plugin
- *
- * Copyright 2010-2016 Ephox Corporation.  All rights reserved.
- *
- * Version: 2.1.10-115
- */
-
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("12",Array),h("13",String),g("g",["12","13"],function(a,b){var c=function(a){return function(b){return a===b}},d=function(){var b=a.prototype.indexOf,d=function(a,c){return b.call(a,c)},e=function(a,b){return r(a,c(b))};return void 0===b?e:d}(),e=function(a,b){return d(a,b)>-1},f=function(a,b){return r(a,b)>-1},g=function(a,b){for(var c=[],d=0;d<a.length;d+=b){var e=a.slice(d,d+b);c.push(e)}return c},h=function(b,c){for(var d=b.length,e=new a(d),f=0;f<d;f++){var g=b[f];e[f]=c(g,f,b)}return e},i=function(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];b(e,c,a)}},j=function(a,b){for(var c=[],d=[],e=0,f=a.length;e<f;e++){var g=a[e],h=b(g,e,a)?c:d;h.push(g)}return{pass:c,fail:d}},k=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++){var f=a[d];b(f,d,a)&&c.push(f)}return c},l=function(a,b){if(0===a.length)return[];for(var c=b(a[0]),d=[],e=[],f=0,g=a.length;f<g;f++){var h=a[f],i=b(h);i!==c&&(d.push(e),e=[]),c=i,e.push(h)}return 0!==e.length&&d.push(e),d},m=function(a,b,c){return n(z(a),b,c)},n=function(a,b,c){return i(a,function(a){c=b(c,a)}),c},o=function(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];if(b(e,c,a))return e}},p=function(a,b,c){var d=o(a,b);return void 0!==d?d:c},q=function(a,c,d){var e=o(a,c);if(void 0===e)throw d||"Could not find element in array: "+b(a);return e},r=function(a,b){for(var c=b||v,d=0,e=a.length;d<e;++d)if(c(a[d])===!0)return d;return-1},s=a.prototype.push,t=function(a){for(var b=[],c=0,d=a.length;c<d;++c)s.apply(b,a[c]);return b},u=function(a,b){var c=h(a,b);return t(c)},v=c(!0),w=function(a,b){for(var c=b||v,d=0,e=a.length;d<e;++d)if(c(a[d],d)!==!0)return!1;return!0},x=function(a,b){return a.length===b.length&&w(a,function(a,c){return a===b[c]})},y=a.prototype.slice,z=function(a){var b=y.call(a,0);return b.reverse(),b},A=function(a,b){return k(a,function(a){return!e(b,a)})},B=function(a,c){for(var d={},e=0,f=a.length;e<f;e++){var g=a[e];d[b(g)]=c(g,e)}return d},C=function(a){return[a]};return{map:h,each:i,partition:j,filter:k,groupBy:l,indexOf:d,foldr:m,foldl:n,find:o,findIndex:r,findOr:p,findOrDie:q,flatten:t,bind:u,forall:w,exists:f,contains:e,equal:x,reverse:z,chunk:g,difference:A,mapToObject:B,pure:C}}),g("p",["12"],function(a){var b=function(){},c=function(a,b){return function(){return a(b.apply(null,arguments))}},d=function(a){return function(){return a}},e=function(a){return a},f=function(a,b){return a===b},g=function(b){for(var c=new a(arguments.length-1),d=1;d<arguments.length;d++)c[d-1]=arguments[d];return function(){for(var d=new a(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];var f=c.concat(d);return b.apply(null,f)}},h=function(a){return function(){return!a.apply(null,arguments)}},i=function(a){return function(){throw a}},j=function(a){return a()},k=function(a){a()};return{noop:b,compose:c,constant:d,identity:e,tripleEquals:f,curry:g,not:h,die:i,apply:j,call:k}}),h("14",Object),g("n",["p","14"],function(a,b){var c=a.constant(!1),d=a.constant(!0),e=function(){return f},f=function(){var f=function(a){return a.isNone()},g=function(a){return a()},h=function(a){return a},i={fold:function(a,b){return a()},is:c,isSome:c,isNone:d,getOr:h,getOrThunk:g,getOrDie:function(a){throw a||"error: getOrDie called on none."},or:h,orThunk:g,map:e,ap:e,each:e,bind:e,flatten:e,exists:c,forall:d,filter:e,equals:f,equals_:f,toArray:function(){return[]},toString:a.constant("none()")};return b.freeze&&b.freeze(i),i}(),g=function(a){var b=function(){return a},h=function(){return k},i=function(b){return g(b(a))},j=function(b){return b(a)},k={fold:function(b,c){return c(a)},is:function(b){return a===b},isSome:d,isNone:c,getOr:b,getOrThunk:b,getOrDie:b,or:h,orThunk:h,map:i,ap:function(b){return b.fold(e,function(b){return g(b(a))})},each:i,bind:j,flatten:b,exists:j,forall:j,filter:function(b){return b(a)?k:f},equals:function(b){return b.is(a)},equals_:function(b,d){return b.fold(c,function(b){return d(a,b)})},toArray:function(){return[a]},toString:function(){return"some("+a+")"}};return k},h=function(a){return null===a||void 0===a?f:g(a)},i=function(a,b){return a.equals(b)},j=function(a,b,c){return a.equals_(b,c)};return{some:g,none:e,from:h,equals:i,equals_:j}}),g("c",["g","p"],function(a,b){return function(c){var d=function(){c.uploadImages()},e=function(d){a.each(d,function(d){d.fold(function(b,d,e,f){a.each(c.dom.select('img[src="'+e+'"]'),function(a){c.dom.setAttrib(a,"src",f.result)})},b.noop)})},f=function(a,b,c,d){return d.result};return{uploadImages:d,prepareImages:e,getLocalURL:f}}}),g("y",[],function(){return function(a){var b=!1;return function(){b||(b=!0,a.apply(null,arguments))}}}),h("2",tinymce),g("d",["2"],function(a){var b=function(){return"Your browser security settings may be preventing images from being imported."},c=function(){return a.Env.mac&&a.Env.webkit?b()+' <a href="https://support.ephox.com/entries/59328357-Safari-6-1-and-7-Flash-Sandboxing" style="text-decoration: underline">More information on paste for Safari</a>':b()},d=function(){return'Safari does not support direct paste of images. <a href="https://support.ephox.com/entries/88543243-Safari-Direct-paste-of-images-does-not-work" style="text-decoration: underline">More information on image pasting for Safari</a>'},e={"cement.dialog.paste.title":"Paste Formatting Options","cement.dialog.paste.instructions":"Choose to keep or remove formatting in the pasted content.","cement.dialog.paste.merge":"Keep Formatting","cement.dialog.paste.clean":"Remove Formatting","cement.dialog.flash.title":"Additional step needed to paste images","cement.dialog.flash.trigger-paste":"Your browser requires you to take one more action to paste the images in your content. Please press the below keys to complete the image paste:","cement.dialog.flash.missing":'Adobe Flash is required to import images from Microsoft Office. Install the <a href="http://get.adobe.com/flashplayer/" target="_blank">Adobe Flash Player</a>.',"cement.dialog.flash.press-escape":'Press <span class="ephox-polish-help-kbd">"Close"</span> to paste your content without images.',"loading.wait":"Please wait...","flash.clipboard.no.rtf":c(),"safari.imagepaste":d(),"webview.imagepaste":d(),"error.code.images.not.found":"The images service was not found: (","error.imageupload":"Image failed to upload: (","error.full.stop":").","errors.local.images.disallowed":"Local image paste has been disabled. Local images have been removed from pasted content.","flash.crashed":"Images have not been imported as Adobe Flash appears to have crashed. This may be caused by pasting large documents.","errors.imageimport.failed":"Some images failed to import.","errors.imageimport.unsupported":"Unsupported image type.","errors.imageimport.invalid":"Image is invalid."},f=function(a){return e[a]},g=function(b){return a.translate(f(b))};return{translate:g}}),g("s",[],function(){return{showDialog:function(a,b){var c=function(){win.close()},d=[{text:"Ok",onclick:c}],e={title:"Error",spacing:10,padding:10,items:[{type:"container",html:b}],buttons:d};win=a.windowManager.open(e)}}}),g("15",["y","d","s"],function(a,b,c){return function(d,e){var f=function(){return b.translate("error.code.images.not.found")+e+b.translate("error.full.stop")},g=function(){return b.translate("error.imageupload")+e+b.translate("error.full.stop")},h=function(a){var b=a.status(),e=0===b||b>=400||b<500,h=e?f:g;c.showDialog(d,h())},i=function(){return a(h)};return{instance:i}}}),g("3g",["g"],function(a){var b=function(b){var e=c(b),f=function(b){var c=b.split(" "),f=a.map(c,function(a){return d(e,a)});return f.join(" ")};return{resolve:f}},c=function(a){return a.replace(/\./g,"-")},d=function(a,b){return a+"-"+b};return{create:b,cssNamespace:c,cssClass:d}}),g("2d",["3g"],function(a){var b=a.create("ephox-salmon");return{resolve:b.resolve}}),g("26",["p","2d"],function(a,b){var c=b.resolve("upload-image-in-progress"),d="data-"+b.resolve("image-blob");return{uploadInProgress:a.constant(c),blobId:a.constant(d)}}),g("3h",[],function(){return function(a,b,c){var d=c||!1,e=function(){b(),d=!0},f=function(){a(),d=!1},g=function(){var a=d?f:e;a()},h=function(){return d};return{on:e,off:f,toggle:g,isOn:h}}}),g("1b",["12","13"],function(a,b){var c=function(c){if(null===c)return"null";var d=typeof c;return"object"===d&&a.prototype.isPrototypeOf(c)?"array":"object"===d&&b.prototype.isPrototypeOf(c)?"string":d},d=function(a){return function(b){return c(b)===a}};return{isString:d("string"),isObject:d("object"),isArray:d("array"),isNull:d("null"),isBoolean:d("boolean"),isUndefined:d("undefined"),isFunction:d("function"),isNumber:d("number")}}),g("1c",["14"],function(a){var b=function(){var b=a.keys,c=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b};return void 0===b?c:b}(),c=function(a,c){for(var d=b(a),e=0,f=d.length;e<f;e++){var g=d[e],h=a[g];c(h,g,a)}},d=function(a,b){return e(a,function(a,c,d){return{k:c,v:b(a,c,d)}})},e=function(a,b){var d={};return c(a,function(c,e){var f=b(c,e,a);d[f.k]=f.v}),d},f=function(a,b){var d={},e={};return c(a,function(a,c){var f=b(a,c)?d:e;f[c]=a}),{t:d,f:e}},g=function(a,b){var d=[];return c(a,function(a,c){d.push(b(a,c))}),d},h=function(a,c){for(var d=b(a),e=0,f=d.length;e<f;e++){var g=d[e],h=a[g];if(c(h,g,a))return h}},i=function(a){return g(a,function(a){return a})},j=function(a){return i(a).length};return{bifilter:f,each:c,map:d,mapToArray:g,tupleMap:e,find:h,keys:b,values:i,size:j}}),g("2e",[],function(){return{ATTRIBUTE:2,CDATA_SECTION:4,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,ELEMENT:1,TEXT:3,PROCESSING_INSTRUCTION:7,ENTITY_REFERENCE:5,ENTITY:6,NOTATION:12}}),g("1d",["2e"],function(a){var b=function(a){var b=a.dom().nodeName;return b.toLowerCase()},c=function(a){return a.dom().nodeType},d=function(a){return a.dom().nodeValue},e=function(a){return function(b){return c(b)===a}},f=function(d){return c(d)===a.COMMENT||"#comment"===b(d)},g=e(a.ELEMENT),h=e(a.TEXT),i=e(a.DOCUMENT);return{name:b,type:c,value:d,isElement:g,isText:h,isDocument:i,isComment:f}}),h("1e",Error),g("1f",[],function(){return"undefined"==typeof console&&(console={log:function(){}}),console}),g("j",["1b","g","1c","1d","1e","1f"],function(a,b,c,d,e,f){var g=function(b,c,d){if(!(a.isString(d)||a.isBoolean(d)||a.isNumber(d)))throw f.error("Invalid call to Attr.set. Key ",c,":: Value ",d,":: Element ",b),new e("Attribute value was not simple");b.setAttribute(c,d+"")},h=function(a,b,c){g(a.dom(),b,c)},i=function(a,b){var d=a.dom();c.each(b,function(a,b){g(d,b,a)})},j=function(a,b){var c=a.dom().getAttribute(b);return null===c?void 0:c},k=function(a,b){var c=a.dom();return!(!c||!c.hasAttribute)&&c.hasAttribute(b)},l=function(a,b){a.dom().removeAttribute(b)},m=function(a){var b=a.dom().attributes;return void 0===b||null===b||0===b.length},n=function(a){return b.foldl(a.dom().attributes,function(a,b){return a[b.name]=b.value,a},{})},o=function(a,b,c){k(a,c)&&!k(b,c)&&h(b,c,j(a,c))},p=function(a,c,e){d.isElement(a)&&d.isElement(c)&&b.each(e,function(b){o(a,c,b)})};return{clone:n,set:h,setAll:i,get:j,has:k,remove:l,hasNone:m,transfer:p}}),g("5z",["g","j"],function(a,b){var c=function(a,c){var d=b.get(a,c);return void 0===d||""===d?[]:d.split(" ")},d=function(a,d,e){var f=c(a,d),g=f.concat([e]);b.set(a,d,g.join(" "))},e=function(d,e,f){var g=a.filter(c(d,e),function(a){return a!==f});g.length>0?b.set(d,e,g.join(" ")):b.remove(d,e)};return{read:c,add:d,remove:e}}),g("3i",["g","5z"],function(a,b){var c=function(a){return void 0!==a.dom().classList},d=function(a){return b.read(a,"class")},e=function(a,c){return b.add(a,"class",c)},f=function(a,c){return b.remove(a,"class",c)},g=function(b,c){a.contains(d(b),c)?f(b,c):e(b,c)};return{get:d,add:e,remove:f,toggle:g,supports:c}}),g("27",["3h","j","3i"],function(a,b,c){var d=function(a,b){c.supports(a)?a.dom().classList.add(b):c.add(a,b)},e=function(a){var d=c.supports(a)?a.dom().classList:c.get(a);0===d.length&&b.remove(a,"class")},f=function(a,b){if(c.supports(a)){var d=a.dom().classList;d.remove(b)}else c.remove(a,b);e(a)},g=function(a,b){return c.supports(a)?a.dom().classList.toggle(b):c.toggle(a,b)},h=function(b,d){var e=c.supports(b),f=b.dom().classList,g=function(){e?f.remove(d):c.remove(b,d)},h=function(){e?f.add(d):c.add(b,d)};return a(g,h,i(b,d))},i=function(a,b){return c.supports(a)&&a.dom().classList.contains(b)};return{add:d,remove:f,toggle:g,toggler:h,has:i}}),h("1g",document),g("k",["p","1e","1f","1g"],function(a,b,c,d){var e=function(a,b){var e=b||d,f=e.createElement("div");if(f.innerHTML=a,!f.hasChildNodes()||f.childNodes.length>1)throw c.error("HTML does not have a single root node",a),"HTML must have a single root node";return h(f.childNodes[0])},f=function(a,b){var c=b||d,e=c.createElement(a);return h(e)},g=function(a,b){var c=b||d,e=c.createTextNode(a);return h(e)},h=function(c){if(null===c||void 0===c)throw new b("Node cannot be null or undefined");return{dom:a.constant(c)}};return{fromHtml:e,fromTag:f,fromText:g,fromDom:h}}),g("3k",["g","1c","p","12"],function(a,b,c,d){var e=function(e,f){var g=function(){for(var b=new d(arguments.length),f=0;f<b.length;f++)b[f]=arguments[f];if(e.length!==b.length)throw'Wrong number of arguments to struct. Expected "['+e.length+']", got '+b.length+" arguments";var g={};return a.each(e,function(a,d){g[a]=c.constant(b[d])}),g},h=function(a,b){for(var d=0;d<e.length;d++){var g=f&&f[d]||c.tripleEquals,h=e[d];if(!g(a[h](),b[h]()))return!1}return!0},i=function(a){return b.map(a,function(a){return a()})};return{nu:g,eq:h,evaluate:i}};return{product:e}}),g("3j",["3k"],function(a){return function(){return a.product(arguments).nu}}),g("60",["1b","g"],function(a,b){var c=function(a){return a.slice(0).sort()},d=function(a,b){throw"All required keys ("+c(a).join(", ")+") were not specified. Specified keys were: "+c(b).join(", ")+"."},e=function(a){throw"Unsupported keys for object: "+c(a).join(", ")},f=function(c,d){if(!a.isArray(d))throw"The "+c+" fields must be an array. Was: "+d+".";b.each(d,function(b){if(!a.isString(b))throw"The value "+b+" in the "+c+" fields was not a string."})},g=function(a,b){throw"All values need to be of type: "+b+". Keys ("+c(a).join(", ")+") were not."},h=function(a){var d=c(a),e=b.find(d,function(a,b){return b<d.length-1&&a===d[b+1]});if(void 0!==e&&null!==e)throw"The field: "+e+" occurs more than once in the combined fields: ["+d.join(", ")+"]."};return{sort:c,reqMessage:d,unsuppMessage:e,validateStrArr:f,invalidTypeMessage:g,checkDupes:h}}),g("3l",["g","1c","p","n","60","14"],function(a,b,c,d,e,f){return function(g,h){var i=g.concat(h);if(0===i.length)throw"You must specify at least one required or optional field.";return e.validateStrArr("required",g),e.validateStrArr("optional",h),e.checkDupes(i),function(j){var k=b.keys(j),l=a.forall(g,function(b){return a.contains(k,b)});l||e.reqMessage(g,k);var m=a.filter(k,function(b){return!a.contains(i,b)});m.length>0&&e.unsuppMessage(m);var n={};return a.each(g,function(a){n[a]=c.constant(j[a])}),a.each(h,function(a){n[a]=c.constant(f.prototype.hasOwnProperty.call(j,a)?d.some(j[a]):d.none())}),n}}}),g("2c",["3j","3k","3l"],function(a,b,c){return{immutable:a,immutable2:b,immutableBag:c}}),g("3m",[],function(){var a=function(a,b){var c=[],d=function(a){return c.push(a),b(a)},e=b(a);do e=e.bind(d);while(e.isSome());return c};return{toArray:a}}),g("4j",["p"],function(a){return function(b,c,d){var e=b.isiOS()&&/ipad/i.test(d)===!0,f=b.isiOS()&&!e,g=b.isAndroid()&&3===b.version.major,h=b.isAndroid()&&4===b.version.major,i=e||g||h&&/mobile/i.test(d)===!0,j=b.isiOS()||b.isAndroid(),k=j&&!i,l=c.isSafari()&&b.isiOS()&&/safari/i.test(d)===!1;return{isiPad:a.constant(e),isiPhone:a.constant(f),isTablet:a.constant(i),isPhone:a.constant(k),isTouch:a.constant(j),isAndroid:b.isAndroid,isiOS:b.isiOS,isWebView:a.constant(l)}}}),g("4k",[],function(){var a=function(a,b,c){return{browser:{current:a,version:b},os:{current:c}}};return{create:a}}),g("61",[],function(){var a=function(a){return function(){return a}},b=function(b,c,d){for(var e=0;e<d.length;e++)b["is"+d[e].name]=a(d[e].name===c)};return{getter:a,attachGetters:b}}),g("4l",["61"],function(a){var b=function(b,c,d){var e=a.attachGetters,f={};return f.current=c,f.version=d,e(f,f.current,b),f};return{create:b}}),h("62",Math),h("63",isFinite),h("64",isNaN),h("65",parseFloat),g("3s",["62","63","64","65"],function(a,b,c,d){var e=function(a){return function(b,c){var d=typeof c;if(d!==a)throw b+" was not a "+a+". Was: "+c+" ("+d+")"}},f=e("string"),g=function(a,b){f(a,b);var c=b.length;if(1!==c)throw a+" was not a single char. Was: "+b},h=e("number"),i=function(b,c){if(h(b,c),c!==a.abs(c))throw b+" was not an integer. Was: "+c},j=function(a){return!c(d(a))&&b(a)},k=function(a,b){if(i(a,b),b<0)throw a+" was not a natural number. Was: "+b};return{vString:f,vChar:g,vInt:i,vNat:k,pNum:j}}),g("37",["3s"],function(a){var b=function(a,b,c){if(""===b)return!0;if(a.length<b.length)return!1;var d=a.substr(c,c+b.length);return d===b},c=function(a,b){var c=function(a){var b=typeof a;return"string"===b||"number"===b};return a.replace(/\${([^{}]*)}/g,function(a,d){var e=b[d];return c(e)?e:a})},d=function(a){var b=function(a,b){for(var c=[],d=0;d<a.length;d++)c.push(b(a[d]));return c};return function(){var c=b(arguments,function(a){return"string"==typeof a?a.toLowerCase():a});return a.apply(this,c)}},e=function(a,c){return b(a,c,0)},f=d(e),g=function(a,c){return b(a,c,a.length-c.length)},h=d(g),i=function(a,b){return a.substr(0,b)},j=function(a,b){return a.substr(a.length-b,a.length)},k=function(a,b){return function(c,d){return a(c,d)?b(c,c.length-d.length):c}},l=k(e,j),m=k(g,i),n=function(a,b){return a+b},o=function(a,b){return b+a},p=function(a,b){return function(c,d){return a(c,d)?c:b(c,d)}},q=p(e,o),r=p(g,n),s=function(a){return a.replace(/^\s+|\s+$/g,"")},t=function(a){return a.replace(/^\s+/g,"")},u=function(a){return a.replace(/\s+$/g,"")},v=function(a,b){return a.indexOf(b)!=-1},w=d(v),x=function(a){return a.replace(/\"/gm,"&quot;")},y=function(a,b){return a===b},z=d(y),A=function(a){if(""===a)throw"head on empty string";return a.substr(0,1)},B=function(a){if(""===a)throw"toe on empty string";return a.substr(a.length-1,a.length)},C=function(a){if(""===a)throw"tail on empty string";return a.substr(1,a.length-1)},D=function(a){if(""===a)throw"torso on empty string";return a.substr(0,a.length-1)},E=function(a){return""===a?a:A(a).toUpperCase()+C(a)},F=function(b,c){a.vString("str",b),a.vNat("num",c);for(var d="",e=0;e<c;e++)d+=b;return d},G=function(b){return function(c,d,e){a.vString("str",c),a.vChar("c",d),a.vNat("width",e);var f=c.length;return f>=e?c:b(c,F(d,e-f))}},H=G(function(a,b){return b+a}),I=G(function(a,b){return a+b});return{supplant:c,startsWith:e,startsWithIgnoringCase:f,endsWith:g,endsWithIgnoringCase:h,first:i,last:j,removeLeading:l,removeTrailing:m,ensureLeading:q,ensureTrailing:r,trim:s,lTrim:t,rTrim:u,contains:v,containsIgnoringCase:w,htmlEncodeDoubleQuotes:x,equals:y,equalsIgnoringCase:z,head:A,repead:F,padLeft:H,padRight:I,toe:B,tail:C,torso:D,capitalize:E}}),g("4m",["37"],function(a){var b=a.contains,c=function(a){return function(c){return b(c,a)}},d=function(){try{var a=new ActiveXObject("ChromeTab.ChromeFrame");return!!a}catch(b){return!1}},e=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,f=function(a){var d=[{name:"Spartan",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(a){var c=b(a,"edge/")&&b(a,"chrome")&&b(a,"safari")&&b(a,"applewebkit");return c}},{name:"ChromeFrame",versionRegexes:[/.*?chromeframe\/([0-9]+)\.([0-9]+).*/,e],search:function(c){return!!b(c,"chromeframe")&&a()}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,e],search:function(a){return b(a,"chrome")&&!b(a,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(c){var d=b(c,"msie")||b(c,"trident"),e=b(c,"chromeframe");return e?d&&!a():d}},{name:"Opera",versionRegexes:[e,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:c("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:c("firefox")},{name:"Safari",versionRegexes:[e,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(a){return(b(a,"safari")||b(a,"mobile/"))&&b(a,"applewebkit")}},{name:"Envjs",versionRegexes:[/.*?envjs\/\ ?([0-9]+)\.([0-9]+).*/],search:c("envjs")}],f=[{name:"Windows",search:c("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(a){return b(a,"iphone")||b(a,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:c("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:c("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:c("linux")},{name:"Solaris",search:c("sunos")},{name:"FreeBSD",search:c("freebsd")}];return{browsers:d,oses:f}};return{create:f,chromeFrameChecker:d}}),g("4n",[],function(){var a=function(a,b){var c=typeof a;if("boolean"===c)return!!a;if("object"===c){var d=a.minimum;return b.major>d.major||b.major===d.major&&b.minor>=d.minor}throw"invalid spec"};return{meetsSpec:a}}),g("66",[],function(){var a=function(a,b,c){for(var d=0;d<a.length;d++){var e=a[d];if(c(e,d,a))return e}return b};return{findOneInArrayOr:a}}),g("4o",["66"],function(a){var b=function(b,c){var d=a.findOneInArrayOr,e=String(c).toLowerCase();return d(b,{name:void 0},function(a){return a.search(e)})};return{detect:b}}),g("4p",[],function(){var a=function(a,b){function c(a,b){for(var c=0;c<a.length;c++){var d=a[c];if(d.test(b))return d}}function d(a,b){var d=c(a,b);if(!d)return{major:0,minor:0};var e=function(a){return Number(b.replace(d,"$"+a))};return{major:e(1),minor:e(2)}}var e=String(b).toLowerCase(),f=a.versionRegexes;return f?d(f,e):{major:0,minor:0}};return{detectVersion:a}}),g("2t",["4j","4k","4l","4m","4n","4o","4p"],function(a,b,c,d,e,f,g){var h=g.detectVersion,i=c.create,j=e.meetsSpec,k=f.detect,l=function(a,b,c,d){return!!a[b]&&(a[b][c]?j(a[b][c],d):!!a[b].All)},m=function(a,b){var c=b.browser,d=b.os;return l(a,d.current,c.current,c.version)},n=function(b,c){var e=d.create(c),f=e.browsers,g=e.oses,j=k(g,b),m=j.name,n=h(j,b),o=k(f,b),p=o.name,q=h(o,b),r=i(g,m,n),s=i(f,p,q),t=a(r,s,b),u=function(a){return l(a,m,p,q)};return{browser:s,os:r,deviceType:t,isSupported:u}},o=function(){return n(navigator.userAgent,d.chromeFrameChecker)};return{Platform:b,detect:o,doDetect:n,isSupported:l,isSupportedPlatform:m}}),g("72",[],function(){return Function("return this;")()}),g("68",["72"],function(a){var b=function(b,c){for(var d=c||a,e=0;e<b.length&&void 0!==d&&null!==d;++e)d=d[b[e]];return d},c=function(a,c){var d=a.split(".");return b(d,c)};return{path:b,resolve:c}}),g("3p",["68"],function(a){var b=function(b,c){return a.resolve(b,c)},c=function(a,c){var d=b(a,c);if(void 0===d)throw a+" not available on this browser";return d};return{getOrDie:c}}),g("67",["3p"],function(a){var b=function(){var b=a.getOrDie("Node");return b},c=function(a,b,c){return 0!==(a.compareDocumentPosition(b)&c)},d=function(a,d){return c(a,d,b().DOCUMENT_POSITION_PRECEDING)},e=function(a,d){return c(a,d,b().DOCUMENT_POSITION_CONTAINED_BY)};return{documentPositionPreceding:d,documentPositionContainedBy:e}}),g("2h",["2e","g","n","k","1e","1g"],function(a,b,c,d,e,f){var g=0,h=1,i=2,j=3,k=function(){var a=f.createElement("span");return void 0!==a.matches?g:void 0!==a.msMatchesSelector?h:void 0!==a.webkitMatchesSelector?i:void 0!==a.mozMatchesSelector?j:-1}(),l=a.ELEMENT,m=a.DOCUMENT,n=function(a,b){var c=a.dom();if(c.nodeType!==l)return!1;if(k===g)return c.matches(b);if(k===h)return c.msMatchesSelector(b);if(k===i)return c.webkitMatchesSelector(b);if(k===j)return c.mozMatchesSelector(b);throw new e("Browser lacks native selectors")},o=function(a){return a.nodeType!==l&&a.nodeType!==m||0===a.childElementCount},p=function(a,c){var e=void 0===c?f:c.dom();return o(e)?[]:b.map(e.querySelectorAll(a),d.fromDom)},q=function(a,b){var e=void 0===b?f:b.dom();return o(e)?c.none():c.from(e.querySelector(a)).map(d.fromDom)};return{all:p,is:n,one:q}}),g("3n",["g","2t","67","p","2h"],function(a,b,c,d,e){var f=function(a,b){return a.dom()===b.dom()},g=function(a,b){return a.dom().isEqualNode(b.dom())},h=function(b,c){return a.exists(c,d.curry(f,b))},i=function(a,b){var c=a.dom(),d=b.dom();return c!==d&&c.contains(d)},j=function(a,b){return c.documentPositionContainedBy(a.dom(),b.dom())},k=b.detect().browser,l=k.isIE()?j:i;return{eq:f,isEqualNode:g,member:h,contains:l,is:e.is}}),g("3f",["1b","g","p","n","2c","3m","3n","k"],function(a,b,c,d,e,f,g,h){var i=function(a){return h.fromDom(a.dom().ownerDocument)},j=function(a){var b=i(a);return h.fromDom(b.dom().documentElement)},k=function(a){var b=a.dom(),c=b.ownerDocument.defaultView;return h.fromDom(c)},l=function(a){var b=a.dom();return d.from(b.parentNode).map(h.fromDom)},m=function(a){return l(a).bind(function(c){var e=u(c),f=b.findIndex(e,function(b){return g.eq(a,b)});return f>-1?d.some(f):d.none()})},n=function(b,d){for(var e=a.isFunction(d)?d:c.constant(!1),f=b.dom(),g=[];null!==f.parentNode&&void 0!==f.parentNode;){var i=f.parentNode,j=h.fromDom(i);if(g.push(j),e(j)===!0)break;f=i}return g},o=function(a){var c=function(c){return b.filter(c,function(b){return!g.eq(a,b)})};return l(a).map(u).map(c).getOr([])},p=function(a){var b=a.dom();return d.from(b.offsetParent).map(h.fromDom)},q=function(a){var b=a.dom();return d.from(b.previousSibling).map(h.fromDom)},r=function(a){var b=a.dom();return d.from(b.nextSibling).map(h.fromDom)},s=function(a){return b.reverse(f.toArray(a,q))},t=function(a){return f.toArray(a,r)},u=function(a){var c=a.dom();return b.map(c.childNodes,h.fromDom)},v=function(a,b){var c=a.dom().childNodes;return d.from(c[b]).map(h.fromDom)},w=function(a){return v(a,0)},x=function(a){return v(a,a.dom().childNodes.length-1)},y=e.immutable("element","offset"),z=function(a,b){var c=u(a);return c.length>0&&b<c.length?y(c[b],0):y(a,b)};return{owner:i,defaultView:k,documentElement:j,parent:l,findIndex:m,parents:n,siblings:o,prevSibling:q,offsetParent:p,prevSiblings:s,nextSibling:r,nextSiblings:t,children:u,child:v,firstChild:w,lastChild:x,leaf:z}}),g("28",["g","k","3f","1g"],function(a,b,c,d){var e=function(a,e){var f=e||d,g=f.createElement("div");return g.innerHTML=a,c.children(b.fromDom(g))},f=function(c,d){return a.map(c,function(a){return b.fromTag(a,d)})},g=function(c,d){return a.map(c,function(a){return b.fromText(a,d)})},h=function(c){return a.map(c,b.fromDom)};return{fromHtml:e,fromTags:f,fromText:g,fromDom:h}}),g("1x",["3f"],function(a){var b=function(b,c){var d=a.parent(b);d.each(function(a){a.dom().insertBefore(c.dom(),b.dom())})},c=function(c,d){var f=a.nextSibling(c);f.fold(function(){var b=a.parent(c);b.each(function(a){e(a,d)})},function(a){b(a,d)})},d=function(b,c){var d=a.firstChild(b);d.fold(function(){e(b,c)},function(a){b.dom().insertBefore(c.dom(),a.dom())})},e=function(a,b){a.dom().appendChild(b.dom())},f=function(c,d,f){a.child(c,f).fold(function(){e(c,d)},function(a){b(a,d)})},g=function(a,c){b(a,c),e(c,a)};return{before:b,after:c,prepend:d,append:e,appendAt:f,wrap:g}}),g("29",["g","1x"],function(a,b){var c=function(c,d){a.each(d,function(a){b.before(c,a)})},d=function(c,d){a.each(d,function(a,e){var f=0===e?c:d[e-1];b.after(f,a)})},e=function(c,d){a.each(d.slice().reverse(),function(a){b.prepend(c,a)})},f=function(c,d){a.each(d,function(a){b.append(c,a)})};return{before:c,after:d,prepend:e,append:f}}),g("5w",[],function(){var a=function(a){var b,c=!1;return function(){return c||(c=!0,b=a.apply(null,arguments)),b}};return{cached:a}}),g("5i",["5w","k","1d","1g"],function(a,b,c,d){var e=function(a){var b=c.isText(a)?a.dom().parentNode:a.dom();return void 0!==b&&null!==b&&b.ownerDocument.body.contains(b)},f=a.cached(function(){return g(b.fromDom(d))}),g=function(a){var c=a.dom().body;if(null===c||void 0===c)throw"Body is not available yet";return b.fromDom(c)};return{body:f,getBody:g,inBody:e}}),g("3o",["g","5i","3f"],function(a,b,c){var d=function(a){return h(b.body(),a)},e=function(b,d,e){return a.filter(c.parents(b,e),d)},f=function(b,d){return a.filter(c.siblings(b),d)},g=function(b,d){return a.filter(c.children(b),d)},h=function(b,d){var e=[];return a.each(c.children(b),function(a){d(a)&&(e=e.concat([a])),e=e.concat(h(a,d))}),e};return{all:d,ancestors:e,siblings:f,children:g,descendants:h}}),g("2a",["3o","2h"],function(a,b){var c=function(a){return b.all(a)},d=function(c,d,e){return a.ancestors(c,function(a){return b.is(a,d)},e)},e=function(c,d){return a.siblings(c,function(a){return b.is(a,d)})},f=function(c,d){return a.children(c,function(a){return b.is(a,d)})},g=function(a,c){return b.all(c,a)};return{all:c,ancestors:d,siblings:e,children:f,descendants:g}}),g("16",["g","26","27","k","28","29","2a"],function(a,b,c,d,e,f,g){var h=function(a){c.remove(a,b.uploadInProgress())},i=function(c){for(var i=0;i<c.undoManager.data.length;i++){var j=c.undoManager.data[i].content,k=d.fromTag("div");f.append(k,e.fromHtml(j));var l=g.descendants(k,"."+b.uploadInProgress());a.each(l,h),c.undoManager.data[i].content=k.dom().innerHTML}},j=function(a,b,c){for(var d=0;d<a.undoManager.data.length;d++)a.undoManager.data[d].content=a.undoManager.data[d].content.split(b.objurl()).join(c.location)};return{unwrapHistory:i,resrcHistory:j}}),g("2b",["3p"],function(a){var b=function(){return a.getOrDie("URL")},c=function(a){return b().createObjectURL(a)},d=function(a){b().revokeObjectURL(a)};return{createObjectURL:c,revokeObjectURL:d}}),g("17",["1c","2b","n","2c"],function(a,b,c,d){var e=d.immutable("id","blob","objurl","data");return function(){var d={},f=function(a,b,c,f){var g=e(a,b,c,f);return d[a]=g,g},g=function(a){return c.from(d[a])},h=function(a){b.revokeObjectURL(a.objurl())},i=function(b){return c.from(a.find(d,function(a){return a.data().result===b}))},j=function(a){var b=d[a];delete d[a],void 0!==b&&h(b)},k=function(){a.each(d,h),d={}};return{add:f,get:g,remove:j,lookupByData:i,destroy:k}}}),g("21",["g","2c"],function(a,b){return function(c){var d=b.immutable.apply(null,c),e=[],f=function(a){if(void 0===a)throw"Event bind error: undefined handler";e.push(a)},g=function(b){e=a.filter(e,function(a){return a!==b})},h=function(){var b=d.apply(null,arguments);a.each(e,function(a){a(b)})};return{bind:f,unbind:g,trigger:h}}}),g("22",["1c"],function(a){var b=function(b){var c=a.map(b,function(a){return{bind:a.bind,unbind:a.unbind}}),d=a.map(b,function(a){return a.trigger});return{registry:c,trigger:d}};return{create:b}}),g("18",["g","2d","26","21","22","j","2a"],function(a,b,c,d,e,f,g){var h="data-"+b.resolve("image-upload"),i=function(a,b){return g.descendants(a,"img["+h+'="'+b+'"]')},j=function(a){return g.descendants(a,"img:not(["+h+"])["+c.blobId()+"]")};return function(){var b=[],c=[],g=e.create({complete:d(["response"])}),k=function(a,c){f.set(a,h,c),b.push(c)},l=function(c){b=a.filter(b,function(a,b){return a!==c}),p()===!1&&o()},m=function(a,b){c.push({success:a,element:b.dom()})},n=function(b,c,d){a.each(c,function(a){f.remove(a,h),m(d,a)}),l(b)},o=function(){g.trigger.complete(c),c=[]},p=function(){return b.length>0},q=function(c){return a.contains(b,c)};return{findById:i,findAll:j,register:k,
-report:n,inProgress:p,isActive:q,events:g.registry}}}),g("1l",["1b","12"],function(a,b){var c=function(a,b){return b},d=function(b,c){var d=a.isObject(b)&&a.isObject(c);return d?f(b,c):c},e=function(a){return function(){for(var c=new b(arguments.length),d=0;d<c.length;d++)c[d]=arguments[d];if(0===c.length)throw"Can't merge zero objects";for(var e={},f=0;f<c.length;f++){var g=c[f];for(var h in g)g.hasOwnProperty(h)&&(e[h]=a(e[h],g[h]))}return e}},f=e(d),g=e(c);return{deepMerge:f,merge:g}}),g("1m",["1b","g","1c","12"],function(a,b,c,d){var e=function(e){if(!a.isArray(e))throw"cases must be an array";if(0===e.length)throw"there must be at least one case";var f={};return b.each(e,function(b,g){var h=c.keys(b);if(1!==h.length)throw"one and only one name per case";var i=h[0],j=b[i];if(void 0!==f[i])throw"duplicate key detected:"+i;if("cata"===i)throw"cannot have a case named cata (sorry)";if(!a.isArray(j))throw"case arguments must be an array";f[i]=function(){var a=arguments.length;if(a!==j.length)throw"Wrong number of arguments to case "+i+". Expected "+j.length+" ("+j+"), got "+a;for(var b=new d(a),c=0;c<b.length;c++)b[c]=arguments[c];return{fold:function(){if(arguments.length!==e.length)throw"Wrong number of arguments to fold. Expected "+e.length+", got "+arguments.length;var a=arguments[g];return a.apply(null,b)}}}}),f};return{generate:e}}),g("h",["1l","1m"],function(a,b){var c=b.generate([{blob:["id","blob","objurl","data"]},{url:["id","url","raw"]}]),d=function(a,b,c){return a.fold(b,c)};return a.merge(c,{cata:d})}),g("2f",["p","n"],function(a,b){var c=function(a){return e(function(b,c){return c(a)})},d=function(a){return e(function(b,c){return b(a)})},e=function(e){var f=function(b){return e(a.constant(!1),function(a){return a===b})},g=function(){return e(a.constant(!1),a.constant(!0))},h=a.not(g),i=function(b){return e(a.constant(b),a.identity)},j=function(b){return e(b,a.identity)},k=function(){return e(function(b){a.die(b)()},a.identity)},l=function(b){return e(a.constant(b),c)},m=function(a){return e(a,c)},n=function(a){return p(function(b){return c(a(b))})},o=n,p=function(a){return e(d,a)},q=function(b){return e(a.constant(!1),b)},r=function(b){return e(a.constant(!0),b)},s=function(){return e(b.none,b.some)};return{is:f,isValue:g,isError:h,getOr:i,getOrThunk:j,getOrDie:k,or:l,orThunk:m,fold:e,map:n,each:o,bind:p,exists:q,forall:r,toOption:s}};return{value:c,error:d}}),g("3q",["g","27","3i","12"],function(a,b,c,d){var e=function(c,d){a.each(d,function(a){b.add(c,a)})},f=function(c,d){a.each(d,function(a){b.remove(c,a)})},g=function(c,d){a.each(d,function(a){b.toggle(c,a)})},h=function(c,d){return a.forall(d,function(a){return b.has(c,a)})},i=function(c,d){return a.exists(d,function(a){return b.has(c,a)})},j=function(a){for(var b=a.dom().classList,c=new d(b.length),e=0;e<b.length;e++)c[e]=b.item(e);return c},k=function(a){return c.supports(a)?j(a):c.get(a)};return{add:e,remove:f,toggle:g,hasAll:h,hasAny:i,get:k}}),g("2g",["27","3q"],function(a,b){var c=function(b){return function(c){a.add(c,b)}},d=function(b){return function(c){a.remove(c,b)}},e=function(a){return function(c){b.remove(c,a)}},f=function(b){return function(c){return a.has(c,b)}};return{addClass:c,removeClass:d,removeClasses:e,hasClass:f}}),g("2i",["1b","n"],function(a,b){return function(c,d,e,f,g){return c(e,f)?b.some(e):a.isFunction(g)&&g(e)?b.none():d(e,f,g)}}),g("20",["n","2a","2h","2i"],function(a,b,c,d){var e=function(c){return a.from(b.all(c)[0])},f=function(c,d,e){return a.from(b.ancestors(c,d,e)[0])},g=function(c,d){return a.from(b.siblings(c,d)[0])},h=function(c,d){return a.from(b.children(c,d)[0])},i=function(c,d){return a.from(b.descendants(c,d)[0])},j=function(a,b,e){return d(c.is,f,a,b,e)};return{first:e,ancestor:f,sibling:g,child:h,descendant:i,closest:j}}),g("19",["g","h","p","n","2f","26","1m","2c","j","27","2g","20","1f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=h.immutable("image","blobInfo"),o=g.generate([{failure:["error"]},{success:["result","images","blob"]}]),p=function(a,b,c){var e=a.isActive(b);return a.register(c,b),j.add(c,f.uploadInProgress()),e?d.none():d.some(b)},q=function(b,c,d,e){return a.each(c,function(a){i.set(a,"src",e.location),i.remove(a,f.blobId())}),u(b,d)},r=function(b,d,e,g,h,i,j){var l=function(){m.error("Internal error with blob cache",h),j(o.failure({status:c.constant(666)}))};b.upload(i,h,function(b){var c=d.findById(g,h);a.each(c,k.removeClass(f.uploadInProgress())),b.fold(function(a){j(o.failure(a))},function(a){q(e,c,h,a).fold(l,function(b){j(o.success(a,c,b))})}),d.report(h,c,b.isValue())})},s=function(a,b,c,d,e,g){var h=a.lookupByData(e.result).getOrThunk(function(){return a.add(b,c,d,e)});return i.set(g,f.blobId(),h.id()),n(g,h)},t=function(a,b){var c=i.get(b,f.blobId());return a.get(c).fold(function(){return e.error(c)},function(a){return e.value(n(b,a))})},u=function(a,b){return a.get(b).fold(function(){return e.error("Internal error with blob cache")},function(c){return a.remove(b),e.value(c)})},v=function(d,f,g){return a.bind(g,function(a){return b.cata(a,function(a,b,c,g){var h=l.descendant(f,'img[src="'+c+'"]');return h.fold(function(){return[e.error("Image that was just inserted could not be found: "+c)]},function(f){return[e.value(s(d,a,b,c,g,f))]})},c.constant([]))})},w=function(b,c,d){var e=b.findAll(d);return b.inProgress()?[]:a.map(e,function(a){return t(c,a)})};return{prepareForUpload:p,handleUpload:r,registerAssets:v,registerBlob:s,findBlobs:w}}),g("3r",["3p"],function(a){return function(){var b=a.getOrDie("FormData");return new b}}),g("2j",["1b","g","3r","2c","37"],function(a,b,c,d,e){var f=d.immutable("message","status","contents"),g=["jpg","png","gif","jpeg"],h=function(c,d){if(a.isString(c.type)&&e.startsWith(c.type,"image/")){var f=c.type.substr("image/".length);return b.contains(g,f)?d+"."+f:d}return d},i=function(b,c){var d=a.isString(b.name)&&!e.endsWith(b.name,".tmp");return d?b.name:h(b,c)},j=function(a,b,d){var e=c();return e.append(a,b,d),{data:e,contentType:!1,processData:!1}};return{failureObject:f,getFilename:i,buildExtra:j}}),g("1u",["12"],function(a){var b=function(b){return function(){var c=a.prototype.slice.call(arguments),d=this;setTimeout(function(){b.apply(d,c)},0)}};return{bounce:b}}),g("1v",[],function(){return function(a,b){var c=function(c){return a(function(a){b(function(b){var d=c(b);a(d)})})},d=function(c){return a(function(a){b(function(b){c(b).get(a)})})},e=function(c){return a(function(a){b(function(b){c.get(a)})})};return{get:b,map:c,bind:d,anonBind:e}}}),g("1w",["g"],function(a){return function(b){var c=function(a){return b(function(b){b(a)})},d=function(c){return b(function(b){var d=[],e=0,f=function(a){return function(f){d[a]=f,e++,e>=c.length&&b(d)}};0===c.length?b([]):a.each(c,function(a,b){a.get(f(b))})})},e=function(b,c){return d(a.map(b,c))},f=function(a,c,d){return b(function(b){var e=!1,f=!1,g=void 0,h=void 0,i=function(){if(e&&f){var a=d(g,h);b(a)}};a.get(function(a){g=a,e=!0,i()}),c.get(function(a){h=a,f=!0,i()})})},g=function(a,b){return function(c){return b(c).bind(a)}};return{nu:b,pure:c,par:d,mapM:e,lift2:f,compose:g}}}),g("o",["1u","1v","1w"],function(a,b,c){var d=function(c){var e=function(b){c(a.bounce(b))};return b(d,e)};return c(d)}),g("2u",["3p"],function(a){return function(){var b=a.getOrDie("FileReader");return new b}}),g("73",["o","2u"],function(a,b){return function(c){return a.nu(function(a){var d=b();d.onload=function(b){var c=b.target;a(c.result)},d.readAsText(c)})}}),g("74",["3p"],function(a){return function(){var b=a.getOrDie("XMLHttpRequest");return new b}}),g("69",["1b","1c","1l","73","o","74","n","2f","37","1f"],function(a,b,c,d,e,f,g,h,i,j){var k={"*":"*/*",text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},l=function(l,m,n,o){var p={url:l,contentType:"application/json",processData:!1,type:"GET"},q=c.merge(p,o),r=f();r.open(q.type.toUpperCase(),q.url,!0),"blob"===q.responseType&&(r.responseType=q.responseType),a.isString(q.contentType)&&r.setRequestHeader("Content-Type",q.contentType);var s=q.dataType,t=a.isString(s)&&"*"!==s?k[s]+", "+k["*"]+"; q=0.01":k["*"];r.setRequestHeader("Accept",t),void 0!==q.xhrFields&&q.xhrFields.withCredentials===!0&&(r.withCredentials=!0),a.isObject(q.headers)&&b.each(q.headers,function(b,c){a.isString(c)||a.isString(b)?r.setRequestHeader(c,b):j.error("Request header data was not a string: ",c," -> ",b)});var u=function(a,b,c){m(a)},v=function(){return"blob"===q.responseType?g.from(r.response).map(d).getOr(e.pure("no response content")):e.pure(r.responseText)},w=function(){v().get(function(a){0===r.status?n("Unknown HTTP error (possible cross-domain request)",r.status,a):n('Could not load url "'+l+'": '+r.statusText,r.status,a)})},x=function(){try{return h.value(JSON.parse(r.response))}catch(a){return h.error({status:r.status,statusText:"Response was not JSON",responseText:r.responseText})}},y=function(){var a="json"===s?x(r):h.value(r.response);a.fold(w,function(a){u(a,r.statusText,r)})},z=function(){0===r.status?i.startsWith(q.url,"file:")?y():w():r.status<100||r.status>=400?w():y()};r.onerror=w,r.onload=z,void 0===q.data?r.send():r.send(q.data)};return{ajax:l}}),g("3u",["3p"],function(a){var b=function(){return a.getOrDie("JSON")},c=function(a){return b().parse(a)},d=function(a,c,d){return b().stringify(a,c,d)};return{parse:c,stringify:d}}),g("3t",["1l","69","3u"],function(a,b,c){var d=function(c,d,e,f){b.ajax(c,d,e,a.merge({dataType:"text",type:"GET"},f))},e=function(d,e,f,g,h){b.ajax(d,f,g,a.merge({dataType:"text",data:c.stringify(e),type:"POST"},h))};return{get:d,post:e}}),g("6a",[],function(){var a=function(a){var b="";return""!==a.protocol&&(b+=a.protocol,b+=":"),""!==a.authority&&(b+="//",b+=a.authority),b+=a.path,""!==a.query&&(b+="?",b+=a.query),""!==a.anchor&&(b+="#",b+=a.anchor),b};return{recompose:a}}),g("75",["1l"],function(a){var b={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@\/]*)(?::([^:@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@\/]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*)(?::([^:@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},c=function(a,b){for(var c=b,d=c.parser[c.strictMode?"strict":"loose"].exec(a),e={},f=14;f--;)e[c.key[f]]=d[f]||"";return e[c.q.name]={},e[c.key[12]].replace(c.q.parser,function(a,b,d){b&&(e[c.q.name][b]=d)}),e},d=function(d,e){var f=a.merge(b,e);return c(d,f)};return{parse:d}}),g("76",["37"],function(a){var b=function(b){return a.removeTrailing(b,d(b))},c=function(a){return a.match(/(^\/?.*?)(\/|$)/)[1]},d=function(a){return a.substring(a.lastIndexOf("/"))},e=function(d){for(var e=d,f="";""!==e;)if(a.startsWith(e,"../"))e=a.removeLeading(e,"../");else if(a.startsWith(e,"./"))e=a.removeLeading(e,"./");else if(a.startsWith(e,"/./"))e="/"+a.removeLeading(e,"/./");else if("/."===e)e="/";else if(a.startsWith(e,"/../"))e="/"+a.removeLeading(e,"/../"),f=b(f);else if("/.."===e)e="/",f=b(f);else if("."===e||".."===e)e="";else{var g=c(e);e=a.removeLeading(e,g),f+=g}return f};return{remove:e}}),g("77",["37"],function(a){var b=function(b,c,d){if(""!==d&&""===b)return"/"+c;var e=b.substring(b.lastIndexOf("/")+1);return a.removeTrailing(b,e)+c};return{merge:b}}),g("6b",["37","75","76","77"],function(a,b,c,d){var e=function(e,f){var g={strictMode:!0},h=b.parse(e,g),i=b.parse(f,g),j={};return""!==i.protocol?(j.protocol=i.protocol,j.authority=i.authority,j.path=c.remove(i.path),j.query=i.query):(""!==i.authority?(j.authority=i.authority,j.path=c.remove(i.path),j.query=i.query):(""===i.path?(j.path=h.path,""!==i.query?j.query=i.query:j.query=h.query):(a.startsWith(i.path,"/")?j.path=c.remove(i.path):(j.path=d.merge(h.path,i.path,e.authority),j.path=c.remove(j.path)),j.query=i.query),j.authority=h.authority),j.protocol=h.protocol),j.anchor=i.anchor,j};return{transform:e}}),g("3v",["6a","6b"],function(a,b){var c=function(c,d){var e=b.transform(c,d);return a.recompose(e)};return{resolve:c}}),g("2k",["1b","1l","3t","3u","2f","2j","37","3v"],function(a,b,c,d,e,f,g,h){return function(i){var j=function(){var a=i.url,b=a.lastIndexOf("/"),c=b>0?a.substr(0,b):a,d=void 0===i.basePath?c:i.basePath;return g.endsWith(d,"/")?d:d+"/"},k=j(),l=function(a,b){var c=a.split(/\s+/),d=1===c.length&&""!==c[0]?c[0]:b;return h.resolve(k,d)},m=function(g,h,j){var k=g.blob(),m=function(a,b,c){j(e.error(f.failureObject(a,b,c)))},n=f.getFilename(k,h),o=i.credentials!==!0?{}:{xhrFields:{withCredentials:!0}},p=b.merge(o,f.buildExtra("image",k,n)),q=function(b){var c;try{var f=d.parse(b);if(!a.isString(f.location))return void m("JSON response did not contain a string location",500,b);c=f.location}catch(g){c=b}var h=l(c,n);j(e.value({location:h}))};c.post(i.url,{},q,m,p)};return{upload:m}}}),h("x",setTimeout),g("2l",["1b","2f","2j","2c","1f","x"],function(a,b,c,d,e,f){var g=d.immutable("id","filename","blob","base64");return function(d){var h=function(h,i,j){var k=function(a){j(b.error(a))},l=function(c){a.isString(c)?j(b.value({location:c})):(e.error("Image upload result was not a string"),k(""))},m=c.getFilename(h.blob(),i),n=g(i,m,h.blob(),h.data().result);f(function(){d(n,l,k)},0)};return{upload:h}}}),g("1a",["2j","2k","2l"],function(a,b,c){var d=function(a){return b(a)},e=function(a){return c(a)},f=function(b,c,d){return a.failureObject(b,c,d)},g=function(b,c){return a.getFilename(b,c)},h=function(b,c,d){return a.buildExtra(b,c,d)};return{direct:d,custom:e,failureObject:f,getFilename:g,buildExtra:h}}),g("b",["g","p","n","c","15","16","17","18","19","1a","j","k"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(d,m){var n=g(),o=h(),p=(e(),e(d,m.url)),q=j.direct(m),r=function(){return l.fromDom(d.getBody())},s=function(b,c,e){a.each(c,function(a){k.set(a,"data-mce-src",b.location)}),f.resrcHistory(d,e,b)};o.events.complete.bind(function(a){f.unwrapHistory(d)});var t=function(a,b,c){i.handleUpload(q,o,n,r(),a,b,function(a){a.fold(function(a){c(a)},s)})},u=function(a,b){i.prepareForUpload(o,a.blobInfo().id(),a.image()).each(function(c){t(c,a.blobInfo(),b)})},v=function(b){var c=p.instance(),d=i.registerAssets(n,r(),b);a.each(d,function(a){a.fold(function(a){console.error(a)},function(a){u(a,c)})})},w=function(){var b=p.instance(),d=i.findBlobs(o,n,r());a.each(d,function(a){a.fold(function(a){o.report(a,c.none(),!1)},function(a){u(a,b)})})},x=function(a){w(),v(a)},y=function(a,b,c,d){return c};return{uploadImages:x,prepareImages:b.noop,getLocalURL:y}},n=function(a){var c=d(a);return{uploadImages:b.noop,prepareImages:c.prepareImages,getLocalURL:c.getLocalURL}};return function(a,b){return b?m(a,b):n(a)}}),g("3",["b","c"],function(a,b){return function(c){var d=!c.uploadImages&&c.settings.images_upload_url?{url:c.settings.images_upload_url,basePath:c.settings.images_upload_base_path,credentials:c.settings.images_upload_credentials}:null;return c.uploadImages?b(c):a(c,d)}}),g("1h",[],function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b=function(a){return a.ownerDocument.defaultView?a.ownerDocument.defaultView.getComputedStyle(a,null):a.currentStyle||{}},c=function(a){"undefined"!=typeof console&&console.log&&console.log(a)},d=function(a){var b=Array.prototype.slice.call(a).reverse();return function(a){for(var c=a,d=0;d<b.length;d++){var e=b[d];c=e(c)}return c}},e=function(a){return tinymce.each(Array.prototype.slice.call(arguments,1),function(b){for(var c in b)a[c]=b[c]}),a};return{each:tinymce.each,trim:tinymce.trim,bind:a,extend:e,ephoxGetComputedStyle:b,log:c,compose:d}}),g("e",["1h"],function(a){var b=(tinymce.each,function(b,c,d,e){var f,g,h,i,j,k=b.selection,l=b.dom,m=b.getBody();if(j=d.isText(),d.reset(),e.clipboardData&&e.clipboardData.getData("text/html")){e.preventDefault();var n=e.clipboardData.getData("text/html"),o=n.match(/<html[\s\S]+<\/html>/i),p=null===o?n:o[0];return c(p)}if(!l.get("_mcePaste")){if(f=l.add(m,"div",{id:"_mcePaste","class":"mcePaste"},'\ufeff<br _mce_bogus="1">'),i=m!=b.getDoc().body?l.getPos(b.selection.getStart(),m).y:m.scrollTop,l.setStyles(f,{position:"absolute",left:-1e4,top:i,width:1,height:1,overflow:"hidden"}),tinymce.isIE)return h=l.doc.body.createTextRange(),h.moveToElementText(f),h.execCommand("Paste"),l.remove(f),"\ufeff"===f.innerHTML?(b.execCommand("mcePasteWord"),void e.preventDefault()):(c(j?f.innerText:f.innerHTML),tinymce.dom.Event.cancel(e));var q=function(a){a.preventDefault()};l.bind(b.getDoc(),"mousedown",q),l.bind(b.getDoc(),"keydown",q),tinymce.isGecko&&(h=b.selection.getRng(!0),h.startContainer==h.endContainer&&3==h.startContainer.nodeType&&(nodes=l.select("p,h1,h2,h3,h4,h5,h6,pre",f),1==nodes.length&&l.remove(nodes.reverse(),!0))),g=b.selection.getRng(),f=f.firstChild,h=b.getDoc().createRange(),h.setStart(f,0),h.setEnd(f,1),k.setRng(h),window.setTimeout(function(){var d="",e=l.select("div.mcePaste");a.each(e,function(b){var c=b.firstChild;c&&"DIV"==c.nodeName&&c.style.marginTop&&c.style.backgroundColor&&l.remove(c,1),a.each(l.select("div.mcePaste",b),function(a){l.remove(a,1)}),a.each(l.select("span.Apple-style-span",b),function(a){l.remove(a,1)}),a.each(l.select("br[_mce_bogus]",b),function(a){l.remove(a)}),d+=b.innerHTML}),a.each(e,function(a){l.remove(a)}),g&&k.setRng(g),c(d),l.unbind(b.getDoc(),"mousedown",q),l.unbind(b.getDoc(),"keydown",q)},0)}}),c=function(a,c,d){return function(e){b(a,c,d,e)}},d=function(a,c,d){return function(e){(tinymce.isOpera||navigator.userAgent.indexOf("Firefox/2")>0)&&((tinymce.isMac?e.metaKey:e.ctrlKey)&&86==e.keyCode||e.shiftKey&&45==e.keyCode)&&b(a,c,d,e)}};return{getOnPasteFunction:c,getOnKeyDownFunction:d}}),g("1i",[],function(){var a=function(a,b){var c,d=b.getDoc(),e="ephoxInsertMarker",f=b.selection,g=b.dom;f.setContent('<span id="'+e+'">&nbsp;</span>'),c=g.get(e);for(var h=d.createDocumentFragment();a.firstChild&&!g.isBlock(a.firstChild);)h.appendChild(a.firstChild);for(var i=d.createDocumentFragment();a.lastChild&&!g.isBlock(a.lastChild);)i.appendChild(a.lastChild);if(c.parentNode.insertBefore(h,c),g.insertAfter(i,c),a.firstChild){if(g.isBlock(a.firstChild)){for(;!g.isBlock(c.parentNode)&&c.parentNode!==g.getRoot();)c=g.split(c.parentNode,c);g.is(c.parentNode,"td,th")||c.parentNode===g.getRoot()||(c=g.split(c.parentNode,c))}g.replace(a,c)}else g.remove(c)};return{insert:a}}),g("1j",["1h"],function(a){var b={strip_class_attributes:"all",retain_style_properties:"none"},c={strip_class_attributes:"none",retain_style_properties:"valid"},d=function(a,d){if(a&&"string"!=typeof a)return a;switch(a){case"clean":return b;case"merge":return c;default:return d}},e=function(b,c,e){var f=d(b,c);return f=a.extend(f,{base_64_images:e})},f=function(a,d,f){var g=e(a,b,f),h=e(d,c,f),i=h,j=function(a){i=a?g:h},k=function(a){return i[a]};return{setWordContent:j,get:k}};return{create:f}}),g("6c",["1h"],function(a){var b=function(a){return a.specified!==!1||"name"===a.nodeName&&""!==a.value},c=function(a,b){return a&&b?function(c,d){return b(c,a(c,d))}:a||b},d=function(d){var e,f,g=0,h=function(){return e},i=function(){return f()};f=function(){return e={},g=0,a.each(d.attributes,function(a){var c=a.nodeName,d=a.value;b(a)&&null!==d&&void 0!==d&&(e[c]=d,g++)}),void 0===e.style&&d.style.cssText&&(e.style=d.style.cssText,g++),f=h,e};var j,k,l=function(){return f(),g},m=function(a){j||(k=f),j=c(j,a),f=function(){return f=k,o(function(a,b){var c=j(a,b);null===c?(d.removeAttribute(a),delete e[a],g--):c!==b&&("class"===a?d.className=c:d.setAttribute(a,c),e[a]=c)}),f=h,e}},n=function(a){return f()[a]},o=function(b){a.each(f(),function(a,c){b(c,a)})};return{get:n,each:o,filter:m,getAttributes:i,getAttributeCount:l}};return{manager:d}}),g("3w",["6c","1h"],function(a,b,c){var d="startElement",e="endElement",f="text",g="comment",h=a.manager,i=function(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})},j=function(a){return a.replace(/([A-Z])/g,function(a,b){return"-"+b.toLowerCase()})},k=!1,l=function(a,c,d){var e,f,g;a.style.length;g=c||a.getAttribute("style"),void 0!==g&&null!==g&&g.split||(g=a.style.cssText),b.each(g.split(";"),function(a){var c=a.indexOf(":");c>0&&(e=b.trim(a.substring(0,c)),e.toUpperCase()===e&&(e=e.toLowerCase()),e=j(e),f=b.trim(a.substring(c+1)),k||(k=0===e.indexOf("mso-")),d(e,f))}),k||(f=a.style["mso-list"],f&&d("mso-list",f))},m=function(a,c,j){var k,m,n,o,p;switch(a.nodeType){case 1:c?k=e:(k=d,o=h(a),p={},l(a,j,function(a,b){p[a]=b})),m="HTML"!==a.scopeName&&a.scopeName&&a.tagName&&a.tagName.indexOf(":")<=0?(a.scopeName+":"+a.tagName).toUpperCase():a.tagName;break;case 3:k=f,n=a.nodeValue;break;case 8:k=g,n=a.nodeValue;break;default:b.log("WARNING: Unsupported node type encountered: "+a.nodeType)}var q=function(){return o&&o.getAttributes(),a},r=function(){return m},s=function(){return k},t=function(){return n},u=function(){return"Type: "+k+", Tag: "+m+" Text: "+n},v=function(a){return o.get(a.toLowerCase())},w=function(a){k===d&&o.filter(a)},x=function(c){if(s()===d){var e="";b.each(p,function(b,d){var f=c(d,b);null===f?(a.style.removeProperty?a.style.removeProperty(i(d)):a.style.removeAttribute(i(d)),delete p[d]):(e+=d+": "+f+"; ",p[d]=f)}),e=e?e:null,w(function(a,b){return"style"===a?e:b}),a.style.cssText=e}},y=function(){return o.getAttributeCount()},z=function(a){o.each(a)},A=function(a){return p[a]},B=function(a){b.each(p,function(b,c){a(c,b)})},C=function(){return b.ephoxGetComputedStyle(a)},D=function(){return k===f&&/^[\s\u00A0]*$/.test(n)};return{getNode:q,tag:r,type:s,text:t,toString:u,getAttribute:v,filterAttributes:w,filterStyles:x,getAttributeCount:y,attributes:z,getStyle:A,styles:B,getComputedStyle:C,isWhitespace:D}},n=function(a,c,d,e){var f=e.createElement(a),g="";return b.each(c,function(a,b){f.setAttribute(b,a)}),b.each(d,function(a,b){g+=b+":"+a+";",f.style[i(b)]=a}),m(f,!1,""!==g?g:null)},o=function(a,b){return m(b.createElement(a),!0)},p=function(a,b){return m(b.createComment(a),!1)},q=function(a,b){return m(b.createTextNode(a))},r=o("HTML",window.document);return{START_ELEMENT_TYPE:d,END_ELEMENT_TYPE:e,TEXT_TYPE:f,COMMENT_TYPE:g,FINISHED:r,token:m,createStartElement:n,createEndElement:o,createComment:p,createText:q}}),g("2m",["3w"],function(a){var b=function(b){var c=b.createDocumentFragment(),d=c,e=function(a){g(a),c=a},f=function(){c=c.parentNode},g=function(a){c.appendChild(a)},h=function(c){var d=function(a){var b=a.getNode().cloneNode(!1);e(b)},h=function(a,c){var d=b.createTextNode(a.text());g(d)};switch(c.type()){case a.START_ELEMENT_TYPE:d(c);break;case a.TEXT_TYPE:h(c);break;case a.END_ELEMENT_TYPE:f();break;case a.COMMENT_TYPE:break;default:throw{message:"Unsupported token type: "+c.type()}}};return{dom:d,receive:h}};return{create:b}}),g("2n",["3w"],function(a){var b=function(b,c){var d;c=c||window.document,d=c.createElement("div"),c.body.appendChild(d),d.style.position="absolute",d.style.left="-10000px",d.innerHTML=b,nextNode=d.firstChild||a.FINISHED;var e=[];endNode=!1;var f=function(b,c){return b===a.FINISHED?b:b?a.token(b,c):void 0},g=function(){var b=nextNode,g=endNode;return!endNode&&nextNode.firstChild?(e.push(nextNode),nextNode=nextNode.firstChild):endNode||1!==nextNode.nodeType?nextNode.nextSibling?(nextNode=nextNode.nextSibling,endNode=!1):(nextNode=e.pop(),endNode=!0):endNode=!0,b===a.FINISHED||nextNode||(c.body.removeChild(d),nextNode=a.FINISHED),f(b,g)},h=function(){return void 0!==nextNode};return{hasNext:h,next:g}};return{tokenize:b}}),g("3x",["3w","1h"],function(a,b){var c=function(c,d){var e=function(e,f,g){var h,i,j,k=!1,l=function(){d&&d(w),k=!1,i=[],j=[]},m=function(a){b.each(a,function(a){e.receive(a)})},n=function(a){k?j.push(a):e.receive(a)},o=function(b){d&&i.push(b),c(w,b),b===a.FINISHED&&r()},p=function(){k=!0},q=function(){m(i),l()},r=function(){u(),m(j),l()},s=function(a){h=h||[],h.push(a)},t=function(){return h&&h.length>0},u=function(){b.each(h,function(a){n(a)}),v()},v=function(){h=[]},w={document:g||window.document,settings:f||{},emit:n,receive:o,startTransaction:p,rollback:q,commit:r,defer:s,hasDeferred:t,emitDeferred:u,dropDeferred:v};return l(),w};return e},d=function(a){return c(function(c,d){d.filterAttributes(b.bind(a,c)),c.emit(d)})};return{createFilter:c,createAttributeFilter:d}}),g("2o",["3x","3w"],function(a,b){var c=/^(P|H[1-6]|T[DH]|LI|DIV|BLOCKQUOTE|PRE|ADDRESS|FIELDSET|DD|DT|CENTER)$/,d=function(a){return c.test(a.tag())},e=function(){return null},f=!1;return a.createFilter(function(a,c){var g=function(){f||(a.emit(b.createStartElement("P",{},{},a.document)),f=!0)};switch(c.type()){case b.TEXT_TYPE:g(),a.emit(c);break;case b.END_ELEMENT_TYPE:f&&(d(c)||c===b.FINISHED)?(a.emit(b.createEndElement("P",a.document)),f=!1):"BR"===c.tag()&&a.emit(c);break;case b.START_ELEMENT_TYPE:"BR"===c.tag()?(c.filterAttributes(e),c.filterStyles(e),a.emit(c)):"IMG"===c.tag()&&c.getAttribute("alt")&&(g(),a.emit(b.createText(c.getAttribute("alt"),a.document)))}c===b.FINISHED&&a.emit(c)})}),g("3y",["3w"],function(a){var b=function(){if(navigator.userAgent.indexOf("Gecko")>0&&navigator.userAgent.indexOf("WebKit")<0)return!1;var b=document.createElement("div");try{b.innerHTML='<p style="mso-list: Ignore;">&nbsp;</p>'}catch(c){return!1}return"Ignore"===a.token(b.firstChild).getStyle("mso-list")},c=b(),d=function(a){return"A"===a.tag()||"SPAN"===a.tag()},e=function(a){var b=a.getStyle("mso-list");return b&&"skip"!==b},f=function(b,c){return b.type()===a.START_ELEMENT_TYPE?0===b.getAttributeCount()||c&&1===b.getAttributeCount()&&null!==b.getAttribute("style")&&void 0!==b.getAttribute("style"):b.type()===a.END_ELEMENT_TYPE};return{hasNoAttributes:f,supportsCustomStyles:c,spanOrA:d,hasMsoListStyle:e}}),g("42",["3w","1h"],function(a,b){var c=[{regex:/^\(?[dc][\.\)]$/,type:{tag:"OL",type:"lower-alpha"}},{regex:/^\(?[DC][\.\)]$/,type:{tag:"OL",type:"upper-alpha"}},{regex:/^\(?M*(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})[\.\)]$/,type:{tag:"OL",type:"upper-roman"}},{regex:/^\(?m*(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})[\.\)]$/,type:{tag:"OL",type:"lower-roman"}},{regex:/^\(?[0-9]+[\.\)]$/,type:{tag:"OL"}},{regex:/^([0-9]+\.)*[0-9]+\.?$/,type:{tag:"OL",variant:"outline"}},{regex:/^\(?[a-z]+[\.\)]$/,type:{tag:"OL",type:"lower-alpha"}},{regex:/^\(?[A-Z]+[\.\)]$/,type:{tag:"OL",type:"upper-alpha"}}],d={"\u2022":{tag:"UL",type:"disc"},"\xb7":{tag:"UL",type:"disc"},"\xa7":{tag:"UL",type:"square"}},e={o:{tag:"UL",type:"circle"},"-":{tag:"UL",type:"disc"},"\u25cf":{tag:"UL",type:"disc"}},f=function(a,b){var c={tag:a.tag,type:a.type,variant:b};return a.start&&(c.start=a.start),a.type||delete c.type,c},g=function(a,g,i){var j,k,l,m=null;return a&&(j=a.text,k=a.symbolFont),j=b.trim(j),m=e[j],m?m=f(m,j):k?(m=d[j],m=m?f(m,j):{tag:"UL",variant:j}):(b.each(c,function(a){if(a.regex.test(j)){if(g&&h(a.type,g,!0))return m=a.type,m.start=parseInt(j),!1;m||(m=a.type),m.start=parseInt(j)}}),m&&!m.variant&&(l="("===j.charAt(0)?"()":")"===j.charAt(j.length-1)?")":".",m=f(m,l))),m&&"OL"===m.tag&&i&&("P"!==i.tag()||/^MsoHeading/.test(i.getAttribute("class")))&&(m=null),m},h=function(a,b,c){return a===b||a&&b&&a.tag===b.tag&&a.type===b.type&&(c||a.variant===b.variant)},i=function(b,c){return b.type()==a.START_ELEMENT_TYPE&&(font=b.getStyle("font-family"),font?c="Wingdings"===font||"Symbol"===font:/^(P|H[1-6]|DIV)$/.test(b.tag())&&(c=!1)),c};return{guessListType:g,eqListType:h,checkFont:i}}),g("3z",["3w","42","1h"],function(a,b,c){var d=function(d,e){var f,g,h,i=!1,j=function(a){var b=a.style.fontFamily;b&&(i="Wingdings"===b||"Symbol"===b)};if(d.type()===a.START_ELEMENT_TYPE&&e.openedTag&&"SPAN"===d.tag()){for(f=e.openedTag.getNode(),j(f),f.childNodes.length>1&&"A"===f.firstChild.tagName&&""===f.firstChild.textContent&&(f=f.childNodes[1]);f.firstChild&&("SPAN"===f.firstChild.tagName||"A"===f.firstChild.tagName);)f=f.firstChild,j(f);if(f=f.firstChild,!f||3!==f.nodeType)return f&&"IMG"===f.tagName;if(g=f.value,c.trim(g)||(f=f.parentNode.nextSibling,g=f?f.value:""),!f||c.trim(f.parentNode.textContent)!=g)return!1;if(h=b.guessListType({text:g,symbolFont:i},null,e.originalToken))return f.nextSibling&&"SPAN"===f.nextSibling.tagName&&/^[\u00A0\s]/.test(f.nextSibling.firstChild.value)&&("P"===e.openedTag.tag()||"UL"===h.tag)}return!1},e=function(a,b){var c,d=0;for(c=a.parentNode;null!==c&&void 0!==c&&c!==b.parentNode;)d+=c.offsetLeft,c=c.offsetParent;return d},f=function(a){var b={};return function(c,d){var e,f=c+","+d;return b.hasOwnProperty(f)?b[f]:(e=a.call(null,c,d),b[f]=e,e)}},g=function(a){var b=a.indexOf(".");if(b>=0&&c.trim(a.substring(b+1))===className)return match=results[2],!1},h=f(function(a,b){var d,e,f,h,i=/([^{]+){([^}]+)}/g;for(i.lastIndex=0;null!==(d=i.exec(a))&&!e;)c.each(d[1].split(","),g(selector));return!!e&&(f=document.createElement("p"),f.setAttribute("style",e),h=c.ephoxGetComputedStyle(f),!!h&&""+h.marginLeft)}),i=function(){var a,b,c=function(c,d,f,g){var i,j,k=1;return g&&/^([0-9]+\.)+[0-9]+\.?$/.test(g.text)?g.text.replace(/([0-9]+|\.$)/g,"").length+1:(i=b||parseInt(h(f,d.getAttribute("class"))),j=e(c.getNode(),d.getNode()),i?a?j+=a:0===j&&(a=i,j+=i):i=48,b=i=Math.min(j,i),k=Math.max(1,Math.floor(j/i))||1)};return{guessIndentLevel:c}},j=function(){var b=!1,c="",d=function(d){return b&&d.type()===a.TEXT_TYPE?(c+=d.text(),!0):d.type()===a.START_ELEMENT_TYPE&&"STYLE"===d.tag()?(b=!0,!0):d.type()===a.END_ELEMENT_TYPE&&"STYLE"===d.tag()&&(b=!1,!0)};return{check:d}};return{isListWithoutCommentsOrStyles:d,indentGuesser:i,styles:j}}),g("40",["3w","42"],function(a,b){var c=["disc","circle","square"],d=function(a,b){return"UL"===a.tag&&c[b-1]===a.type&&(a={tag:"UL"}),a};return function(c,e){var f,g=[],h=[],i=0,j=function(b,d){var h={},j={};i++,d&&b.type&&(h={"list-style-type":b.type}),b.start&&b.start>1&&(j={start:b.start}),g.push(b),c.emit(a.createStartElement(b.tag,j,h,e)),f=b},k=function(){c.emit(a.createEndElement(g.pop().tag,e)),i--,f=g[g.length-1]},l=function(){for(;i>0;)m(),k();c.commit()},m=function(){var b=h?h.pop():"P";"P"!=b&&c.emit(a.createEndElement(b,e)),c.emit(a.createEndElement("LI",e))},n=function(d,g,i){var l={};if(d){var m=d.getStyle("margin-left");void 0!==m&&(l["margin-left"]=m)}else l["list-style-type"]="none";f&&!b.eqListType(f,g)&&(k(),i&&(c.emit(a.createStartElement("P",{},{},e)),c.emit(a.createText("\xa0",e)),c.emit(a.createEndElement("P",e))),j(g,!0)),c.emit(a.createStartElement("LI",{},l,e)),d&&"P"!=d.tag()?(h.push(d.tag()),d.filterStyles(function(){return null}),c.emit(d)):h.push("P")},o=function(b,f,g,l){if(g){for(i||(i=0);i>b;)m(),k();if(g=d(g,b),i==b)m(),n(f,g,l);else for(b>1&&h.length>0&&"P"!==h[h.length-1]&&(c.emit(a.createEndElement(h[h.length-1],e)),h[h.length-1]="P");i<b;)j(g,i==b-1),n(i==b?f:void 0,g)}},p=function(){return i},q=function(){return f};return{openList:j,closelist:k,closeAllLists:l,closeItem:m,openLI:n,openItem:o,getCurrentListType:q,getCurrentLevel:p}}}),g("41",["3y","3w","3z","42","1h"],function(a,b,c,d,e){var f=function(a,b){e.log("Unexpected token in list conversion: "+b.toString()),a.rollback()},g=function(a,b,c){return b==c?a:null},h=function(c,d,f){f.type()===b.TEXT_TYPE&&""===e.trim(f.text())?c.defer(f):d.skippedPara||f.type()!==b.START_ELEMENT_TYPE||"P"!==f.tag()||a.hasMsoListStyle(f)?j(c,d,f):(d.openedTag=f,c.defer(f),d.nextFilter=i)},i=function(d,e,f){f.type()!==b.START_ELEMENT_TYPE||"SPAN"!==f.tag()||0!==e.spanCount.length||!a.supportsCustomStyles&&c.isListWithoutCommentsOrStyles(f,e)||a.hasMsoListStyle(f)?f.type()===b.END_ELEMENT_TYPE?"SPAN"===f.tag()?(d.defer(f),e.spanCount.pop()):"P"===f.tag()?(d.defer(f),e.skippedPara=!0,e.openedTag=null,e.nextFilter=h):(e.nextFilter=j,e.nextFilter(d,e,f)):f.isWhitespace()?d.defer(f):(e.nextFilter=j,e.nextFilter(d,e,f)):(d.defer(f),e.spanCount.push(f))},j=function(d,e,f){
-var g=function(){e.emitter.closeAllLists(),d.emitDeferred(),e.openedTag=null,d.emit(f),e.nextFilter=j};if(f.type()===b.START_ELEMENT_TYPE&&a.hasMsoListStyle(f)&&"LI"!==f.tag()){var h=(f.getStyle("mso-list"),/ level([0-9]+)/.exec(f.getStyle("mso-list")));h&&h[1]?(e.itemLevel=parseInt(h[1],10)+e.styleLevelAdjust,e.nextFilter===j?d.emitDeferred():d.dropDeferred(),e.nextFilter=l,d.startTransaction(),e.originalToken=f,e.commentMode=!1):g()}else!a.supportsCustomStyles&&(f.type()===b.COMMENT_TYPE&&"[if !supportLists]"===f.text()||c.isListWithoutCommentsOrStyles(f,d))?(f.type()===b.START_ELEMENT_TYPE&&"SPAN"===f.tag()&&e.spanCount.push(f),e.nextFilter=l,d.startTransaction(),e.originalToken=e.openedTag,e.commentMode=!0,e.openedTag=null,d.dropDeferred()):f.type()===b.END_ELEMENT_TYPE&&a.spanOrA(f)?(d.defer(f),e.spanCount.pop()):f.type()===b.START_ELEMENT_TYPE?a.spanOrA(f)?(d.defer(f),e.spanCount.push(f)):(e.openedTag&&(e.emitter.closeAllLists(),d.emitDeferred()),e.openedTag=f,d.defer(f)):g()},k=function(a,c,d){d.type()===b.END_ELEMENT_TYPE&&c.originalToken.tag()===d.tag()&&(c.nextFilter=h,c.styleLevelAdjust=-1),a.emit(d)},l=function(a,c,d){if(d.type()==b.START_ELEMENT_TYPE&&"Ignore"===d.getStyle("mso-list")&&(c.nextFilter=m),d.type()===b.START_ELEMENT_TYPE&&"SPAN"===d.tag())c.spanCount.push(d),(c.commentMode&&""===d.getAttribute("style")||null===d.getAttribute("style"))&&(c.nextFilter=m);else if("A"===d.tag())d.type()===b.START_ELEMENT_TYPE?c.spanCount.push(d):c.spanCount.pop();else if(d.type()===b.TEXT_TYPE)if(c.commentMode)c.nextFilter=m,c.nextFilter(a,c,d);else{var g=c.originalToken,h=c.spanCount;c.emitter.closeAllLists(),a.emit(g),e.each(h,e.bind(a.emit,a)),a.emit(d),a.commit(),c.originalToken=g,c.nextFilter=k}else(c.commentMode||d.type()!==b.COMMENT_TYPE)&&f(a,d)},m=function(c,d,e){e.type()===b.TEXT_TYPE?e.isWhitespace()||(d.nextFilter=n,d.bulletInfo={text:e.text(),symbolFont:d.symbolFont}):a.spanOrA(e)?e.type()===b.START_ELEMENT_TYPE?d.spanCount.push(e):d.spanCount.pop():e.type()===b.START_ELEMENT_TYPE&&"IMG"===e.tag()?(d.nextFilter=n,d.bulletInfo={text:"\u2202",symbolFont:!0}):f(c,e)},n=function(c,d,e){e.type()===b.START_ELEMENT_TYPE&&a.spanOrA(e)?(d.spanCount.push(e),d.nextFilter=o):e.type()===b.END_ELEMENT_TYPE&&a.spanOrA(e)?(d.spanCount.pop(),d.nextFilter=p):e.type()===b.END_ELEMENT_TYPE&&"IMG"===e.tag()||f(c,e)},o=function(c,d,e){e.type()===b.END_ELEMENT_TYPE&&(a.spanOrA(e)&&d.spanCount.pop(),d.nextFilter=p)},p=function(c,h,i){var j=function(a){if(h.nextFilter=q,h.commentMode&&(h.itemLevel=h.indentGuesser.guessIndentLevel(i,h.originalToken,h.styles.styles,h.bulletInfo)),h.listType=d.guessListType(h.bulletInfo,g(h.emitter.getCurrentListType(),h.emitter.getCurrentLevel(),h.itemLevel),h.originalToken),h.listType){for(h.emitter.openItem(h.itemLevel,h.originalToken,h.listType,h.skippedPara),c.emitDeferred();h.spanCount.length>0;)c.emit(h.spanCount.shift());a&&c.emit(i)}else e.log("Unknown list type: "+h.bulletInfo.text+" Symbol font? "+h.bulletInfo.symbolFont),c.rollback()};i.type()===b.TEXT_TYPE||i.type()===b.START_ELEMENT_TYPE?j(!0):i.type()===b.COMMENT_TYPE?j("[endif]"!==i.text()):i.type()===b.END_ELEMENT_TYPE?a.spanOrA(i)&&h.spanCount.pop():f(c,i)},q=function(a,c,d){d.type()===b.END_ELEMENT_TYPE&&d.tag()===c.originalToken.tag()?(c.nextFilter=h,c.skippedPara=!1):a.emit(d)},r=j;return{initial:r}}),g("2p",["3x","3y","3w","3z","40","41","42","1h"],function(a,b,c,d,e,f,g,h){var i={},j=function(a){i.nextFilter=f.initial,i.itemLevel=0,i.originalToken=null,i.commentMode=!1,i.openedTag=null,i.symbolFont=!1,i.listType=null,i.indentGuesser=d.indentGuesser(),i.emitter=e(a,a.document),i.styles=d.styles(),i.spanCount=[],i.skippedPara=!1,i.styleLevelAdjust=0,i.bulletInfo=void 0};j({});var k=function(a){j(a)},l=function(a,b){i.styles.check(b)||(i.symbolFont=g.checkFont(b,i.symbolFont),i.nextFilter(a,i,b))};return a.createFilter(l,k)}),g("2q",["1h"],function(a){var b=function(a){var b=a,c=65279===b.charCodeAt(b.length-1);return c?b.substring(0,b.length-1):a},c=function(a){return/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(a)?a.replace(/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"):a},d=function(a){return a.replace(/<br><br>/g,"<BR><BR>")},e=function(a){return a.replace(/<br>/g," ")},f=function(a){return a.replace(/<BR><BR>/g,"<br>")},g=[b],h=tinymce.isIE&&document.documentMode>=9?[f,e,d,c].concat(g):g,i=a.compose(h);return{all:i,textOnly:b}}),g("43",["3x"],function(a){var b=/^(mso-.*|tab-stops|tab-interval|language|text-underline|text-effect|text-line-through|font-color|horiz-align|list-image-[0-9]+|separator-image|table-border-color-(dark|light)|vert-align|vnd\..*)$/,c=function(a){return function(c,d){var e=!1;switch(a){case"all":case"*":e=!0;break;case"valid":e=!b.test(c);break;case void 0:case"none":e="list-style-type"===c;break;default:e=(","+a+",").indexOf(","+c+",")>=0}return e?d:null}};return a.createFilter(function(a,b){var d=a.settings.get("retain_style_properties");b.filterStyles(c(d)),a.emit(b)})}),g("44",["3x","3w"],function(a,b){return a.createFilter(function(a,c){a.seenList?a.emit(c):a.inferring?("LI"===c.tag()&&(c.type()===b.START_ELEMENT_TYPE?a.inferring++:(a.inferring--,a.inferring||(a.needsClosing=!0))),a.emit(c)):("OL"===c.tag()||"UL"===c.tag()?a.seenList=!0:"LI"===c.tag()&&(a.inferring=1,a.needsClosing||a.emit(b.createStartElement("UL",{},{},a.document))),!a.needsClosing||a.inferring||c.isWhitespace()||(a.needsClosing=!1,a.emit(b.createEndElement("UL",a.document))),a.emit(c))})}),g("45",["3x"],function(a){return a.createAttributeFilter(function(a,b){return"name"===a||"id"===a?null:b})}),g("46",["3x"],function(a){return a.createAttributeFilter(function(a,b){var c;if("class"===a)switch(c=this.settings.get("strip_class_attributes")){case"mso":return 0===b.indexOf("Mso")?null:b;case"none":return b;default:return null}return b})}),g("47",["3x","3y","3w"],function(a,b,c){var d=[],e=[],f=!1,g=function(a,b){var e,f,g=1;for(e=b+1;e<a;e++)if(f=d[e],f&&"SPAN"===f.tag())if(f.type()===c.START_ELEMENT_TYPE)g++;else if(f.type()===c.END_ELEMENT_TYPE&&(g--,0===g))return void(d[e]=null)},h=function(a){if(f){var h,i,j=d.length;for(i=0;i<j;i++)h=d[i],h&&(h.type()===c.START_ELEMENT_TYPE&&"SPAN"===h.tag()&&b.hasNoAttributes(h)?g(j,i):a.emit(h))}d=[],e=[],f=!1},i=function(a,b){if(d.push(b),e=e||[],b.type()===c.START_ELEMENT_TYPE)e.push(b);else if(b.type()===c.END_ELEMENT_TYPE&&(e.pop(),0===e.length))return void h(a,b)};return a.createFilter(function(a,e){var g=",FONT,EM,STRONG,SAMP,ACRONYM,CITE,CODE,DFN,KBD,TT,B,I,U,S,SUB,SUP,INS,DEL,VAR,SPAN,";d=d||[];var h=function(a){return!(g.indexOf(","+a.tag()+",")>=0&&b.hasNoAttributes(a,!0))};0===d.length?e.type()===c.START_ELEMENT_TYPE?h(e)?a.emit(e):i(a,e):a.emit(e):(f||(f=h(e)),i(a,e))})}),g("48",["3x"],function(a){return a.createAttributeFilter(function(a,b){return"style"===a&&""===b?null:b})}),g("49",["3x"],function(a){return a.createAttributeFilter(function(a,b){return"lang"===a?null:b})}),g("4a",["3x","3w"],function(a,b){return a.createFilter(function(a,c){if("IMG"===c.tag()){if(c.type()===b.END_ELEMENT_TYPE&&a.skipEnd)return void(a.skipEnd=!1);if(c.type()===b.START_ELEMENT_TYPE){if(/^file:/.test(c.getAttribute("src")))return void(a.skipEnd=!0);if(a.settings.get("base_64_images")&&/^data:image\/.*;base64/.test(c.getAttribute("src")))return void(a.skipEnd=!0)}}a.emit(c)})}),g("4b",["3x"],function(a){return a.createFilter(function(a,b){"META"!==b.tag()&&"LINK"!==b.tag()&&a.emit(b)})}),g("4c",["3x","3y","3w"],function(a,b,c){var d=function(a){return!b.hasNoAttributes(a)&&!/^OLE_LINK/.test(a.getAttribute("name"))},e=[];return a.createFilter(function(a,b){var f;b.type()===c.START_ELEMENT_TYPE&&"A"===b.tag()?(e.push(b),d(b)&&a.defer(b)):b.type()===c.END_ELEMENT_TYPE&&"A"===b.tag()?(f=e.pop(),d(f)&&a.defer(b),0===e.length&&a.emitDeferred()):a.hasDeferred()?a.defer(b):a.emit(b)})}),g("4d",["3x","3w"],function(a,b){var c=!1;return a.createFilter(function(a,d){"SCRIPT"===d.tag()?c=d.type()===b.START_ELEMENT_TYPE:c||(d.filterAttributes(function(a,b){return/^on/.test(a)||"language"===a?null:b}),a.emit(d))})}),g("2r",["43","44","45","46","47","48","49","4a","4b","4c","4d"],function(a,b,c,d,e,f,g,h,i,j,k){return[k,c,h,a,g,f,d,j,e,i,b]}),g("4e",["3x"],function(a){return a.createFilter(function(a,b){b.filterAttributes(function(a,c){return"align"===a?null:"UL"!==b.tag()&&"OL"!==b.tag()||"type"!==a?c:null}),a.emit(b)})}),g("4f",["3x"],function(a){return a.createAttributeFilter(function(a,b){return/^xmlns(:|$)/.test(a)?null:b})}),g("4g",["3x"],function(a){return a.createFilter(function(a,b){b.tag&&/^([OVWXP]|U[0-9]+|ST[0-9]+):/.test(b.tag())||a.emit(b)})}),g("4h",["3x"],function(a){return a.createAttributeFilter(function(a,b){return"href"===a&&(b.indexOf("#_Toc")>=0||b.indexOf("#_mso")>=0)?null:b})}),g("4i",["3x"],function(a){return a.createAttributeFilter(function(a,b){return/^v:/.test(a)?null:b})}),g("2s",["4e","4f","4g","4h","4i","2p"],function(a,b,c,d,e,f){return[c,f,d,e,b,a]}),g("1k",["2m","2n","2o","2p","2q","2r","2s"],function(a,b,c,d,e,f,g){var h=function(a,b,c,d){var e,f=b;for(e=a.length-1;e>=0;e--)f=a[e](f,c,d);return f},i=function(c,d,e,f){var g=a.create(e),i=b.tokenize(c,e);for(pipeline=h(f,g,d,e);i.hasNext();)pipeline.receive(i.next());return g.dom},j=function(a,b,c){var d=e.all(a),h=l(d);b.setWordContent(h);var j=f;return h&&(j=g.concat(f)),i(d,b,c,j)},k=function(a,b,d){var f=e.textOnly(a);return i(f,b,d,[c])},l=function(a){return a.indexOf("<o:p>")>=0||a.indexOf("p.MsoNormal, li.MsoNormal, div.MsoNormal")>=0||a.indexOf("MsoListParagraphCxSpFirst")>=0||a.indexOf("<w:WordDocument>")>=0};return{filter:j,filterPlainText:k,isWordContent:l}}),g("f",["1i","1j","1k","x"],function(a,b,c,d){return function(e,f){var g=function(g){var h=function(d){var f={content:g};e.fire("PastePreProcess",f);var h=b.create(d||e.settings.powerpaste_word_import,d||e.settings.powerpaste_html_import,!0),i=c.filter(f.content,h,e.getDoc());e.fire("PastePostProcess",i),e.undoManager.transact(function(){a.insert(i,e)})},i=function(a){return"clean"===a||"merge"===a},j=function(){var a,b=function(){a.close(),h("clean")},c=function(){a.close(),h("merge")},g=[{text:f("cement.dialog.paste.clean"),onclick:b},{text:f("cement.dialog.paste.merge"),onclick:c}],i={title:f("cement.dialog.paste.title"),spacing:10,padding:10,items:[{type:"container",html:f("cement.dialog.paste.instructions")}],buttons:g};a=e.windowManager.open(i),d(function(){a&&a.getEl().focus()},1)};c.isWordContent(g)&&!i(e.settings.powerpaste_word_import)?j():i(e.settings.powerpaste_html_import)?h():j()};return{showDialog:g}}}),g("4",["d","e","f"],function(a,b,c){return function(d,e,f){var g,h,i=this,j=c(d,a.translate),k=function(a){return function(b){a(b)}};g=b.getOnPasteFunction(d,j.showDialog,e),d.on("paste",k(g)),h=b.getOnKeyDownFunction(d,j.showDialog,e),d.on("keydown",k(h)),d.addCommand("mceInsertClipboardContent",function(a,b){j.showDialog(b.content||b)}),d.settings.paste_preprocess&&d.on("PastePreProcess",function(a){d.settings.paste_preprocess.call(i,i,a)})}}),g("1s",[],function(){var a=0,b=function(b){var c=new Date,d=c.getTime(),e=Math.floor(1e9*Math.random());return a++,b+"_"+e+a+String(d)};return{generate:b}}),g("1n",["g","1s","2t","h","o","2u","2b","j"],function(a,b,c,d,e,f,g,h){var i=c.detect(),j=function(a){var b=g.createObjectURL(a);return k(a,b)},k=function(a,c){return e.nu(function(e){var g=f();g.onload=function(f){var g=b.generate("image"),h=f.target,i=d.blob(g,a,c,h);e(i)},g.readAsDataURL(a)})},l=function(a){return 0===a.length?e.pure([]):e.mapM(a,j)},m=function(a){return a.raw().target.files||a.raw().dataTransfer.files},n=function(b){return 1===b.length&&a.contains(b,"Files")},o=function(b){return!a.contains(b,"text/_moz_htmlcontext")},p=function(b){return a.contains(b,"Files")},q=function(a){return!0},r=function(){return i.browser.isChrome()||i.browser.isSafari()||i.browser.isOpera()?p:i.browser.isFirefox()?o:i.browser.isIE()?n:q},s=r(),t=function(c){var f=a.map(c,function(a){var c=b.generate("image");return d.url(c,h.get(a,"src"),a)});return e.pure(f)};return{multiple:l,toFiles:m,isFiles:s,fromImages:t,single:j,singleWithUrl:k}}),g("i",["1n"],function(a){var b=function(b){return a.multiple(b)},c=function(b){return a.single(b)},d=function(b,c){return a.singleWithUrl(b,c)};return{multiple:b,single:c,singleWithUrl:d}}),g("5",["g","h","i","j","k","d","f","2"],function(a,b,c,d,e,f,g,h){return function(i,j,k,l){var m,n=/^image\/(jpe?g|png|gif|bmp)$/i;i.on("dragstart dragend",function(a){m="dragstart"===a.type}),i.on("dragover dragend dragleave",function(a){a.preventDefault()});var o=function(a){var b={};if(a){if(a.getData){var c=a.getData("Text");c&&c.length>0&&(b["text/plain"]=c)}if(a.types)for(var d=0;d<a.types.length;d++){var e=a.types[d];b[e]=a.getData(e)}}return b},p=function(a,b){return b in a&&a[b].length>0},q=function(a){return!r(a)&&(p(a,"text/html")||p(a,"text/plain"))},r=function(a){var b=a["text/plain"];return!!b&&0===b.indexOf("file://")},s=function(b){var c=b.target.files||b.dataTransfer.files;return a.filter(c,function(a){return n.test(a.type)})},t=function(c){return a.map(c,function(a){var c=e.fromTag("img"),f=b.cata(a,l.getLocalURL,function(a,b,c){return b});return d.set(c,"src",f),c.dom().outerHTML}).join("")},u=function(a){c.multiple(a).get(function(a){var b=t(a);i.insertContent(b,{merge:i.settings.paste_merge_formats!==!1}),l.uploadImages(a)})};i.on("drop",function(a){if(!m){if(h.dom.RangeUtils&&h.dom.RangeUtils.getCaretRangeFromPoint){var b=h.dom.RangeUtils.getCaretRangeFromPoint(a.clientX,a.clientY,i.getDoc());b&&i.selection.setRng(b)}var c=s(a);if(c.length>0)return u(c),void a.preventDefault();var d=o(a.dataTransfer);if(q(d)){var e=g(i,f.translate);e.showDialog(d["text/html"]||d["text/plain"]),a.preventDefault()}}})}}),g("4r",["g","2c","1f"],function(a,b,c){var d=["officeStyles","htmlStyles","isWord","proxyBin","isInternal","backgroundAssets"],e=function(b,c){var e={};return a.each(d,function(a){var d=c[a]().or(b[a]());d.each(function(b){e[a]=b})}),f(e)},f=b.immutableBag([],d);return{nu:f,merge:e}}),g("2w",["n","1m"],function(a,b){var c=b.generate([{error:["message"]},{paste:["elements","assets","correlated"]},{cancel:[]},{incomplete:["elements","assets","correlated","message"]}]),d=function(a,b,c,d,e){return a.fold(b,c,d,e)},e=function(b,e){return d(b,a.none,a.none,a.none,function(b,f,g,h){return d(e,a.none,function(b,d,e){return a.some(c.incomplete(b,d,e,h))},a.none,a.none)}).getOr(e)};return{error:c.error,paste:c.paste,cancel:c.cancel,incomplete:c.incomplete,cata:d,carry:e}}),g("4q",["4r","2w","1v","2c"],function(a,b,c,d){var e=d.immutableBag(["response","bundle"],[]),f=function(a){return l(function(b){var c=e(a);b(c)})},g=function(a,b){a(e(b))},h=function(a){return f({response:a.response(),bundle:a.bundle()})},i=function(c){return f({response:b.error(c),bundle:a.nu({})})},j=function(){return f({response:b.cancel(),bundle:a.nu({})})},k=function(){return f({response:b.paste([],[],[]),bundle:a.nu({})})},l=function(a){var b=function(b){a(b)};return c(l,b)};return{call:g,sync:l,pure:f,pass:h,done:e,error:i,initial:k,cancel:j}}),g("23",["n"],function(a){var b=function(a){for(var b=[],c=function(a){b.push(a)},d=0;d<a.length;d++)a[d].each(c);return b},c=function(b,c){for(var d=0;d<b.length;d++){var e=c(b[d],d);if(e.isSome())return e}return a.none()},d=function(b,c){for(var d=[],e=0;e<b.length;e++){var f=b[e];if(!f.isSome())return a.none();d.push(f.getOrDie())}return a.some(c.apply(null,d))};return{cat:b,findMap:c,liftN:d}}),g("2v",["4q","4r","2w","g","p","23","2c"],function(a,b,c,d,e,f,g){var h=g.immutable("steps","input","label","capture"),i=function(a,b){return f.findMap(a,function(a){return a.getAvailable(b).map(function(b){return h(a.steps(),b,a.label(),a.capture())})})},j=function(a,b,c){var d=i(a,c);return d.getOrThunk(function(){var a=b.getAvailable(c);return h(b.steps(),a,b.label(),b.capture())})},k=function(d,f){var g=e.curry(a.pass,d),h=function(){return f().map(function(e){var f=b.merge(d.bundle(),e.bundle()),g=c.carry(d.response(),e.response());return a.done({response:g,bundle:f})})};return c.cata(d.response(),g,h,g,h)},l=function(b,c){var e=d.foldl(b,function(a,b){return a.bind(function(a){var d=function(){return b(c,a)};return k(a,d)})},a.initial());return e.map(function(a){return a.response()})};return{choose:j,run:l}}),g("4s",[],function(){var a=function(){var a=!1,b=function(){return a},c=function(){a=!0},d=function(){a=!1};return{isBlocked:b,block:c,unblock:d}};return{create:a}}),g("4t",[],function(){var a=function(a,b){return{control:a,instance:b}};return{create:a}}),g("2x",["4s","4t"],function(a,b){var c=function(c){var d=a.create(),e=function(){d.isBlocked()||c.apply(null,arguments)};return b.create(d,e)};return{tap:c}}),g("2y",["2t","p","x"],function(a,b,c){var d=a.detect(),e=function(a,b,c){b.control.block(),a.dom().execCommand("paste"),c(),b.control.unblock()},f=function(a,b,d){c(d,1)},g=d.browser.isIE()&&d.browser.version.major<=10,h=g?e:f,i=function(a,b,c){return h(a,b,c)};return{willBlock:b.constant(g),run:i}}),g("1o",["2v","2w","g","p","2x","21","22","2y"],function(a,b,c,d,e,f,g,h){return function(i,j){var k=g.create({cancel:f([]),error:f(["message"]),insert:f(["elements","assets","correlated"])}),l=e.tap(function(d){h.willBlock()&&(l.control.block(),d.preventDefault());var e=a.choose(i,j,d);e.capture()&&d.preventDefault();var f=c.map(e.steps(),function(a){return a(l.control)}),g=a.run(f,e.input());g.get(function(a){b.cata(a,function(a){k.trigger.error(a)},function(a,b,c){k.trigger.insert(a,b,c)},function(){k.trigger.cancel()},function(a,b,c,d){k.trigger.insert(a,b,c),k.trigger.error(d)})})});return{paste:l.instance,isBlocked:l.control.isBlocked,destroy:d.noop,events:k.registry}}}),g("2z",["p"],function(a){var b=function(a){return function(b){return function(c,d,e){return b.block(),a(c,d,e).map(function(a){return b.unblock(),a})}}},c=function(b){return a.constant(b)};return{blocking:b,normal:c}}),g("4u",["68","i","o","2b","n"],function(a,b,c,d,e){var f=function(a){return void 0!==a.convertURL?a.convertURL:void 0!==a.msConvertURL?a.msConvertURL:void 0},g=function(g){var h=a.resolve("window.clipboardData.files"),i=f(g);if(void 0!==h&&void 0!==i&&h.length>0){var j=c.mapM(h,function(a){var c=d.createObjectURL(a);return i.apply(g,[a,"specified",c]),b.singleWithUrl(a,c)});return e.some(j)}return e.none()};return{convert:g}}),g("30",["4u","o","p","n"],function(a,b,c,d){var e=function(){var c=d.none(),e=function(b){c=a.convert(b)},f=function(a){return c.fold(function(){return b.nu(function(a){a([])})},function(a){return a}).get(a)},g=function(){c=d.none()};return{convert:e,listen:f,clear:g}},f=function(){return{convert:d.none,listen:function(a){a([])},clear:c.noop}};return{background:e,ignore:f}}),h("4v",RegExp),g("31",["n","23","4v"],function(a,b,c){var d=function(a){return void 0!==a&&void 0!==a.types&&null!==a.types},e=function(a,c){return b.findMap(a,function(a){return f(c,a)})},f=function(d,e){var f=new c(e,"i");return b.findMap(d,function(b){return null!==b.match(f)?a.some({type:b,flavor:e}):a.none()})};return{isValidData:d,getPreferredFlavor:e,getFlavor:f}}),g("4x",["1l","1m"],function(a,b){var c=b.generate([{none:[]},{error:["message "]},{blob:["blob"]}]),d=function(a,b,c,d){return a.fold(b,c,d)};return a.merge(c,{cata:d})}),g("78",["3p"],function(a){return function(b,c){var d=a.getOrDie("Blob");return new d(b,c)}}),g("79",["3p"],function(a){return function(b){var c=a.getOrDie("Uint8Array");return new c(b)}}),g("7a",["3p"],function(a){var b=function(b){var c=a.getOrDie("requestAnimationFrame");c(b)},c=function(b){var c=a.getOrDie("atob");return c(b)};return{atob:c,requestAnimationFrame:b}}),g("6d",["4x","78","79","7a","n","2f","37","12","62"],function(a,b,c,d,e,f,g,h,i){var j=function(a,e){for(var f=1024,g=d.atob(a),j=g.length,k=i.ceil(j/f),l=new h(k),m=0;m<k;++m){for(var n=m*f,o=i.min(n+f,j),p=new h(o-n),q=n,r=0;q<o;++r,++q)p[r]=g[q].charCodeAt(0);l[m]=c(p)}return b(l,{type:e})},k=function(a){return g.startsWith(a,"data:image/")&&a.indexOf(";base64,")>"data:image/".length},l=function(b){if(!k(b))return a.none();var c=b.indexOf(";"),d=b.substr("data:".length,c-"data:".length),e=b.substr(c+";base64,".length);try{var f=a.blob(j(e,d));return f}catch(g){return a.error(g)}};return{convert:l}}),g("4w",["6d"],function(a){var b=function(b){return a.convert(b)};return{toBlob:b}}),g("4y",["2w","g","h","p","2c","j","k","1d","2a","1f"],function(a,b,c,d,e,f,g,h,i,j){var k=e.immutable("asset","image"),l=function(a,e){var g=[];return b.each(a,function(a,b){c.cata(a,function(c,d,h,i){var j=e[b];f.set(j,"src",h),g.push(k(a,j))},d.noop)}),g},m=function(a,e){var g=[],j=b.bind(a,function(a){return"img"===h.name(a)?[a]:i.descendants(a,"img")});return b.each(e,function(a){c.cata(a,function(c,d,e,h){b.each(j,function(b){f.get(b,"src")===e&&g.push(k(a,b))})},d.noop)}),g},n=function(d){var e=[],h=[],i=[];return b.each(d,function(a){return c.cata(a,function(b,c,d,j){var l=g.fromTag("img");f.set(l,"src",d),e.push(l),h.push(a),i.push(k(a,l))},function(a,b,c){j.error("Internal error: Paste operation produced an image URL instead of a Data URI: ",b)})}),a.paste(e,h,i)};return{createImages:n,findImages:m,updateSources:l}}),g("1y",["g","29","3f"],function(a,b,c){var d=function(b){b.dom().textContent="",a.each(c.children(b),function(a){e(a)})},e=function(a){var b=a.dom();null!==b.parentNode&&b.parentNode.removeChild(b)},f=function(a){var d=c.children(a);d.length>0&&b.before(a,d),e(a)};return{empty:d,remove:e,unwrap:f}}),g("32",["4w","4x","4q","4y","2w","g","i","n","2c","j","k","1d","1y","29","2a"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=i.immutable("blob","image"),q=function(c,d){var e=a.toBlob(d);return b.cata(e,h.none,h.none,function(a){return h.some(p(a,c))})},r=function(a){var b=k.fromTag("div");return n.append(b,a),o.descendants(b,"img[src]")},s=function(a){return 0===a.indexOf("data:")&&a.indexOf("base64")>-1},t=function(a){return 0===a.indexOf("blob:")},u=function(a){return s(a)||t(a)},v=function(a){var b=j.get(a,"src");return u(b)},w=function(a){return f.bind(r(a),function(a){var b=j.get(a,"src");return u(b)?q(a,b).toArray():[]})},x=function(a){var b=f.filter(a,function(a){return"img"!==l.name(a)||!v(a)});return e.incomplete(b,[],[],"errors.local.images.disallowed")};return function(a){return function(b,h){return c.sync(function(b){var i=function(){c.call(b,{response:h.response(),bundle:h.bundle()})},j=function(a){var i=w(a),j=f.map(i,function(a){return a.blob()});g.multiple(j).get(function(g){var j=f.map(i,function(a){return a.image()}),k=d.updateSources(g,j);c.call(b,{response:e.paste(a,g,k),bundle:h.bundle()})})},k=function(a){var d=f.filter(r(a),v);f.each(d,m.remove),c.call(b,{response:d.length>0?x(a):h.response(),bundle:h.bundle()})},l=function(b,c,d,e){a.allowLocalImages===!1?k(b):0===c.length?j(b):i()};e.cata(h.response(),i,l,i,l)})}}}),g("4z",["4q","2w","o","1f"],function(a,b,c,d){var e=function(c){var e=function(e,f){return c.proxyBin().fold(function(){return d.error(e),a.pure({response:b.cancel(),bundle:{}})},f)};return{handle:e}},f=function(a){return c.nu(function(b){a.backgroundAssets().fold(function(){b([])},function(a){a.listen(b)})})},g=function(a){var b=j(a);return b&&h(a)||!b&&i(a)},h=function(a){return a.officeStyles().getOr(!0)},i=function(a){return a.htmlStyles().getOr(!1)},j=function(a){return a.isWord().getOr(!1)},k=function(a){return a.isInternal().getOr(!1)};return{proxyBin:e,backgroundAssets:f,merging:g,mergeOffice:h,mergeNormal:i,isWord:j,isInternal:k}}),g("5c",["3g"],function(a){var b=a.create("ephox-cement");return{resolve:b.resolve}}),g("50",["5c","1l","p","n","27","k","28","1x","29"],function(a,b,c,d,e,f,g,h,i){return function(j,k){var l=k.translations,m=function(a,c,e){e(d.some(b.merge(c,{officeStyles:a,htmlStyles:a})))},n=function(b,c){var k=function(){t(),m(!1,b,c)},n=function(){t(),m(!0,b,c)},o=f.fromTag("div");e.add(o,a.resolve("styles-dialog-content"));var p=f.fromTag("p"),q=g.fromHtml(l("cement.dialog.paste.instructions"));i.append(p,q),h.append(o,p);var r={text:l("cement.dialog.paste.clean"),tabindex:0,className:a.resolve("clean-styles"),click:k},s={text:l("cement.dialog.paste.merge"),tabindex:1,className:a.resolve("merge-styles"),click:n},t=function(){v.destroy()},u=function(){c(d.none()),t()},v=j(!0);v.setTitle(l("cement.dialog.paste.title")),v.setContent(o),v.setButtons([r,s]),v.show(),v.events.close.bind(u)},o=function(a,b){var c=a?"officeStyles":"htmlStyles",d=k[c];"clean"===d?m(!1,k,b):"merge"===d?m(!0,k,b):n(k,b)};return{get:o,destroy:c.noop}}}),g("33",["4q","4r","4z","50","2w"],function(a,b,c,d,e){var f=function(f,g){var h=d(f,g);return function(d,f){var g=f.bundle(),i=f.response();return a.sync(function(d){h.get(c.isWord(g),function(c){var g=c.fold(function(){return{response:e.cancel(),bundle:f.bundle()}},function(a){return{response:i,bundle:b.nu({officeStyles:a.officeStyles,htmlStyles:a.htmlStyles})}});a.call(d,g)})})}},g=function(d,e){return function(g,h){return c.isInternal(h.bundle())?a.pure({response:h.response(),bundle:b.nu({officeStyles:!0,htmlStyles:!0})}):f(d,e)(g,h)}},h=function(c,d){return function(e,f){return a.pure({response:f.response(),bundle:b.nu({officeStyles:c,htmlStyles:d})})}};return{fixed:h,fromConfig:f,fromConfigIfExternal:g}}),g("7r",["2t","p","k","1g"],function(a,b,c,d){var e=function(a){for(var b=[];null!==a.nextNode();)b.push(c.fromDom(a.currentNode));return b},f=function(a){try{return e(a)}catch(b){return[]}},g=a.detect().browser,h=g.isIE()||g.isSpartan()?f:e,i=b.constant(b.constant(!0)),j=function(a,b){var c=b.fold(i,function(a){return function(b){return a(b.nodeValue)}});c.acceptNode=c;var e=d.createTreeWalker(a.dom(),NodeFilter.SHOW_COMMENT,c,!1);return h(e)};return{find:j}}),g("7b",["n","7r","37","1g"],function(a,b,c,d){var e=function(d){return b.find(d,a.some(function(a){return c.startsWith(a,"[if gte vml 1]")}))};return{find:e}}),g("6q",[],function(){var a=function(a){return void 0!==a.style};return{isSupported:a}}),h("11",window),g("5d",["1b","g","1c","n","j","5i","k","1d","6q","37","1e","1f","11"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b,c,d){if(!a.isString(d))throw l.error("Invalid call to CSS.set. Property ",c,":: Value ",d,":: Element ",b),new k("CSS value must be a string: "+d);i.isSupported(b)&&b.style.setProperty(c,d)},o=function(a,b){i.isSupported(a)&&a.style.removeProperty(b)},p=function(a,b,c){var d=a.dom();n(d,b,c)},q=function(a,b){var d=a.dom();c.each(b,function(a,b){n(d,b,a)})},r=function(a,b){var d=a.dom();c.each(b,function(a,b){a.fold(function(){o(d,b)},function(a){n(d,b,a)})})},s=function(a,b){var c=a.dom(),d=m.getComputedStyle(c),e=d.getPropertyValue(b),g=""!==e||f.inBody(a)?e:t(c,b);return null===g?void 0:g},t=function(a,b){return i.isSupported(a)?a.style.getPropertyValue(b):""},u=function(a,b){var c=a.dom(),e=t(c,b);return d.from(e).filter(function(a){return a.length>0})},v=function(a,b,c){var d=g.fromTag(a);p(d,b,c);var e=u(d,b);return e.isSome()},w=function(a,b){var c=a.dom();o(c,b),e.has(a,"style")&&""===j.trim(e.get(a,"style"))&&e.remove(a,"style")},x=function(a,b){var c=e.get(a,"style"),d=b(a),f=void 0===c?e.remove:e.set;return f(a,"style",c),d},y=function(a,b){var c=a.dom(),d=b.dom();i.isSupported(c)&&i.isSupported(d)&&(d.style.cssText=c.style.cssText)},z=function(a){return a.dom().offsetWidth},A=function(a,b,c){u(a,c).each(function(a){u(b,c).isNone()&&p(b,c,a)})},B=function(a,c,d){h.isElement(a)&&h.isElement(c)&&b.each(d,function(b){A(a,c,b)})};return{copy:y,set:p,preserve:x,setAll:q,setOptions:r,remove:w,get:s,getRaw:u,isValidValue:v,reflow:z,transfer:B}}),g("6r",["1b","g","p","n","5i","3n","k","2i"],function(a,b,c,d,e,f,g,h){var i=function(a){return n(e.body(),a)},j=function(b,e,f){for(var h=b.dom(),i=a.isFunction(f)?f:c.constant(!1);h.parentNode;){h=h.parentNode;var j=g.fromDom(h);if(e(j))return d.some(j);if(i(j))break}return d.none()},k=function(a,b,c){var d=function(a){return b(a)};return h(d,j,a,b,c)},l=function(a,b){var c=a.dom();return c.parentNode?m(g.fromDom(c.parentNode),function(c){return!f.eq(a,c)&&b(c)}):d.none()},m=function(a,e){var f=b.find(a.dom().childNodes,c.compose(e,g.fromDom));return d.from(f).map(g.fromDom)},n=function(a,b){var c=function(a){for(var e=0;e<a.childNodes.length;e++){if(b(g.fromDom(a.childNodes[e])))return d.some(g.fromDom(a.childNodes[e]));var f=c(a.childNodes[e]);if(f.isSome())return f}return d.none()};return c(a.dom())};return{first:i,ancestor:j,closest:k,sibling:l,child:m,descendant:n}}),g("6s",["j","k","1x","29","1y","3f"],function(a,b,c,d,e,f){var g=function(a,c){return b.fromDom(a.dom().cloneNode(c))},h=function(a){return g(a,!1)},i=function(a){return g(a,!0)},j=function(c,d){var e=b.fromTag(d),f=a.clone(c);return a.setAll(e,f),e},k=function(a,b){var c=j(a,b),e=f.children(i(a));return d.append(c,e),c},l=function(a,b){var g=j(a,b);c.before(a,g);var h=f.children(a);return d.append(g,h),e.remove(a),g};return{shallow:h,shallowAs:j,deep:i,copy:k,mutate:l}}),g("5a",["n","j","27","5d","k","1d","6r","6s","2a","37"],function(a,b,c,d,e,f,g,h,i,j){var k=function(a,b){var c=f.value(a),d=e.fromTag("div"),h=c.indexOf("]>");return d.dom().innerHTML=c.substr(h+"]>".length),g.descendant(d,function(a){return f.name(a)===b})},l=function(b){return f.isComment(b)?k(b,"v:shape"):a.none()},m=function(a){return l(a).map(function(a){var f=b.get(a,"o:spid"),g=void 0===f?b.get(a,"id"):f,h=e.fromTag("img");return c.add(h,"rtf-data-image"),b.set(h,"data-image-id",g.substr("_x0000_".length)),b.set(h,"data-image-type","code"),d.setAll(h,{width:d.get(a,"width"),height:d.get(a,"height")}),h})},n=function(d){if("img"===f.name(d)){var e=b.get(d,"src");if(void 0!==e&&null!==e&&j.startsWith(e,"file://")){var g=h.shallow(d),i=e.split(/[\/\\]/),k=i[i.length-1];return b.set(g,"data-image-id",k),b.remove(g,"src"),b.set(g,"data-image-type","local"),c.add(g,"rtf-data-image"),a.some(g)}return a.none()}return a.none()},o=function(a){return p(a).length>0},p=function(a){return i.descendants(a,".rtf-data-image")};return{local:n,vshape:m,find:p,exists:o,scour:l}}),g("6e",["7b","g","5a","n","23","2c","j","28","2a","1f"],function(a,b,c,d,e,f,g,h,i,j){var k=f.immutable("img","vshape"),l=function(a){var b=n(a);return b._rawElement=a.dom(),b},m=function(a){var b=n(a);return b._rawElement=a.dom(),b},n=function(a){return g.clone(a)},o=function(d){var f=h.fromHtml(d),g=b.bind(f,function(a){return i.descendants(a,"img")}),j=b.bind(f,a.find),k=e.cat(b.map(j,c.scour)),l=b.map(g,function(a){return p(a,k)});return e.cat(l)},p=function(a,c){var e=g.get(a,"v:shapes"),f=d.from(b.find(c,function(a){return g.get(a,"id")===e}));return f.isNone()&&j.log("WARNING: unable to find data for image",a.dom()),f.map(function(b){return q(a,b)})},q=function(a,b){return k(l(a),m(b))};return{extract:o}}),g("7c",["1b","g","p","n","j","27"],function(a,b,c,d,e,f){var g=function(b,c){var d=c.style;if(e.has(b,"width")&&e.has(b,"height")&&a.isString(d)){var f=d.match(/rotation:([^;]*)/);null===f||"90"!==f[1]&&"-90"!==f[1]||e.setAll(b,{width:e.get(b,"height"),height:e.get(b,"width")})}},h=function(a,b){var c=b["o:spid"],d=void 0===c?b.id:c;g(a,b),f.add(a,"rtf-data-image"),e.set(a,"data-image-id",d.substr("_x0000_".length)),e.set(a,"data-image-type","code")},i=function(a,b,c){return c.img()[a]===b},j=function(a,f,g){var h=e.get(f,g),j=c.curry(i,g,h),k=b.find(a,j);return d.from(k).map(function(a){return e.remove(f,g),a})},k=function(a,c,d){b.each(c,function(b){j(a,b,d).each(function(a){h(b,a.vshape())})})};return{rotateImage:g,insertRtfCorrelation:k}}),g("7s",["2t","n","1e"],function(a,b,c){return function(d,e){var f=function(a){if(!d(a))throw new c("Can only get "+e+" value of a "+e+" node");return j(a).getOr("")},g=function(a){try{return h(a)}catch(c){return b.none()}},h=function(a){
-return d(a)?b.from(a.dom().nodeValue):b.none()},i=a.detect().browser,j=i.isIE()&&10===i.version.major?g:h,k=function(a,b){if(!d(a))throw new c("Can only set raw "+e+" value of a "+e+" node");a.dom().nodeValue=b};return{get:f,getOption:j,set:k}}}),g("7d",["1d","7s"],function(a,b){var c=b(a.isComment,"comment"),d=function(a){return c.get(a)},e=function(a){return c.getOption(a)},f=function(a,b){c.set(a,b)};return{get:d,getOption:e,set:f}}),g("7t",["1x"],function(a){var b=function(b,c,d){b.dom().styleSheet?b.dom().styleSheet.cssText=c:a.append(b,d)};return{setCss:b}}),g("8f",[],function(){var a=function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};return{escape:a}}),g("7u",["1c","8f","4v"],function(a,b,c){var d=function(a,d,e){var f=new c("url\\(\\s*['\"]?"+b.escape(d)+"(.*?)['\"]?\\s*\\)","g");return a.replace(f,'url("'+e+'$1")')},e=function(b,c){var e=b;return a.each(c,function(a,b){e=d(e,b,a)}),e};return{replace:d,replaceMany:e}}),g("7e",["j","k","1x","20","7t","7u","12"],function(a,b,c,d,e,f,g){var h=function(c){var d=b.fromTag("style",c.dom());return a.set(d,"type","text/css"),d},i=function(a,c,d){e.setCss(a,c,b.fromText(c,d.dom()))},j=function(a,b,e){var g=h(e),j=void 0===b?a:f.replaceMany(a,b);i(g,j,e);var k=d.descendant(e,"head").getOrDie();c.append(k,g)},k=function(a){var b=a.dom().styleSheets;return g.prototype.slice.call(b)};return{stylesheets:k,inject:j}}),g("7v",["g","2c"],function(a,b){var c=b.immutable("selector","style","raw"),d=function(b){var d=b.cssRules;return a.map(d,function(a){var b=a.selectorText,d=a.style.cssText;if(void 0===d)throw"WARNING: Browser does not support cssText property";return c(b,d,a.style)})},e=function(b){return a.bind(b,d)};return{extract:d,extractAll:e}}),g("7f",["7v"],function(a){var b=function(b){return a.extract(b)},c=function(b){return a.extractAll(b)};return{extract:b,extractAll:c}}),function(a,b,c){a("7g",[],function(){var a=function(){var a,b,c;return a=function(a){var c,d,e,f,g=[];for(c=a.split(","),e=0,f=c.length;e<f;e+=1)d=c[e],d.length>0&&g.push(b(d));return g},b=function(a){var b,c=a,d={a:0,b:0,c:0},e=[],f=/(\[[^\]]+\])/g,g=/(#[^\s\+>~\.\[:]+)/g,h=/(\.[^\s\+>~\.\[:]+)/g,i=/(::[^\s\+>~\.\[:]+|:first-line|:first-letter|:before|:after)/gi,j=/(:[\w-]+\([^\)]*\))/gi,k=/(:[^\s\+>~\.\[:]+)/g,l=/([^\s\+>~\.\[:]+)/g;return b=function(b,f){var g,h,i,j,k,l;if(b.test(c))for(g=c.match(b),h=0,i=g.length;h<i;h+=1)d[f]+=1,j=g[h],k=c.indexOf(j),l=j.length,e.push({selector:a.substr(k,l),type:f,index:k,length:l}),c=c.replace(j,Array(l+1).join(" "))},function(){var a=function(a){var b,d,e,f;if(a.test(c))for(b=c.match(a),d=0,e=b.length;d<e;d+=1)f=b[d],c=c.replace(f,Array(f.length+1).join("A"))},b=/\\[0-9A-Fa-f]{6}\s?/g,d=/\\[0-9A-Fa-f]{1,5}\s/g,e=/\\./g;a(b),a(d),a(e)}(),function(){var a=/:not\(([^\)]*)\)/g;a.test(c)&&(c=c.replace(a,"     $1 "))}(),function(){var a,b,d,e,f=new RegExp("{[^]*","gm");if(f.test(c))for(a=c.match(f),b=0,d=a.length;b<d;b+=1)e=a[b],c=c.replace(e,Array(e.length+1).join(" "))}(),b(f,"b"),b(g,"a"),b(h,"b"),b(i,"c"),b(j,"b"),b(k,"b"),c=c.replace(/[\*\s\+>~]/g," "),c=c.replace(/[#\.]/g," "),b(l,"c"),e.sort(function(a,b){return a.index-b.index}),{selector:a,specificity:"0,"+d.a.toString()+","+d.b.toString()+","+d.c.toString(),specificityArray:[0,d.a,d.b,d.c],parts:e}},c=function(a,c){var d,e,f;if("string"==typeof a){if(a.indexOf(",")!==-1)throw"Invalid CSS selector";d=b(a).specificityArray}else{if(!Array.isArray(a))throw"Invalid CSS selector or specificity array";if(4!==a.filter(function(a){return"number"==typeof a}).length)throw"Invalid specificity array";d=a}if("string"==typeof c){if(c.indexOf(",")!==-1)throw"Invalid CSS selector";e=b(c).specificityArray}else{if(!Array.isArray(c))throw"Invalid CSS selector or specificity array";if(4!==c.filter(function(a){return"number"==typeof a}).length)throw"Invalid specificity array";e=c}for(f=0;f<4;f+=1){if(d[f]<e[f])return-1;if(d[f]>e[f])return 1}return 0},{calculate:a,compare:c}}();return"undefined"!=typeof exports&&(exports.calculate=a.calculate,exports.compare=a.compare),a})}(f.bolt.module.api.define,f.bolt.module.api.require,f.bolt.module.api.demand),g("6f",["7c","g","p","2c","j","7d","5d","1y","2a","3f","7e","7f","7g"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=d.immutable("selector","raw"),o=function(b,c,d,e,f){var g=i.descendants(c,"img");t(c),a.insertRtfCorrelation(d,g,e);var h=f.mergeInline()?s:p;h(b,c)},p=c.noop,q=function(a,c){var d={};return b.each(a,function(e){if(void 0!==a[e]){var f=c.dom().style;b.contains(f,e)||(d[e]=a[e])}}),d},r=function(a,c){var d=b.bind(c,function(c){var d=i.descendants(a,c.selector());return b.each(d,function(a){var b=q(c.raw(),a);g.setAll(a,b)}),d});b.each(d,function(a){e.remove(a,"class")})},s=function(a,c){var d=k.stylesheets(a),e=l.extractAll(d),f=function(a){return a.selector().indexOf(",")!==-1},g=function(a){return!f(a)},h=function(a){var c=a.selector().split(",");return b.map(c,function(b){var c=b.trim();return n(c,a.raw())})},i=b.flatten(b.map(b.filter(e,f),h)),j=b.filter(e,g),o=j.concat(i);o.sort(function(a,b){return m.compare(a.selector(),b.selector())}).reverse(),r(c,o)},t=function(a){var c=j.children(a);b.each(c,function(a){f.getOption(a).each(function(b){"StartFragment"!==b&&"EndFragment"!==b||h.remove(a)})})};return{doMergeInlineStyles:r,process:o}}),g("71",["n","k"],function(a,b){var c=function(c){var d=c.dom();try{var e=d.contentWindow?d.contentWindow.document:d.contentDocument;return void 0!==e&&null!==e?a.some(b.fromDom(e)):a.none()}catch(f){return console.log("Error reading iframe: ",d),console.log("Error was: "+f),a.none()}},d=function(a){var b=c(a);return b.fold(function(){return a},function(a){return a})};return{doc:d}}),g("5x",["71","5i"],function(a,b){var c=function(c,d){if(!b.inBody(c))throw"Internal error: attempted to write to an iframe that is not in the DOM";var e=a.doc(c),f=e.dom();f.open(),f.writeln(d),f.close()};return{write:c}}),g("25",["p","k"],function(a,b){var c=function(b,c,d,e,f,g,h){return{target:a.constant(b),x:a.constant(c),y:a.constant(d),stop:e,prevent:f,kill:g,raw:a.constant(h)}},d=function(d,e){return function(f){if(d(f)){var g=b.fromDom(f.target),h=function(){f.stopPropagation()},i=function(){f.preventDefault()},j=a.compose(i,h),k=c(g,f.clientX,f.clientY,h,i,j,f);e(k)}}},e=function(b,c,e,f,g){var i=d(e,f);return b.dom().addEventListener(c,i,g),{unbind:a.curry(h,b,c,i,g)}},f=function(a,b,c,d){return e(a,b,c,d,!1)},g=function(a,b,c,d){return e(a,b,c,d,!0)},h=function(a,b,c,d){a.dom().removeEventListener(b,c,d)};return{bind:f,capture:g}}),g("w",["p","25"],function(a,b){var c=a.constant(!0),d=function(a,d,e){return b.bind(a,d,c,e)},e=function(a,d,e){return b.capture(a,d,c,e)};return{bind:d,capture:e}}),g("6g",["p","5x","5d","w","k","1x","1y","x"],function(a,b,c,d,e,f,g,h){return function(i){var j=function(j,k,l){var m=e.fromTag("div"),n=e.fromTag("iframe");c.setAll(m,{display:"none"});var o=d.bind(n,"load",function(){o.unbind(),b.write(n,j);var c=n.dom().contentWindow.document;if(void 0===c)throw"sandbox iframe load event did not fire correctly";var d=e.fromDom(c),f=c.body;if(void 0===f)throw"sandbox iframe does not have a body";var i=e.fromDom(f),p=k(d,i);g.remove(m),h(a.curry(l,p),0)});f.append(m,n),f.append(i,m)};return{play:j}}}),g("6h",["k","28","1x","29","1y","3f"],function(a,b,c,d,e,f){var g=function(a){return a.dom().innerHTML},h=function(g,h){var i=f.owner(g),j=i.dom(),k=a.fromDom(j.createDocumentFragment()),l=b.fromHtml(h,j);d.append(k,l),e.empty(g),c.append(g,k)},i=function(b){var d=a.fromTag("div"),e=a.fromDom(b.dom().cloneNode(!0));return c.append(d,e),g(d)};return{get:g,set:h,getOuter:i}}),g("51",["4q","4r","6e","6f","2w","p","6g","k","28","6h","1g"],function(a,b,c,d,e,f,g,h,i,j,k){var l="data-textbox-image",m=function(a){return void 0===a||null===a||0===a.length},n=function(a){var b=1;return a.replace(/(<img[^>]*)src=".*?"/g,function(a,c,d){return c+l+'="'+b++ +'"'})},o=function(a,b){var c=g(h.fromDom(k.body));return function(e,g){c.play(e,function(c,e){return d.process(c,e,a,l,{mergeInline:f.constant(b)}),j.get(e)},g)}},p=function(d,f,g){return a.sync(function(h){var j=c.extract(d),k=o(j,f);k(g,function(c){var d=i.fromHtml(c);a.call(h,{response:e.paste(d,[],[]),bundle:b.nu({})})})})},q=function(){return a.pure({response:e.paste([],[],[]),bundle:b.nu({})})},r=function(a){var b=a.indexOf("</html>");return b>-1?a.substr(0,b+"</html>".length):a},s=function(b,c,d){var f=r(b.data()),g=n(f);return d.cleanDocument(g,c).fold(function(){return a.pure({response:e.error("errors.paste.word.notready"),bundle:{}})},function(a){return m(a)?q():p(g,c,a)})};return{handle:s}}),g("52",["4q","4r","4y","g","i"],function(a,b,c,d,e){var f=function(f){var g=d.filter(f,function(a){return"file"===a.kind&&/image/.test(a.type)}),h=d.map(g,function(a){return a.getAsFile()});return a.sync(function(d){e.multiple(h).get(function(e){var f=c.createImages(e);a.call(d,{response:f,bundle:b.nu({})})})})};return{handle:f}}),g("7w",[],function(){return{validStyles:function(){return/^(mso-.*|tab-stops|tab-interval|language|text-underline|text-effect|text-line-through|font-color|horiz-align|list-image-[0-9]+|separator-image|table-border-color-(dark|light)|vert-align|vnd\..*)$/},specialInline:function(){return/^(font|em|strong|samp|acronym|cite|code|dfn|kbd|tt|b|i|u|s|sub|sup|ins|del|var|span)$/}}}),g("83",[],function(){var a=function(a){return g(function(b,c,d,e,f,g){return b(a)})},b=function(a){return g(function(b,c,d,e,f,g){return c(a)})},c=function(a){return g(function(b,c,d,e,f,g){return d(a)})},d=function(a){return g(function(b,c,d,e,f,g){return e(a)})},e=function(){return g(function(a,b,c,d,e,f){return e()})},f=function(a){return g(function(b,c,d,e,f,g){return g(a)})},g=function(a){var b=function(b){return a(function(a){return 0===b.toLowerCase().indexOf(a.toLowerCase())},function(a){return a.test(b.toLowerCase())},function(a){return b.toLowerCase().indexOf(a.toLowerCase())>=0},function(a){return b.toLowerCase()===a.toLowerCase()},function(){return!0},function(a){return!a.matches(b)})};return{fold:a,matches:b}},h=function(a,b,c,d,e,f,g){return a.fold(b,c,d,e,f,g)};return{starts:a,pattern:b,contains:c,exact:d,all:e,not:f,cata:h}}),g("7x",["p","1d","83"],function(a,b,c){var d=function(b,d,e,f){var g=f.name,h=void 0!==f.condition?f.condition:a.constant(!0),i=void 0!==f.value?f.value:c.all();return g.matches(e)&&i.matches(d)&&h(b)},e=function(c,d){var e=b.name(c),f=d.name,g=void 0!==d.condition?d.condition:a.constant(!0);return f.matches(e)&&g(c)};return{keyval:d,name:e}}),g("8g",["g","1c","p","j"],function(a,b,c,d){var e=function(b,c){var d={};return a.each(b.dom().attributes,function(a){c(a.value,a.name)||(d[a.name]=a.value)}),d},f=function(c,e,f){a.each(e,function(a){d.remove(c,a)}),b.each(f,function(a,b){d.set(c,b,a)})},g=function(c,d,e){var g=a.map(c.dom().attributes,function(a){return a.name});b.size(d)!==g.length&&f(c,g,d)};return{filter:e,clobber:g,scan:c.constant({})}}),g("8h",["g","1c","j","5d","37"],function(a,b,c,d,e){var f=function(b){var c={},d=void 0!==b&&null!==b?b.split(";"):[];return a.each(d,function(a){var b=a.split(":");2===b.length&&(c[e.trim(b[0])]=e.trim(b[1]))}),c},g=function(a,b){return a.dom().style.getPropertyValue(b)},h=function(b,c){var d=b.dom().style,e=void 0===d?[]:d,f={};return a.each(e,function(a){var d=g(b,a);c(d,a)||(f[a]=d)}),f},i=function(a,b,c){d.set(a,b,c)},j=function(b,c,d){var e=b.dom().getAttribute("style"),g=f(e),h={};return a.each(c,function(a){var b=g[a];void 0===b||d(b,a)||(h[a]=b)}),h},k=function(c){var d=b.keys(c);return a.map(d,function(a){return a+": "+c[a]}).join("; ")},l=function(a,d,e){c.set(a,"style","");var f=b.size(d),g=b.size(e);if(0===f&&0===g)c.remove(a,"style");else if(0===f)c.set(a,"style",k(e));else{b.each(d,function(b,c){i(a,c,b)});var h=c.get(a,"style"),j=g>0?k(e)+"; ":"";c.set(a,"style",j+h)}};return{filter:h,clobber:l,scan:j}}),g("7y",["8g","8h","p","k"],function(a,b,c,d){var e=["mso-list"],f=function(a,c){var d=b.scan(a,e,c),f=b.filter(a,c);b.clobber(a,f,d)},g=function(b,c){var d=a.filter(b,c);a.clobber(b,d,{})},h=function(a){var d=b.filter(a,c.constant(!1));b.clobber(a,d,{})},i=function(a,b){f(d.fromDom(a),b)},j=function(a,b){g(d.fromDom(a),b)};return{style:f,attribute:g,styleDom:i,attributeDom:j,validateStyles:h}}),g("7i",["g","1l","7x","7y","p","j","27","3q","1y","2a"],function(a,b,c,d,e,f,g,h,i,j){var k=function(b,d,e){b(e,function(b,f){return a.exists(d,function(a){return c.keyval(e,b,f,a)})})},l=function(l,m){var n=b.merge({styles:[],attributes:[],classes:[],tags:[]},m),o=j.descendants(l,"*");a.each(o,function(b){k(d.style,n.styles,b),k(d.attribute,n.attributes,b),a.each(n.classes,function(c){var d=f.has(b,"class")?h.get(b):[];a.each(d,function(a){c.name.matches(a)&&g.remove(b,a)})})});var p=j.descendants(l,"*");a.each(p,function(b){var d=a.exists(n.tags,e.curry(c.name,b));d&&i.remove(b)})},m=function(d,f){var g=b.merge({tags:[]},f),h=j.descendants(d,"*");a.each(h,function(b){var d=a.exists(g.tags,e.curry(c.name,b));d&&i.unwrap(b)})},n=function(d,f){var g=b.merge({tags:[]},f),h=j.descendants(d,"*");a.each(h,function(b){var d=a.find(g.tags,e.curry(c.name,b));void 0!==d&&null!==d&&d.mutate(b)})},o=function(b){var c=j.descendants(b,"*");a.each(c,function(a){d.validateStyles(a)})};return{remover:l,unwrapper:m,transformer:n,validator:o}}),g("86",["1c","5d","k"],function(a,b,c){var d="startElement",e="endElement",f="text",g="comment",h=function(a,h,i){var j,k,l,m=c.fromDom(a);switch(a.nodeType){case 1:h?j=e:(j=d,b.setAll(m,i||{})),k="HTML"!==a.scopeName&&a.scopeName&&a.tagName&&a.tagName.indexOf(":")<=0?(a.scopeName+":"+a.tagName).toUpperCase():a.tagName;break;case 3:j=f,l=a.nodeValue;break;case 8:j=g,l=a.nodeValue;break;default:console.log("WARNING: Unsupported node type encountered: "+a.nodeType)}var n=function(){return a},o=function(){return k},p=function(){return j},q=function(){return l};return{getNode:n,tag:o,type:p,text:q}},i=function(b,c,d,e){var f=e.createElement(b);return a.each(c,function(a,b){f.setAttribute(b,a)}),h(f,!1,d)},j=function(a,b){return h(b.createElement(a),!0)},k=function(a,b){return h(b.createComment(a),!1)},l=function(a,b){return h(b.createTextNode(a))},m=j("HTML",window.document);return{START_ELEMENT_TYPE:d,END_ELEMENT_TYPE:e,TEXT_TYPE:f,COMMENT_TYPE:g,FINISHED:m,token:h,createStartElement:i,createEndElement:j,createComment:k,createText:l}}),g("7z",["86"],function(a){var b=function(b){var c=b.createDocumentFragment(),d=c,e=function(a){g(a),c=a},f=function(){c=c.parentNode,null===c&&(c=d)},g=function(a){c.appendChild(a)},h=function(c){var d=function(a){var b=a.getNode().cloneNode(!1);e(b)},h=function(a,c){var d=b.createTextNode(a.text());g(d)};switch(c.type()){case a.START_ELEMENT_TYPE:d(c);break;case a.TEXT_TYPE:h(c);break;case a.END_ELEMENT_TYPE:f();break;case a.COMMENT_TYPE:break;default:throw{message:"Unsupported token type: "+c.type()}}};return{dom:d,receive:h,label:"SERIALISER"}};return{create:b}}),g("80",["86"],function(a){var b=function(b,c){var d;c=c||window.document,d=c.createElement("div"),c.body.appendChild(d),d.style.position="absolute",d.style.left="-10000px",d.innerHTML=b,nextNode=d.firstChild||a.FINISHED;var e=[];endNode=!1;var f=function(b,c){return b===a.FINISHED?b:b?a.token(b,c):void 0},g=function(){var b=nextNode,g=endNode;return!endNode&&nextNode.firstChild?(e.push(nextNode),nextNode=nextNode.firstChild):endNode||1!==nextNode.nodeType?nextNode.nextSibling?(nextNode=nextNode.nextSibling,endNode=!1):(nextNode=e.pop(),endNode=!0):endNode=!0,b===a.FINISHED||nextNode||(c.body.removeChild(d),nextNode=a.FINISHED),f(b,g)},h=function(){return void 0!==nextNode};return{hasNext:h,next:g}};return{tokenise:b}}),g("7j",["7z","80"],function(a,b){var c=function(a,b,c){var d,e=c;for(d=b.length-1;d>=0;d--)e=b[d](e,{},a);return e},d=function(d,e,f){for(var g=a.create(d),h=b.tokenise(e,d),i=c(d,f,g);h.hasNext();){var j=h.next();i.receive(j)}return g.dom};return{build:c,run:d}}),g("6m",["g","7i","7j","k","6h","1y","3f"],function(a,b,c,d,e,f,g){var h=function(a){return function(c){b.remover(c,a)}},i=function(a){return function(c){b.unwrapper(c,a)}},j=function(a){return function(c){b.transformer(c,a)}},k=function(){return function(a){b.validator(a)}},l=function(a){return function(b){var d=e.get(b),h=g.owner(b),i=c.run(h.dom(),d,a);f.empty(b),b.dom().appendChild(i)}},m=function(b,c,f){var g=d.fromTag("div",b.dom());return g.dom().innerHTML=c,a.each(f,function(a){a(g)}),e.get(g)},n=function(a,b){return a.indexOf("<o:p>")>=0||b.browser.isSpartan()&&a.indexOf('v:shapes="')>=0||b.browser.isSpartan()&&a.indexOf("mso-")>=0||a.indexOf("mso-list")>=0||a.indexOf("p.MsoNormal, li.MsoNormal, div.MsoNormal")>=0||a.indexOf("MsoListParagraphCxSpFirst")>=0||a.indexOf("<w:WordDocument>")>=0};return{removal:h,unwrapper:i,transformer:j,validate:k,pipeline:l,isWordContent:n,go:m}}),g("7l",["g","86"],function(a,b){return function(c,d,e){return function(e,f,g){var h=function(b){a.each(b,i)},i=function(a){e.receive(a)},j=function(a){c(l,a,k)},k=function(a,c){return b.token(c,a.type()===b.END_ELEMENT_TYPE,{})},l={emit:i,emitTokens:h,receive:j,document:window.document};return d(l),l}}}),g("8u",["8h","86","p","j","5d","k"],function(a,b,c,d,e,f){var g=function(a,b){var c=f.fromDom(a.getNode());return d.get(c,b)},h=function(a,b){var c=f.fromDom(a.getNode());return e.get(c,b)},i=function(a){return a.type()===b.TEXT_TYPE&&/^[\s\u00A0]*$/.test(a.text())},j=function(b){var d=f.fromDom(b.getNode()),e=a.scan(d,["mso-list"],c.constant(!1));return e["mso-list"]};return{getAttribute:g,getStyle:h,isWhitespace:i,getMsoList:j}}),g("96",["g","n"],function(a,b){var c=function(c,e){var f=a.find(c,function(a){return"UL"===a.tag||e&&d(a,e,!0)});return void 0!==f?b.some(f):c.length>0?b.some(c[0]):b.none()},d=function(a,b,c){return a===b||a&&b&&a.tag===b.tag&&a.type===b.type&&(c||a.variant===b.variant)};return{guessFrom:c,eqListType:d}}),g("8l",[],function(){var a=function(a,b){if(void 0===a||void 0===b)throw console.trace(),"brick";a.nextFilter.set(b)},b=function(b){return function(c,d,e){a(d,b)}},c=function(a,b,c){var d=b.nextFilter.get();d(a,b,c)},d=function(b){return function(d,e,f){a(e,b),c(d,e,f)}},e=function(a,b){return a.nextFilter.get()===b};return{next:a,go:c,jump:d,isNext:e,setNext:b}}),g("8t",["g","8u","96","8l","p","2c","j","k"],function(a,b,c,d,e,f,g,h){var i=function(a,b){return g.has(h.fromDom(b.getNode()),"data-list-level")},j=function(a){var b=parseInt(g.get(a,"data-list-level"),10),c=g.get(a,"data-list-emblems"),d=JSON.parse(c);return g.remove(a,"data-list-level"),g.remove(a,"data-list-emblems"),{level:e.constant(b),emblems:e.constant(d)}},k=f.immutable("level","token","type"),l=function(c){return!a.contains(["P"],c.tag())||/^MsoHeading/.test(b.getAttribute(c,"class"))},m=function(a,b,d,e){var f=d.getCurrentListType(),g=d.getCurrentLevel(),h=g==e.level()?f:null;return c.guessFrom(e.emblems(),h).filter(function(a){return!("OL"===a.tag&&l(b))})},n=function(a,b,c){var d=m(c.listType.get(),a,c.emitter,b);return d.each(c.listType.set),k(b.level(),c.originalToken.get(),c.listType.get())},o=function(a){return function(b,c,e){var f=j(h.fromDom(e.getNode()));f.level();c.originalToken.set(e);var g=n(e,f,c);c.emitter.openItem(g.level(),g.token(),g.type()),d.next(c,a.inside())}};return{predicate:i,action:o}}),g("8v",["p"],function(a){return function(b,c,d){return{pred:b,action:c,label:a.constant(d)}}}),g("8w",["g","p","n"],function(a,b,c){var d=function(a,b){return function(a,c,d){return b(a,c,d)}};return function(e,f,g){var h=d(e+" :: FALLBACK --- ",g),i=function(g,i,j){var k=c.from(a.find(f,function(a){return a.pred(i,j)})),l=k.fold(b.constant(h),function(a){var b=a.label();return void 0===b?a.action:d(e+" :: "+b,a.action)});l(g,i,j)};return i.toString=function(){return"Handlers for "+e},i}}),g("8i",["8t","86","8u","8v","8w","8l"],function(a,b,c,d,e,f){var g=function(a){var c=function(b,c,d){f.next(c,a.outside())},g=function(a,c){return c.type()===b.END_ELEMENT_TYPE&&a.originalToken.get()&&c.tag()===a.originalToken.get().tag()};return e("Inside.List.Item",[d(g,c,"Closing open tag")],function(a,b,c){a.emit(c)})},h=function(g){var h=function(a,b,c){b.emitter.closeAllLists(),a.emit(c),f.next(b,g.outside())},i=function(a,d){return d.type()===b.TEXT_TYPE&&c.isWhitespace(d)};return e("Outside.List.Item",[d(a.predicate,a.action(g),"Data List ****"),d(i,function(a,b,c){a.emit(c)},"Whitespace")],h)};return{inside:g,outside:h}}),g("97",["2c"],function(a){var b=a.immutable("state","result"),c=a.immutable("state","value"),d=a.immutable("level","type","types","items");return{state:d,value:c,result:b}}),g("9j",["97","n"],function(a,b){var c=function(c){var d=c.items().slice(0);if(d.length>0&&"P"!==d[d.length-1]){var e=d[d.length-1];d[d.length-1]="P";var f=a.state(c.level(),c.type(),c.types(),d);return a.value(f,b.some(e))}return a.value(c,b.none())},d=function(c,d){var e=c.items().slice(0),f=void 0!==d&&"P"!==d?b.some(d):b.none();f.fold(function(){e.push("P")},function(a){e.push(a)});var g=a.state(c.level(),c.type(),c.types(),e);return a.value(g,f)};return{start:d,finish:c}}),g("9k",["97"],function(a){var b=function(b,c,d){for(var e=[],f=b;c(f);){var g=d(f);f=g.state(),e=e.concat(g.result())}return a.result(f,e)},c=function(a,c,d){var e=function(a){return a.level()<c};return b(a,e,d)},d=function(a,c,d){var e=function(a){return a.level()>c};return b(a,e,d)};return{moveRight:c,moveLeft:d,moveUntil:b}}),g("9v",["8u"],function(a){var b=function(b){var c=a.getStyle(b,"margin-left");return void 0!==c&&"0px"!==c?{"margin-left":c}:{}},c=function(a){var c={"list-style-type":"none"};return a?b(a):c};return{from:c}}),g("9l",["7y","86","96","97","9j","9v","p"],function(a,b,c,d,e,f,g){var h=function(a,c,e){var f=c.start&&c.start>1?{start:c.start}:{},h=a.level()+1,i=c,j=a.types().concat([c]),k=[g.curry(b.createStartElement,c.tag,f,e)],l=d.state(h,i,j,a.items());return d.result(l,k)},i=function(a){var c=a.types().slice(0),e=[g.curry(b.createEndElement,c.pop().tag)],f=a.level()-1,h=c[c.length-1],i=d.state(f,h,c,a.items());return d.result(i,e)},j=function(a,b){var c=i(a),e=h(c.state(),b,b.type?{"list-style-type":b.type}:{});return d.result(e.state(),c.result().concat(e.result()))},k=function(h,i,k){var l={},m=f.from(i),n=h.type()&&!c.eqListType(h.type(),k)?j(h,k):d.result(h,[]),o=[g.curry(b.createStartElement,"LI",l,m)],p=e.start(n.state(),i&&i.tag()),q=p.value().map(function(b){return a.styleDom(i.getNode(),g.constant(!0)),[g.constant(i)]}).getOr([]);return d.result(p.state(),n.result().concat(o).concat(q))},l=function(a){var c=g.curry(b.createEndElement,"LI"),f=e.finish(a),h=f.value().fold(function(){return[c]},function(a){return[g.curry(b.createEndElement,a),c]});return d.result(f.state(),h)};return{open:h,openItem:k,close:i,closeItem:l}}),g("98",["g","86","97","9j","9k","9l","p","n"],function(a,b,c,d,e,f,g,h){var i=function(b){if(0===b.length)throw"Compose must have at least one element in the list";var d=b[b.length-1],e=a.bind(b,function(a){return a.result()});return c.result(d.state(),e)},j=function(a){var b=f.closeItem(a),c=f.close(b.state());return i([b,c])},k=function(a,b,c,d){var e=a.level()===c-1&&b.type?{"list-style-type":b.type}:{},g=f.open(a,b,e),h=f.openItem(g.state(),g.state().level()==c?d:void 0,b);return i([g,h])},l=function(a,b,d){var e=a.level()>0?f.closeItem(a):c.result(a,[]),g=f.openItem(e.state(),d,b);return i([e,g])},m=function(a,b,c,d){return e.moveRight(a,c,function(a){return k(a,b,c,d)})},n=function(a,b){return e.moveLeft(a,b,j)},o=function(a,e,f,i){var j=f>1?d.finish(a):c.value(a,h.none()),k=j.value().map(function(a){return[g.curry(b.createEndElement,a)]}).getOr([]),l=(f-j.state().level(),m(j.state(),e,f,i));return c.result(l.state(),k.concat(l.result()))},p=function(a,b,d,e){var f=a.level()>b?n(a,b):c.result(a,[]),g=f.state().level()===b?l(f.state(),e,d):o(f.state(),e,b,d);return i([f,g])},q=n;return{openItem:p,closeAllLists:q}}),g("8x",["g","97","98"],function(a,b,c){var d=["disc","circle","square"],e=function(a,b){return"UL"===a.tag&&d[b-1]===a.type&&(a={tag:"UL"}),a};return function(d,f){var g=b.state(0,void 0,[],[]),h=function(b){a.each(b.result(),function(a){var b=a(f);d.emit(b)})},i=function(){var a=c.closeAllLists(g,0);g=a.state(),h(a)},j=function(a,b,d){if(d){var f=e(d,a),i=c.openItem(g,a,b,f);g=i.state(),h(i)}},k=function(){return g.level()},l=function(){return g.type()};return{closeAllLists:i,openItem:j,getCurrentListType:l,getCurrentLevel:k}}}),g("z",[],function(){var a=function(b){var c=b,d=function(){return c},e=function(a){c=a},f=function(){return a(d())};return{get:d,set:e,clone:f}};return a}),g("8j",["8x","p","z"],function(a,b,c){var d={getCurrentListType:function(){return e().getCurrentListType()},getCurrentLevel:function(){return e().getCurrentLevel()},closeAllLists:function(){return e().closeAllLists.apply(void 0,arguments)},openItem:function(){return e().openItem.apply(void 0,arguments)}},e=function(){return{getCurrentListType:b.constant({}),getCurrentLevel:b.constant(1),closeAllLists:b.identity,openItem:b.identity}};return function(f){var g=c(f),h=c(null),i=c(null),j=function(c){g.set(f),h.set(null),i.set(null),_emitter=a(c,c.document),e=b.constant(_emitter)};return{reset:j,nextFilter:g,originalToken:h,listType:i,emitter:d}}}),g("8k",["86"],function(a){return function(){var b=!1,c="",d=function(d){return b&&d.type()===a.TEXT_TYPE?(c+=d.text(),!0):d.type()===a.START_ELEMENT_TYPE&&"STYLE"===d.tag()?(b=!0,!0):d.type()===a.END_ELEMENT_TYPE&&"STYLE"===d.tag()&&(b=!1,!0)};return{check:d}}}),g("81",["7l","8i","8j","8k","8l","1g"],function(a,b,c,d,e,f){var g={inside:function(){return i},outside:function(){return j}},h=d(),i=b.inside(g),j=b.outside(g),k=c(j);return a(function(a,b,c){h.check(b)||e.go(a,k,b)},k.reset,"list.filters")}),h("8o",parseInt),g("8y",["g","1l","64","8o"],function(a,b,c,d){var e=[{regex:/^\(?[dc][\.\)]$/,type:{tag:"OL",type:"lower-alpha"}},{regex:/^\(?[DC][\.\)]$/,type:{tag:"OL",type:"upper-alpha"}},{regex:/^\(?M*(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})[\.\)]$/,type:{tag:"OL",type:"upper-roman"}},{regex:/^\(?m*(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})[\.\)]$/,type:{tag:"OL",type:"lower-roman"}},{regex:/^\(?[0-9]+[\.\)]$/,type:{tag:"OL"}},{regex:/^([0-9]+\.)*[0-9]+\.?$/,type:{tag:"OL",variant:"outline"}},{regex:/^\(?[a-z]+[\.\)]$/,type:{tag:"OL",type:"lower-alpha"}},{regex:/^\(?[A-Z]+[\.\)]$/,type:{tag:"OL",type:"upper-alpha"}}],f={"\u2022":{tag:"UL",type:"disc"},"\xb7":{tag:"UL",type:"disc"},"\xa7":{tag:"UL",type:"square"}},g={o:{tag:"UL",type:"circle"},"-":{tag:"UL",type:"disc"},"\u25cf":{tag:"UL",type:"disc"},"\ufffd":{tag:"UL",type:"circle"}},h=function(a,b){return void 0!==a.variant?a.variant:"("===b.charAt(0)?"()":")"===b.charAt(b.length-1)?")":"."},i=function(a){var b=a.split("."),e=function(){if(0===b.length)return a;var c=b[b.length-1];return 0===c.length&&b.length>1?b[b.length-2]:c}(),f=d(e,10);return c(f)?{}:{start:f}},j=function(c,d){var j=g[c]?[g[c]]:[],k=d&&f[c]?[f[c]]:d?[{tag:"UL",variant:c}]:[],l=a.bind(e,function(a){return a.regex.test(c)?[b.merge(a.type,i(c),{variant:h(a.type,c)})]:[]}),m=j.concat(k).concat(l);return a.map(m,function(a){return void 0!==a.variant?a:b.merge(a,{variant:c})})};return{extract:j}}),g("7o",[],function(){var a=function(a){return a.dom().textContent},b=function(a,b){a.dom().textContent=b};return{get:a,set:b}}),g("8m",["g","8y","8h","p","n","5d","6h","1d","6r","7o","3f","62","64","8o"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=18,p=function(a){var b=c.scan(a,["mso-list"],d.constant(!1));return b["mso-list"]},q=function(a){var b=p(a),c=/ level([0-9]+)/.exec(b);return c&&c[1]?e.some(n(c[1],10)):e.none()},r=function(a,c){var d=j.get(a).trim(),f=b.extract(d,c);return f.length>0?e.some(f):e.none()},s=function(a){return i.child(a,v)},t=function(a){return i.child(a,h.isComment).bind(k.nextSibling).filter(function(a){return"span"===h.name(a)})},u=function(a){return i.descendant(a,function(a){var b=h.isElement(a)?c.scan(a,["mso-list"],d.constant(!1)):[];return!!b["mso-list"]})},v=function(b){return h.isElement(b)&&f.getRaw(b,"font-family").exists(function(b){return a.contains(["wingdings","symbol"],b.toLowerCase())})},w=function(a){return f.getRaw(a,"margin-left").bind(function(a){var b=n(a,10);return m(b)?e.none():e.some(l.max(1,l.ceil(b/o)))})};return{getMsoList:p,extractLevel:q,extractEmblem:r,extractSymSpan:s,extractMsoIgnore:u,extractCommentSpan:t,isSymbol:v,deduceLevel:w}}),h("8n",JSON),g("82",["g","8m","n","j","7r","1d","1y","3f","8n","8o"],function(a,b,c,d,e,f,g,h,i,j){var k=function(a,b,c){d.set(a,"data-list-level",b);var e=i.stringify(c);d.set(a,"data-list-emblems",e)},l=function(b){var d=e.find(b,c.none());a.each(d,g.remove)},m=function(b,c,e,f){k(b,c,e),l(b),a.each(f,g.remove),d.remove(b,"style"),d.remove(b,"class")},n=function(a){return b.extractLevel(a).bind(function(c){return b.extractSymSpan(a).bind(function(d){return b.extractEmblem(d,!0).map(function(b){var e=function(){m(a,c,b,[d])};return{mutate:e}})})})},o=function(a){return b.extractLevel(a).bind(function(c){return b.extractCommentSpan(a).bind(function(d){return b.extractEmblem(d,b.isSymbol(d)).map(function(b){var e=function(){m(a,c,b,[d])};return{mutate:e}})})})},p=function(a){return b.extractLevel(a).bind(function(c){return b.extractCommentSpan(a).bind(function(d){return b.extractEmblem(d,b.isSymbol(d)).map(function(b){var e=function(){m(a,c,b,[d])};return{mutate:e}})})})},q=function(a){return"p"!==f.name(a)?c.none():b.extractLevel(a).bind(function(c){return b.extractMsoIgnore(a).bind(function(d){return b.extractEmblem(d,!1).map(function(b){var e=function(){m(a,c,b,[h.parent(d).getOr(d)])};return{mutate:e}})})})},r=function(a){return"p"!==f.name(a)?c.none():b.extractMsoIgnore(a).bind(function(c){var d=h.parent(c).getOr(c),e=b.isSymbol(d);return b.extractEmblem(c,e).bind(function(c){return b.deduceLevel(a).map(function(b){var e=function(){m(a,b,c,[d])};return{mutate:e}})})})},s=function(a){return n(a).orThunk(function(){return o(a)}).orThunk(function(){return p(a)}).orThunk(function(){return q(a)}).orThunk(function(){return r(a)})};return{find:s}}),g("7k",["6m","81","82","83"],function(a,b,c,d){var e=a.transformer({tags:[{name:d.pattern(/^(p|h\d+)$/),mutate:function(a){c.find(a).each(function(a){a.mutate()})}}]});return{filter:b,preprocess:e}}),g("6n",["6r"],function(a){var b=function(b){return a.first(b).isSome()},c=function(b,c,d){return a.ancestor(b,c,d).isSome()},d=function(b,c,d){return a.closest(b,c,d).isSome()},e=function(b,c){return a.sibling(b,c).isSome()},f=function(b,c){return a.child(b,c).isSome()},g=function(b,c){return a.descendant(b,c).isSome()};return{any:b,ancestor:c,closest:d,sibling:e,child:f,descendant:g}}),g("84",["g","j","6h","1d","6n"],function(a,b,c,d,e){var f=function(a){return"img"!==d.name(a)},g=function(a){var b=a.dom().attributes,c=void 0!==b&&null!==b&&b.length>0;return"span"!==d.name(a)||c},h=function(b){return!k(b)||g(b)&&e.descendant(b,function(b){var c=!k(b),e=!a.contains(["font","em","strong","samp","acronym","cite","code","dfn","kbd","tt","b","i","u","s","sub","sup","ins","del","var","span"],d.name(b));return d.isText(b)||c||e})},i=function(a){return"ol"===d.name(a)||"ul"===d.name(a)},j=function(a){var c=b.get(a,"src");return/^file:/.test(c)},k=function(a){return void 0===a.dom().attributes||null===a.dom().attributes||(0===a.dom().attributes.length||1===a.dom().attributes.length&&"style"===a.dom().attributes[0].name)},l=function(a){return 0===c.get(a).length};return{isNotImage:f,hasContent:h,isList:i,isLocal:j,hasNoAttributes:k,isEmpty:l}}),g("8p",["1d","7s"],function(a,b){var c=b(a.isText,"text"),d=function(a){return c.get(a)},e=function(a){return c.getOption(a)},f=function(a,b){c.set(a,b)};return{get:d,getOption:e,set:f}}),g("85",["g","1c","n","j","5d","k","6h","1x","29","1d","1y","8p","3f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b,c){var d=f.fromTag(b);h.before(c,d);var e=c.dom().attributes;a.each(e,function(a){d.dom().setAttribute(a.name,a.value)});var g=m.children(c);
-return i.append(d,g),k.remove(c),d},o=function(a){0===g.get(a).length&&h.append(a,f.fromTag("br"))},p=function(a){return m.prevSibling(a).bind(function(a){return j.isText(a)&&0===l.get(a).trim().length?p(a):"li"===j.name(a)?c.some(a):c.none()})},q=function(b){m.parent(b).each(function(c){var d=j.name(c);a.contains(["ol","ul"],d)&&p(b).fold(function(){var a=f.fromTag("li");e.set(a,"list-style-type","none"),h.wrap(b,a)},function(a){h.append(a,b)})})},r=function(a){var c=n("span",a),f={face:"font-family",size:"font-size",color:"color"},g={"font-size":{1:"8pt",2:"10pt",3:"12pt",4:"14pt",5:"18pt",6:"24pt",7:"36pt"}};b.each(f,function(a,b){if(d.has(c,b)){var f=d.get(c,b),h=void 0!==g[a]&&void 0!==g[a][f]?g[a][f]:f;e.set(c,a,h),d.remove(c,b)}})};return{changeTag:n,addBrTag:o,properlyNest:q,fontToSpan:r}}),g("7h",["7w","6m","7k","84","85","p","27","5d","3f","1d","83"],function(a,b,c,d,e,f,g,h,i,j,k){var l=b.unwrapper({tags:[{name:k.pattern(/^([OVWXP]|U[0-9]+|ST[0-9]+):/i)}]}),m=[b.pipeline([c.filter])],n=b.removal({attributes:[{name:k.pattern(/^v:/)},{name:k.exact("href"),value:k.contains("#_toc")},{name:k.exact("href"),value:k.contains("#_mso")},{name:k.pattern(/^xmlns(:|$)/)},{name:k.exact("type"),condition:d.isList}]}),o=b.removal({attributes:[{name:k.exact("id")},{name:k.exact("name")}]}),p=b.removal({tags:[{name:k.exact("script")},{name:k.exact("meta")},{name:k.exact("link")},{name:k.exact("style"),condition:d.isEmpty}],attributes:[{name:k.starts("on")},{name:k.exact('"')},{name:k.exact("lang")},{name:k.exact("language")}],styles:[{name:k.all(),value:k.pattern(/OLE_LINK/i)}]}),q=function(a){return!g.has(a,"ephox-limbo-transform")},r=function(a){return function(b){return i.parent(b).exists(function(b){return j.name(b)===a&&1===i.children(b).length})}},s=b.removal({styles:[{name:k.not(k.pattern(/width|height|list-style-type/)),condition:q},{name:k.pattern(/width|height/),condition:d.isNotImage}]}),t=b.removal({classes:[{name:k.not(k.exact("rtf-data-image"))}]}),u=b.removal({styles:[{name:k.pattern(a.validStyles())}]}),v=b.removal({classes:[{name:k.pattern(/mso/i)}]}),w=b.unwrapper({tags:[{name:k.exact("img"),condition:d.isLocal},{name:k.exact("a"),condition:d.hasNoAttributes}]}),x=b.unwrapper({tags:[{name:k.exact("a"),condition:d.hasNoAttributes}]}),y=b.removal({attributes:[{name:k.exact("style"),value:k.exact(""),debug:!0}]}),z=b.removal({attributes:[{name:k.exact("class"),value:k.exact(""),debug:!0}]}),A=b.unwrapper({tags:[{name:k.pattern(a.specialInline()),condition:f.not(d.hasContent)}]}),B=b.unwrapper({tags:[{name:k.exact("p"),condition:r("li")}]}),C=b.transformer({tags:[{name:k.exact("p"),mutate:e.addBrTag}]}),D=function(a){var b=e.changeTag("span",a);g.add(b,"ephox-limbo-transform"),h.set(b,"text-decoration","underline")},E=b.transformer({tags:[{name:k.pattern(/ol|ul/),mutate:e.properlyNest}]}),F=b.transformer({tags:[{name:k.exact("b"),mutate:f.curry(e.changeTag,"strong")},{name:k.exact("i"),mutate:f.curry(e.changeTag,"em")},{name:k.exact("u"),mutate:D},{name:k.exact("s"),mutate:f.curry(e.changeTag,"strike")},{name:k.exact("font"),mutate:e.fontToSpan,debug:!0}]}),G=b.removal({classes:[{name:k.exact("ephox-limbo-transform")}]}),H=b.removal({attributes:[{name:k.exact("href"),value:k.starts("file:///"),debug:!0}]});return{unwrapWordTags:l,removeWordAttributes:n,parseLists:m,removeExcess:p,cleanStyles:s,cleanClasses:t,mergeStyles:u,mergeClasses:v,removeLocalImages:w,removeVacantLinks:x,removeEmptyStyle:y,removeEmptyClass:z,pruneInlineTags:A,unwrapSingleParagraphsInlists:B,addPlaceholders:C,nestedListFixes:E,inlineTagFixes:F,cleanupFlags:G,removeLocalLinks:H,removeAnchors:o,none:f.noop}}),g("6k",["g","5a","7h","6m","7k","7l","p","k"],function(a,b,c,d,e,f,g,h){var i=function(a){return a.browser.isIE()&&a.browser.version.major>=11},j=function(a){return f(function(b,c,d){var e=a(h.fromDom(c.getNode())).fold(function(){return c},function(a){return d(c,a.dom())});b.emit(e)},g.noop,"image filters")},k=function(a,e,f){var g=f.browser.isFirefox()||f.browser.isSpartan()?b.local:b.vshape,h=i(f)?c.none:d.pipeline([j(g)]),k=g===b.local?c.none:c.removeLocalImages,l=a?h:c.none;return{annotate:[l],local:[k]}},l=function(a,b){var d=i(b)&&a;return d?[c.unwrapSingleParagraphsInlists]:[]},m=function(a,b,d){var e=[c.mergeStyles,c.mergeClasses],f=[c.cleanStyles,c.cleanClasses];return b?e:f},n=function(a,b,c){return i(c)||!a?[]:[e.preprocess]},o=function(a,b,d){if(!a)return[c.none];var e=[c.unwrapWordTags],f=i(d)?[]:c.parseLists;return e.concat(f).concat([c.removeWordAttributes])},p=function(a,b,d){return a?[c.removeAnchors]:[c.none]},q=function(b,d,e){var f=k(b,d,e);return a.flatten([n(b,d,e),f.annotate,[c.inlineTagFixes],o(b,d,e),[c.nestedListFixes],[c.removeExcess],p(b,d,e),f.local,m(b,d,e),[c.removeLocalLinks,c.removeVacantLinks],[c.removeEmptyStyle],[c.removeEmptyClass],[c.pruneInlineTags],[c.addPlaceholders],l(b,e),[c.cleanupFlags]])};return{derive:q}}),g("8q",[],function(){return["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"]}),g("87",["8q","g","p","j","3n","5d","k","1x","29","1d","3o","6r","1y","2a","20","8p","3f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){return function(){var r=function(a){return g.fromDom(a.dom().cloneNode(!1))},s=function(c){return!!j.isElement(c)&&("body"===j.name(c)||b.contains(a,j.name(c)))},t=function(a){return!!j.isElement(a)&&b.contains(["br","img","hr"],j.name(a))},u=function(a,b){return a.dom().compareDocumentPosition(b.dom())},v=function(a,b){var c=d.clone(a);d.setAll(b,c)};return{up:c.constant({selector:o.ancestor,closest:o.closest,predicate:l.ancestor,all:q.parents}),down:c.constant({selector:n.descendants,predicate:k.descendants}),styles:c.constant({get:f.get,getRaw:f.getRaw,set:f.set,remove:f.remove}),attrs:c.constant({get:d.get,set:d.set,remove:d.remove,copyTo:v}),insert:c.constant({before:h.before,after:h.after,afterAll:i.after,append:h.append,appendAll:i.append,prepend:h.prepend,wrap:h.wrap}),remove:c.constant({unwrap:m.unwrap,remove:m.remove}),create:c.constant({nu:g.fromTag,clone:r,text:g.fromText}),query:c.constant({comparePosition:u,prevSibling:q.prevSibling,nextSibling:q.nextSibling}),property:c.constant({children:q.children,name:j.name,parent:q.parent,isText:j.isText,isElement:j.isElement,getText:p.get,setText:p.set,isBoundary:s,isEmptyTag:t}),eq:e.eq,is:e.is}}}),g("8z",["2c"],function(a){return a.immutable("word","pattern")}),g("90",["2c"],function(a){var b=a.immutable("element","offset"),c=a.immutable("element","deltaOffset"),d=a.immutable("element","start","finish"),e=a.immutable("begin","end"),f=a.immutable("element","text");return{point:b,delta:c,range:d,points:e,text:f}}),g("9n",["p","n"],function(a,b){var c=a.constant(!1),d=a.constant(!0),e=function(a,b){return h(function(c,d,e){return c(a,b)})},f=function(a,b){return h(function(c,d,e){return d(a,b)})},g=function(a,b){return h(function(c,d,e){return e(a,b)})},h=function(e){var f=function(){return e(d,c,c)},g=function(){return e(b.none,b.none,function(a,c){return b.some(a)})},h=function(a){return e(c,c,function(b,c){return c.eq(b,a)})},i=function(){return e(a.constant(0),a.constant(1),function(a,b){return b.property().getText(a).length})};return{isBoundary:f,fold:e,toText:g,is:h,len:i}},i=function(a,b,c,d){return a.fold(b,c,d)};return{text:g,boundary:e,empty:f,cata:i}}),g("9o",["g","p"],function(a,b){var c=function(c,d,e,f){var g=a.findIndex(c,b.curry(f,d)),h=g>-1?g:0,i=a.findIndex(c,b.curry(f,e)),j=i>-1?i+1:c.length;return c.slice(h,j)};return{boundAt:c}}),g("9p",["g"],function(a){var b=function(b,c){var d=a.findIndex(b,c);return b.slice(0,d)};return{sliceby:b}}),g("9r",["1m"],function(a){var b=a.generate([{include:["item"]},{excludeWith:["item"]},{excludeWithout:["item"]}]),c=function(a,b,c,d){return a.fold(b,c,d)};return{include:b.include,excludeWith:b.excludeWith,excludeWithout:b.excludeWithout,cata:c}}),g("9q",["g","9r"],function(a,b){var c=function(a,c){return d(a,function(a){return c(a)?b.excludeWithout(a):b.include(a)})},d=function(c,d){var e=[],f=[];return a.each(c,function(a){var c=d(a);b.cata(c,function(){f.push(a)},function(){f.length>0&&e.push(f),e.push([a]),f=[]},function(){f.length>0&&e.push(f),f=[]})}),f.length>0&&e.push(f),e};return{splitby:c,splitbyAdv:d}}),g("9b",["9o","9p","9q"],function(a,b,c){var d=function(b,c,d,e){return a.boundAt(b,c,d,e)},e=function(a,b){return c.splitby(a,b)},f=function(a,b){return c.splitbyAdv(a,b)},g=function(a,c){return b.sliceby(a,c)};return{splitby:e,splitbyAdv:f,sliceby:g,boundAt:d}}),g("92",["g","p","n","90","9b"],function(a,b,c,d,e){var f=function(b){return a.foldr(b,function(a,b){return b.len()+a},0)},g=function(a,b){return e.sliceby(a,function(a){return a.is(b)})},h=function(a,b){return a.fold(c.none,function(a){return c.some(d.range(a,b,b+1))},function(e){return c.some(d.range(e,b,b+a.len()))})},i=function(c){return a.bind(c,function(a){return a.fold(b.constant([]),b.constant([]),function(a){return[a]})})};return{count:f,dropUntil:g,gen:h,justText:i}}),g("9w",["g","90","9n","92"],function(a,b,c,d){var e=function(b,d,f){if(b.property().isText(d))return[c.text(d,b)];if(b.property().isEmptyTag(d))return[c.empty(d,b)];if(b.property().isElement(d)){var g=b.property().children(d),h=b.property().isBoundary(d)?[c.boundary(d,b)]:[],i=void 0!==f&&f(d)?[]:a.bind(g,function(a){return e(b,a,f)});return h.concat(i).concat(h)}return[]},f=function(b,c,d){var f=e(b,c,d),g=function(a,b){return a};return a.map(f,function(a){return a.fold(g,g,g)})},g=function(a,c,f,g,h){var i=e(a,g,h),j=d.dropUntil(i,c),k=d.count(j);return b.point(g,k+f)},h=function(a,c,d,e){return a.property().parent(c).fold(function(){return b.point(c,d)},function(b){return g(a,c,d,b,e)})},i=function(a,c,d,e,f){return a.up().predicate(c,e).fold(function(){return b.point(c,d)},function(b){return g(a,c,d,b,f)})};return{typed:e,items:f,extractTo:i,extract:h}}),g("9x",["g","p","9w"],function(a,b,c){var d="\n",e=" ",f=function(a,b){return"img"===b.property().name(a)?e:d},g=function(e,g,h){var i=c.typed(e,g,h);return a.map(i,function(a){return a.fold(b.constant(d),f,e.property().getText)}).join("")};return{from:g}}),g("9d",["g","p"],function(a,b){var c=function(c,d,e){var f={len:void 0!==e?e:0,list:[]},g=a.foldl(c,function(a,c){var e=d(c,a.len);return e.fold(b.constant(a),function(b){return{len:b.finish(),list:a.list.concat([b])}})},f);return g.list};return{make:c}}),g("9e",["g","n"],function(a,b){var c=function(a,b){return b>=a.start()&&b<=a.finish()},d=function(d,e){var f=a.find(d,function(a){return c(a,e)});return b.from(f)},e=function(b,c){return a.findIndex(b,function(a){return a.start()===c})},f=function(a,b){var c=a[a.length-1]&&a[a.length-1].finish()===b;return c?a.length+1:-1},g=function(a,b,c){var d=e(a,b),g=e(a,c),h=g>-1?g:f(a,c);return d>-1&&h>-1?a.slice(d,h):[]},h=function(c,d){return b.from(a.find(c,d))};return{get:d,find:h,inUnit:c,sublist:g}}),g("9g",["g","1l","p"],function(a,b,c){var d=function(d,e){return a.map(d,function(a){return b.merge(a,{start:c.constant(a.start()+e),finish:c.constant(a.finish()+e)})})};return{translate:d}}),g("9f",["g","9e","9g"],function(a,b,c){var d=function(a,b,d){var e=d(a,b);return c.translate(e,a.start())},e=function(c,e,f){return 0===e.length?c:a.bind(c,function(c){var g=a.bind(e,function(a){return b.inUnit(c,a)?[a-c.start()]:[]});return g.length>0?d(c,g,f):[c]})};return{splits:e}}),g("94",["9d","9e","9f","9g"],function(a,b,c,d){var e=function(b,c,d){return a.make(b,c,d)},f=function(a,c){return b.get(a,c)},g=function(a,c){return b.find(a,c)},h=function(a,b,d){return c.splits(a,b,d)},i=function(a,b){return d.translate(a,b)},j=function(a,c,d){return b.sublist(a,c,d)};return{generate:e,get:f,find:g,splits:h,translate:i,sublist:j}}),g("9y",["90","9w","92","94"],function(a,b,c,d){var e=function(e,f,g,h){var i=b.typed(e,f,h),j=d.generate(i,c.gen),k=d.get(j,g);return k.map(function(b){return a.point(b.element(),g-b.start())})};return{find:e}}),g("9m",["9w","9x","9y"],function(a,b,c){var d=function(b,c,d){return a.typed(b,c,d)},e=function(b,c,d){return a.items(b,c,d)},f=function(b,c,d,e){return a.extract(b,c,d,e)},g=function(b,c,d,e,f){return a.extractTo(b,c,d,e,f)},h=function(a,b,d,e){return c.find(a,b,d,e)},i=function(a,c,d){return b.from(a,c,d)};return{extract:f,extractTo:g,all:e,from:d,find:h,toText:i}}),g("99",["g","9m","9n","9b","9r"],function(a,b,c,d,e){var f=function(f,g,h){var i=a.bind(g,function(a){return b.from(f,a,h)}),j=d.splitbyAdv(i,function(a){return c.cata(a,function(){return e.excludeWithout(a)},function(){return e.excludeWith(a)},function(){return e.include(a)})});return a.filter(j,function(a){return a.length>0})};return{group:f}}),g("9s",["g","n"],function(a,b){var c=function(c,d,e){var f=[d].concat(c.up().all(d)),g=[e].concat(c.up().all(e)),h=a.find(f,function(b){return a.exists(g,function(a){return c.eq(a,b)})});return b.from(h)};return{common:c}}),g("9t",["g"],function(a){var b=["table","tbody","thead","tfoot","tr","ul","ol"];return function(c){var d=c.property(),e=function(b,c){return d.parent(b).map(d.name).map(function(b){return!a.contains(c,b)}).getOr(!1)},f=function(a){return d.isText(a)&&e(a,b)};return{validateText:f}}}),g("9a",["g","p","9m","9s","9t"],function(a,b,c,d,e){var f=function(c,d,e){return a.findIndex(d,b.curry(c.eq,e))},g=function(a,b,c,d,e){return b<d?a.slice(b+c,d+e):a.slice(d+e,b+c)},h=function(h,i,j,k,l){return h.eq(i,k)?[i]:d.common(h,i,k).fold(function(){return[]},function(d){var m=[d].concat(c.all(h,d,b.constant(!1))),n=f(h,m,i),o=f(h,m,k),p=n>-1&&o>-1?g(m,n,j,o,l):[],q=e(h);return a.filter(p,q.validateText)})};return{range:h}}),g("91",["99","9a"],function(a,b){var c=function(a,c,d,e,f){return b.range(a,c,d,e,f)},d=function(b,c,d){return a.group(b,c,d)};return{range:c,group:d}}),g("9z",[],function(){var a=function(a){var b=/^[a-zA-Z]/.test(a)?"":"e",c=a.replace(/[^\w]/gi,"-");return b+c};return{css:a}}),g("a0",["g"],function(a){var b=function(b,c){if(0===c.length)return[b];var d=a.foldl(c,function(a,c){if(0===c)return a;var d=b.substring(a.prev,c);return{prev:c,values:a.values.concat([d])}},{prev:0,values:[]}),e=c[c.length-1];return e<b.length?d.values.concat(b.substring(e)):d.values};return{splits:b}}),g("9u",["9z","a0"],function(a,b){var c=function(a,c){return b.splits(a,c)},d=function(b){return a.css(b)};return{cssSanitise:d,splits:c}}),g("9c",["g","n","90","94","9u"],function(a,b,c,d,e){var f=function(f,g,h){var i=f.property().getText(g),j=a.filter(e.splits(i,h),function(a){return a.length>0});if(j.length<=1)return[c.range(g,0,i.length)];f.property().setText(g,j[0]);var k=d.generate(j.slice(1),function(a,d){var e=f.create().text(a),g=c.range(e,d,d+a.length);return b.some(g)},j[0].length),l=a.map(k,function(a){return a.element()});return f.insert().afterAll(g,l),[c.range(g,0,j[0].length)].concat(k)};return{subdivide:f}}),g("93",["g","p","9c","94"],function(a,b,c,d){var e=function(e,f,g){var h=a.bind(g,function(a){return[a.start(),a.finish()]}),i=function(a,b){return c.subdivide(e,a.element(),b)},j=d.splits(f,h,i),k=function(c){var f=d.sublist(j,c.start(),c.finish()),g=a.map(f,function(a){return a.element()}),h=a.map(g,e.property().getText).join("");return{elements:b.constant(g),word:c.word,exact:b.constant(h)}};return a.map(g,k)};return{separate:e}}),g("8s",[],function(){var a=function(){return"\ufeff"};return{zeroWidth:a}}),g("89",["8s","p"],function(a,b){var c="\\w'\\-\\u0100-\\u017F\\u00C0-\\u00FF"+a.zeroWidth()+"\\u2018\\u2019",d="[^"+c+"]",e="["+c+"]";return{chars:b.constant(c),wordbreak:b.constant(d),wordchar:b.constant(e)}}),g("8a",["4v"],function(a){return function(b,c,d,e){var f=function(){return new a(b,e.getOr("g"))};return{term:f,prefix:c,suffix:d}}}),g("8c",["p","n","89","8a"],function(a,b,c,d){var e=function(c){return d(c,a.constant(0),a.constant(0),b.none())},f=function(a){var e="((?:^'?)|(?:"+c.wordbreak()+"+'?))"+a+"((?:'?$)|(?:'?"+c.wordbreak()+"+))",f=function(a){return a.length>1?a[1].length:0},g=function(a){return a.length>2?a[2].length:0};return d(e,f,g,b.none())};return{token:e,word:f}}),g("8b",["8c"],function(a){var b=function(a){return a.replace(/[-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},c=function(c){var d=b(c);return a.word(d)},d=function(c){var d=b(c);return a.token(d)};return{sanitise:b,word:c,token:d}}),g("7n",["89","8a","8b","8c"],function(a,b,c,d){var e=function(a){return c.word(a)},f=function(a){return c.token(a)},g=function(a,c,d,e){return b(a,c,d,e)},h=function(a){return d.word(a)},i=function(a){return d.token(a)},j=function(a){return c.sanitise(a)},k=function(){return a.chars()},l=function(){return a.wordbreak()},m=function(){return a.wordchar()};return{safeword:e,safetoken:f,custom:g,unsafeword:h,unsafetoken:i,sanitise:j,chars:k,wordbreak:l,wordchar:m}}),g("9h",["p"],function(a){var b=function(b,c){for(var d=c.term(),e=[],f=d.exec(b);f;){var g=f.index+c.prefix(f),h=f[0].length-c.prefix(f)-c.suffix(f);e.push({start:a.constant(g),finish:a.constant(g+h)}),d.lastIndex=g+h,f=d.exec(b)}return e};return{all:b}}),g("9i",["g","1l","9h","12"],function(a,b,c,d){var e=function(a){var b=d.prototype.slice.call(a,0);return b.sort(function(a,b){return a.start()<b.start()?-1:b.start()<a.start()?1:0}),b},f=function(d,f){var g=a.bind(f,function(e){var f=c.all(d,e.pattern());return a.map(f,function(a){return b.merge(e,{start:a.start,finish:a.finish})})});return e(g)};return{search:f}}),g("95",["9h","9i"],function(a,b){var c=function(b,c){return a.all(b,c)},d=function(a,c){return b.search(a,c)};return{findall:c,findmany:d}}),g("8r",["g","n","8z","90","91","92","93","7n","94","95"],function(a,b,c,d,e,f,g,h,i,j){var k=function(a,c){return i.generate(c,function(c,e){var f=e+a.property().getText(c).length;return b.from(d.range(c,e,f))})},l=function(b,c,d,h){var i=e.group(b,c,h),l=a.bind(i,function(c){var e=f.justText(c),h=a.map(e,b.property().getText).join(""),i=j.findmany(h,d),l=k(b,e);return g.separate(b,l,i)});return l},m=function(b,d,e,f){var g=a.map(e,function(a){var b=h.safeword(a);return c(a,b)});return l(b,d,g,f)},n=function(a,b,d,e){var f=c(d,h.safetoken(d));return l(a,b,[f],e)};return{safeWords:m,safeToken:n,run:l}}),g("88",["8r"],function(a){var b=function(b,c,d,e){return a.run(b,c,d,e)},c=function(b,c,d,e){return a.safeWords(b,c,d,e)},d=function(b,c,d,e){return a.safeToken(b,c,d,e)};return{safeWords:c,safeToken:d,run:b}}),g("7m",["87","88"],function(a,b){var c=a(),d=function(a,d,e){return b.run(c,a,d,e)},e=function(a,d,e){return b.safeWords(c,a,d,e)},f=function(a,d,e){return b.safeToken(c,a,d,e)};return{safeWords:e,safeToken:f,run:d}}),g("1z",["20"],function(a){var b=function(b){return a.first(b).isSome()},c=function(b,c,d){return a.ancestor(b,c,d).isSome()},d=function(b,c){return a.sibling(b,c).isSome()},e=function(b,c){return a.child(b,c).isSome()},f=function(b,c){return a.descendant(b,c).isSome()},g=function(b,c,d){return a.closest(b,c,d).isSome()};return{any:b,ancestor:c,sibling:d,child:e,descendant:f,closest:g}}),g("6l",["g","n","7m","7n","2c","j","5d","k","1x","29","1d","1z","7o","3f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\.\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w\.]+@)[A-Za-z0-9\.\-]+)(:[0-9]+)?((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-_.~*+=!&;:'%@?^${}()\w,]*)#?(?:[\-_.~*+=!&;:'%@?^${}()\w,\/]*))?)/g,p=o.source,q=3,r=9,s=function(a){var b=e.immutable("word","pattern"),f=d.unsafetoken(p),g=b("__INTERNAL__",f);return c.run(a,[g])},t=function(a){return!l.closest(a,"a")},u=function(a){return b.from(a[0]).filter(t).map(function(b){var c=h.fromTag("a");return i.before(b,c),j.append(c,a),f.set(c,"href",m.get(c)),c})},v=function(b){var c=s(b);a.each(c,function(a){var b=a.exact();(b.indexOf("@")<0||w(b))&&u(a.elements())})},w=function(a){var b=a.indexOf("://");return b>=q&&b<=r},x=function(b){a.each(b,function(a){k.isElement(a)&&g.getRaw(a,"position").isSome()&&g.remove(a,"position")})},y=function(b){var c=a.filter(b,function(a){return"li"===k.name(a)});if(c.length>0){var d=n.prevSiblings(c[0]),e=h.fromTag("ul");if(i.before(b[0],e),d.length>0){var f=h.fromTag("li");i.append(e,f),j.append(f,d)}j.append(e,c)}};return{links:v,position:x,list:y}}),g("55",["g","6k","6l","6m","6h","3f"],function(a,b,c,d,e,f){var g=function(b){var d=f.children(b);a.each([c.links,c.position,c.list],function(a){a(d)})},h=function(a,c,f,h,i){g(f);var j=e.get(f),k=b.derive(i,h,c);return d.go(a,j,k)};return{go:h,preprocess:g}}),g("6i",["4q","4r","4y","2w","2t","55","2f","28","1f"],function(a,b,c,d,e,f,g,h,i){var j=e.detect(),k=function(a,b,c,d){try{var e=f.go(a,j,b,c,d),k=void 0!==e&&null!==e&&e.length>0,l=k?h.fromHtml(e):[];return g.value(l)}catch(m){return i.error(m),g.error("errors.paste.process.failure")}},l=function(e,f,g,h,i){var j=k(e,f,h,g);return j.fold(function(b){return a.error(b)},function(e){return a.sync(function(f){i.get(function(g){var h=c.findImages(e,g);a.call(f,{response:d.paste(e,g,h),bundle:b.nu({})})})})})};return{transfer:l}}),g("53",["6i","g","o","n","1y","3f"],function(a,b,c,d,e,f){var g=function(b,c,d,e,f){return a.transfer(b,c,e,d,f)},h=function(g,h,i){var j=!1,k=!0,l=function(a,b){return void 0===h||b?d.none():h.findClipboardTags(f.children(a))},m=l(i,j).getOr([]);b.each(m,e.remove);var n=c.nu(function(a){a([])});return a.transfer(g,i,j,k,n)};return{internal:h,external:g}}),g("6j",["g","k","6h","7o"],function(a,b,c,d){var e=function(a){var e=b.fromTag("div");return d.set(e,a),c.get(e)},f=function(b){var c=b.trim().split(/\n{2,}|(?:\r\n){2,}/),d=a.map(c,function(a){return a.split(/\n|\r\n/).join("<br />")});return 1===d.length?d[0]:a.map(d,function(a){return"<p>"+a+"</p>"}).join("")};return{encode:e,convert:f}}),g("54",["4q","6j","4r","31","2w","n","23","28","11"],function(a,b,c,d,e,f,g,h,i){var j=function(a){return a.length>0},k=function(a){return d.isValidData(a)?g.findMap(a.types,function(b){return"text/plain"===b?f.some(a.getData(b)):f.none()}):f.none()},l=function(){var a=i.clipboardData;return void 0!==a?f.some(a.getData("text")):f.none()},m=function(a){var c=b.encode(a),d=b.convert(c),f=h.fromHtml(d);return e.paste(f,[],[])},n=function(b){return a.sync(function(f){var g=d.isValidData(b)?k:l,h=g(b).filter(j).fold(e.cancel,m);a.call(f,{response:h,bundle:c.nu({})})})};return{handle:n}}),g("34",["4q","4r","4z","51","52","53","54","2w","2t","55","p","k","29","3f","1f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=i.detect(),q=function(a,b,c){return g.handle(a)},r=function(b,c){var d=function(b,d,e){var f=l.fromTag("div");m.append(f,b),j.preprocess(f);var g=n.children(f);return a.pure({response:h.paste(g,d,e),bundle:c.bundle()})},e=k.curry(a.pass,c);return h.cata(c.response(),e,d,e,d)},s=function(a,b){return function(d,e){var g=e.bundle();return c.proxyBin(g).handle("There was no proxy bin setup. Ensure you have run proxyStep first.",function(c){var d=n.owner(a);return f.internal(d,b,c)})}},t=function(a,b){return function(d,e){var g=e.bundle();return c.proxyBin(g).handle("There was no proxy bin setup. Ensure you have run proxyStep first.",function(d){var e=c.merging(g),h=c.isWord(g),i=c.isInternal(g),j=c.backgroundAssets(g),k=n.owner(a);return i?f.internal(k,b,d):f.external(k,d,e,h,j)})}},u=function(){return function(b,c){return a.error("errors.local.images.disallowed")}},v=function(){return function(b,c){if(p.browser.isSafari()){var d=p.deviceType.isWebView()?"webview.imagepaste":"safari.imagepaste";return a.error(d)}return e.handle(b)}},w=function(a){return function(b,e){var f=c.mergeOffice(e.bundle());return d.handle(b,f,a)}},x=function(b,c){return a.cancel()},y=function(c){return function(d,e){var f=b.merge(e.bundle(),b.nu(c));return a.pure({response:e.response(),bundle:f})}};return{plain:q,autolink:r,noImages:u,images:v,internal:s,external:t,gwt:w,setBundle:y,none:x}}),g("56",["5c","p"],function(a,b){var c=a.resolve("smartpaste-eph-bin");return{binStyle:b.constant(c)}}),g("57",["6m","j","6h","6n"],function(a,b,c,d){var e=function(a,c){return d.descendant(a,function(a){return!!b.has(a,"style")&&b.get(a,"style").indexOf("mso-")>-1})},f=function(b,d){var e=c.get(b);return a.isWordContent(e,d)},g=function(a,b){var c=a.browser,d=c.isIE()&&c.version.major>=11?e:f;return d(b,a)};return{isWord:g}}),g("35",["4q","4r","56","2t","57","27","3f"],function(a,b,c,d,e,f,g){var h=d.detect();return function(d,i,j,k,l){return function(m,n){var o=l(),p=n.response();return a.sync(function(l){var n=d(j);n.events.after.bind(function(d){var j=d.container();i(j),f.add(j,c.binStyle());var m=e.isWord(h,j),n=g.children(j),q=k.findClipboardTags(n,m).isSome();a.call(l,{response:p,bundle:b.nu({isWord:m,isInternal:q,proxyBin:j,backgroundAssets:o})})}),o.convert(m.data()),n.run()})}}}),g("8d",["78","79","12","62","13","8o"],function(a,b,c,d,e,f){var g=function(a){for(var b=new c(a.length/2),e=0;e<a.length;e+=2){var g=a.substr(e,2),h=d.floor(e/2);b[h]=f(g,16)}return b},h=function(c,d){if(0===c.length)throw"Zero length content passed to Hex conversion";var e=g(c),f=b(e);return a([f],{type:d})};return{convert:h}}),g("7q",["1m"],function(a){var b=a.generate([{unsupported:["id","message"]},{supported:["id","contentType","blob"]}]),c=function(a,b,c){return a.fold(b,c)};return{unsupported:b.unsupported,supported:b.supported,cata:c}}),g("8e",["p","n"],function(a,b){var c="{\\pict{",d="i",e="{\\shp{",f="s",g=function(a,b,c){return b.indexOf(a,c)},h=function(c,d,e,f,g){return c===-1||d===-1?b.none():b.some({start:a.constant(c),end:a.constant(d),bower:e,regex:a.constant(f),idRef:a.constant(g)})},i=function(a,b,c){return function(){return a.substring(b,c)}},j=function(a,b){if(b===-1)return b;var c,d,e=0,f=a.length;do if(c=a.indexOf("{",b),d=a.indexOf("}",b),d>c&&c!==-1?(b=c+1,++e):(c>d||c<0)&&d!==-1&&(b=d+1,--e),b>f||d===-1)return-1;while(e>0);return b},k=function(a,b,c,e){var f=i(a,c,e),g=/[^a-fA-F0-9]([a-fA-F0-9]+)\}$/;return h(c,e,f,g,d)},l=function(a,b,c,d){var e=i(a,c,d),g=/([a-fA-F0-9]{64,})(?:\}.*)/;return h(c,d,e,g,f)},m=function(d,f){var h=g(c,d,f),i=j(d,h),m=g(e,d,f),n=j(d,m),o=a.curry(l,d,f,m,n),p=a.curry(k,d,f,h,i);return h===-1&&m===-1?b.none():h===-1?o():m===-1?p():m<h&&n>i?p():h<m&&i>n?o():h<m?p():m<h?o():b.none()};return{identify:m,endBracket:j}}),g("7p",["8d","7q","8e","n","2f"],function(a,b,c,d,e){var f=function(a,b){return c.identify(a,b)},g=function(a){return a.indexOf("\\pngblip")>=0?e.value("image/png"):a.indexOf("\\jpegblip")>=0?e.value("image/jpeg"):e.error("errors.imageimport.unsupported")},h=function(a){return a.replace(/\r/g,"").replace(/\n/g,"")},i=function(a,b){var c=a.match(b);return c&&c[1]&&c[1].length%2===0?e.value(c[1]):e.error("errors.imageimport.invalid")},j=function(a){var b=a.match(/\\shplid(\d+)/);return null!==b?d.some(b[1]):d.none()},k=function(c){var d=c.bower(),e=c.regex();return j(d).map(function(f){var h=c.idRef()+f;return g(d).fold(function(a){return b.unsupported(h,a)},function(c){return i(d,e).fold(function(a){return b.unsupported(h,a)},function(d){return b.supported(h,c,a.convert(d,c))})})})},l=function(a){for(var b=[],c=function(){return a.length},d=function(a){var c=k(a);return b=b.concat(c.toArray()),a.end()},e=0;e<a.length;)e=f(a,e).fold(c,d);return b},m=function(a){var b=h(a);return l(b)};return{nextBower:f,extractId:j,extractContentType:g,extractHex:i,images:m}}),g("6o",["7p","7q","2f"],function(a,b,c){var d=function(b){return a.images(b)},e=function(a){return b.cata(a,function(a,b){return a},function(a,b,c){return a})},f=function(a){return b.cata(a,function(a,b){return c.error(b)},function(a,b,d){return c.value(d)})};return{images:d,toId:e,toBlob:f}}),g("6p",["6o","4y","g","i","n","j","27","1f"],function(a,b,c,d,e,f,g,h){var i=function(b,d,f){var g=c.find(d,function(c){return a.toId(c)===b});return e.from(g)},j=function(a,b,c){return e.from(b[c])},k={local:j,code:i},l=function(b){var d=[],e=function(b){return!c.exists(d,function(c){return a.toId(c)===b})};return c.bind(b,function(b){var c=a.toId(b);return e(c)?(d.push(b),[b]):[]})},m=function(i,j,m,n){var o=l(j),p=[],q=!1,r=c.bind(i,function(b,c){var d=f.get(b,"data-image-type"),i=f.get(b,"data-image-id");g.remove(b,"rtf-data-image"),f.remove(b,"data-image-type"),f.remove(b,"data-image-id");var j=void 0!==k[d]?k[d]:e.none;return j(i,o,c).fold(function(){return h.log("WARNING: unable to find data for image ",b.dom()),[]},function(c){return a.toBlob(c).fold(function(a){return q=!0,f.set(b,"alt",n(a)),[]},function(a){return p.push(b),[a]})})});d.multiple(r).get(function(a){var c=b.updateSources(a,p);m(a,c,q)})};return{convert:m}}),g("59",["6o","6p","5a","21","22","3f"],function(a,b,c,d,e,f){return function(g){var h=g.translations,i=e.create({insert:d(["elements","assets","correlated"]),incomplete:d(["elements","assets","correlated","message"])}),j=function(d,e,g,j,k){var l=a.images(j),m=c.find(d);b.convert(m,l,function(a,b,c){var h=f.children(d),j=a.concat(e),l=b.concat(g);c?i.trigger.incomplete(h,j,l,"errors.imageimport.failed"):i.trigger.insert(h,j,l),k()},h)};return{events:i.registry,processRtf:j}}}),g("58",["59","g","5a","21","22","1y","3f"],function(a,b,c,d,e,f,g){return function(h,i){var j=e.create({error:d(["message"]),insert:d(["elements","assets","correlated"]),incomplete:d(["elements","assets","correlated","message"])}),k=a(i);k.events.incomplete.bind(function(a){j.trigger.incomplete(a.elements(),a.assets(),a.correlated(),a.message())}),k.events.insert.bind(function(a){j.trigger.insert(a.elements(),a.assets(),a.correlated())});var l=function(a,d,e){var l=function(b){k.processRtf(a,d,e,b.rtf(),b.hide())},m=function(h){var i=c.find(a);b.each(i,f.remove),j.trigger.incomplete(g.children(a),d,e,h)},n=function(){var h=c.find(a);b.each(h,f.remove),j.trigger.insert(g.children(a),d,e)},o=function(a){m(a.message())};if(i.allowLocalImages===!0&&i.enableFlashImport===!0){var p=h(i);p.events.response.bind(l),p.events.cancel.bind(n),p.events.failed.bind(o),p.events.error.bind(o),p.open()}else m("errors.local.images.disallowed")};return{events:j.registry,gordon:l}}}),g("36",["4q","4r","58","59","2w","g","5a","p","n","z","k","29","1y","3f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return function(o,p){var q=c(o,p),r=d(p),s=j(i.none()),t=function(c){s.get().each(function(d){a.call(d,{response:c,bundle:b.nu({})})})};return q.events.insert.bind(function(a){t(e.paste(a.elements(),a.assets(),a.correlated()))}),q.events.incomplete.bind(function(a){t(e.incomplete(a.elements(),a.assets(),a.correlated(),a.message()))}),q.events.error.bind(function(a){var b=a.message(),c=e.error(b);t(c)}),r.events.insert.bind(function(a){t(e.paste(a.elements(),a.assets(),a.correlated()))}),r.events.incomplete.bind(function(a){t(e.incomplete(a.elements(),a.assets(),a.correlated(),a.message()))}),function(b,c){return a.sync(function(d){var j=function(){a.call(d,{response:c.response(),bundle:c.bundle()})},o=function(a,c,o){s.set(i.some(d));var u=k.fromTag("div");l.append(u,a),b.rtf().fold(function(){g.exists(u)?q.gordon(u,c,o):j()},function(a){if(p.allowLocalImages===!0)r.processRtf(u,c,o,a,h.noop);else{var b=g.find(u),d=n.children(u);b.length>0?(f.each(b,m.remove),t(e.incomplete(d,c,o,"errors.local.images.disallowed"))):t(e.paste(d,c,o))}})};e.cata(c.response(),j,o,j,o)})}}}),g("1p",["2z","30","31","32","33","34","35","36","2t","p","n","2c","37","11"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=l.immutable("data","rtf"),p=i.detect(),q="^image/",r="file",s=[q,r],t="html",u="rtf",v=function(a){return m.contains(a,"<html")&&(m.contains(a,'xmlns:o="urn:schemas-microsoft-com:office:office"')||m.contains(a,'xmlns:x="urn:schemas-microsoft-com:office:excel"'))},w=function(a){var b=a.clipboardData;return c.isValidData(b)?c.getFlavor(b.types,t).bind(function(c){var d=b.getData(c.type);return v(d)?k.some(o(d,C(a))):k.none()}):k.none()},x=function(a){return o(a,k.none())},y=function(a){if(p.browser.isIE()||p.browser.isFirefox())return k.none();if(c.isValidData(a.clipboardData)){var b=a.clipboardData;return c.getPreferredFlavor(s,b.types).map(function(a){return b.items;
-})}return k.none()},z=function(a,b){var d=c.isValidData(b.clipboardData)?b.clipboardData.types:[];return c.getFlavor(d,a.clipboardType()).map(function(a){return o(b,k.none())})},A=function(a){return p.browser.isIE()?k.some(n.clipboardData):c.isValidData(a.clipboardData)?k.some(a.clipboardData):k.none()},B=function(a){if(p.browser.isSpartan())return k.none();var b=a.clipboardData,d=c.isValidData(b)?b.types:[];return 1===d.length&&"text/plain"===d[0]?k.some(b):k.none()},C=function(a){var b=a.clipboardData;return c.isValidData(b)?c.getFlavor(b.types,u).bind(function(a){var c=b.getData(a.type);return c.length>0?k.some(c):k.none()}):k.none()},D=function(a,b,c,d){return{label:j.constant(a),getAvailable:b,steps:j.constant(c),capture:j.constant(d)}},E=function(c,d,h,i){var k=j.curry(z,i);return D("Within Textbox.io (tables) pasting",k,[a.normal(g(d,c,h,i,b.ignore)),a.normal(e.fixed(!0,!0)),a.normal(f.internal(h,i))],!1)},F=function(c,i,j,k,l,m,n){return D("Outside of Textbox.io pasting (could be internal but another browser)",x,[a.normal(g(k,j,l,n,b.background)),a.normal(e.fromConfigIfExternal(c,i)),a.normal(f.external(l,n)),a.blocking(h(m,i)),a.normal(d(i))],!1)},G=function(b,c,d,g){return D("GWT pasting",w,[a.normal(f.setBundle({isWord:!0})),a.normal(e.fromConfig(c,d)),a.normal(f.gwt(b)),a.blocking(h(g,d))],!0)},H=function(b){return D("Image pasting",y,[a.normal(b.allowLocalImages===!1?f.noImages(j.noop):f.images())],!0)},I=function(){return D("Only plain text is available to paste",B,[a.normal(f.plain),a.normal(f.autolink)],!0)},J=function(){return D("Plain text pasting",A,[a.normal(f.plain),a.normal(f.autolink)],!0)},K=function(){return D("There is no valid way to paste",k.some,[a.normal(f.none)],!1)};return{internal:E,pastiche:F,gwt:G,image:H,text:J,onlyText:I,none:K}}),g("5b",["5c","2t","j","27","k","6h","29"],function(a,b,c,d,e,f,g){var h=function(){var a=b.detect(),c=a.os.isOSX();return c?["\u2318"]:["Ctrl"]},i=function(a){return e.fromHtml("<p>"+a("cement.dialog.flash.press-escape")+"</p>")},j=function(b){var c=e.fromTag("div");d.add(c,a.resolve("flashbin-helpcopy"));var f=h(),j=e.fromHtml("<p>"+b("cement.dialog.flash.trigger-paste")+"</p>"),k=e.fromHtml('<div><span class="ephox-polish-help-kbd">'+f+'</span> + <span class="ephox-polish-help-kbd">V</span></div>');return d.add(k,a.resolve("flashbin-helpcopy-kbd")),g.append(c,[j,k,i(b)]),c},k=function(b){var c=e.fromTag("div");d.add(c,a.resolve("flashbin-helpcopy"));var f=e.fromHtml("<p>"+b("cement.dialog.flash.missing")+"</p>");return g.append(c,[f,i(b)]),c},l=function(b){var h=e.fromTag("div");d.add(h,a.resolve("flashbin-loading"));var i=e.fromTag("div");d.add(i,a.resolve("flashbin-loading-spinner"));var j=e.fromTag("p"),k=b("loading.wait");return f.set(j,k),c.set(j,"aria-label",k),g.append(h,[i,j]),h};return{paste:j,noflash:k,indicator:l}}),h("5e",navigator),g("38",["5b","5c","2t","p","27","5d","k","1x","29","5e"],function(a,b,c,d,e,f,g,h,i,j){var k=c.detect(),l=function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash")},m=function(){try{var a=k.browser.isIE()?l():j.plugins["Shockwave Flash"];return void 0!==a}catch(b){return!1}},n=function(b,c,e,f){var g=a.noflash(f);return h.append(b,g),{reset:d.noop}},o=function(b,c,d,e){var g=a.paste(e),h=a.indicator(e);i.append(b,[h,g,c.element()]);var j=function(){f.setAll(h,{height:"0",padding:"0"})},k=function(){f.set(g,"display","block"),f.set(h,"display","none"),d()},l=function(){f.set(g,"display","none"),f.set(h,"display","block"),f.remove(h,"height"),f.remove(h,"padding"),d()};return c.events.spin.bind(l),c.events.reset.bind(k),c.events.hide.bind(j),{reset:k}};return function(a,c,f){var h=g.fromTag("div"),i="flashbin-wrapper-"+(k.os.isOSX()?"cmd":"ctrl");e.add(h,b.resolve(i));var j=m()?o:n,l=j(h,a,c,f.translations);return{element:d.constant(h),reset:l.reset}}}),h("5k",clearInterval),h("5m",setInterval),g("5f",["n","21","22","z","5k","5m"],function(a,b,c,d,e,f){var g=function(){var g=d(a.none()),h=c.create({crashed:b([]),timeout:b([])}),i=function(b,c,d,i){var j=c,k=f(function(){d()?e(k):j<=0?(h.trigger.timeout(),e(k)):i()&&(e(k),h.trigger.crashed()),j--},b);g.set(a.some(k))},j=function(){g.get().each(function(a){e(a)})};return{start:i,stop:j,events:h.registry}};return{responsive:g}}),g("5g",["1b","g","5k","5m"],function(a,b,c,d){return function(e,f,g){var h=function(c){return b.forall(f,function(b){return a.isFunction(c[b])})},i=function(){var b=e.dom();a.isFunction(b.PercentLoaded)&&100===b.PercentLoaded()&&h(b)&&(l(),g())},j=!0,k=d(i,500),l=function(){j&&(c(k),j=!1)};return{stop:l}}}),g("6t",["72"],function(a){var b=function(a,b){return void 0!==a[b]&&null!==a[b]||(a[b]={}),a[b]},c=function(c,d){for(var e=d||a,f=c.split("."),g=0;g<f.length;++g)e=b(e,f[g]);return e};return{namespace:c}}),g("5h",["6t"],function(a){var b=function(b){var c=a.namespace(b);c.callbacks={};var d=0,e=function(){var a="callback_"+d;return d++,a},f=function(a){return b+".callbacks."+a},g=function(a,b){var d=e();return c.callbacks[d]=function(){b||j(d),a.apply(null,arguments)},f(d)},h=function(a){return g(a,!1)},i=function(a){return g(a,!0)},j=function(a){var b=a.substring(a.lastIndexOf(".")+1);void 0!==c.callbacks[b]&&delete c.callbacks[b]};return c.ephemeral=h,c.permanent=i,c.unregister=j,c};return{install:b}}),g("5j",["p","n","3n","k","6n","3f","1g"],function(a,b,c,d,e,f,g){var h=function(a){a.dom().focus()},i=function(a){a.dom().blur()},j=function(a){var b=f.owner(a).dom();return a.dom()===b.activeElement},k=function(a){var c=void 0!==a?a.dom():g;return b.from(c.activeElement).map(d.fromDom)},l=function(b){var d=f.owner(b),g=k(d).filter(function(d){return e.closest(d,a.curry(c.eq,b))});g.fold(function(){h(b)},a.noop)},m=function(a){return k(f.owner(a)).filter(function(b){return a.dom().contains(b.dom())})};return{hasFocus:j,focus:h,blur:i,active:k,search:m,focusInside:l}}),h("5l",clearTimeout),h("5n",unescape),g("39",["5f","5g","5c","g","1c","1s","2t","5h","p","n","21","22","5i","27","5d","k","5j","1x","5k","5l","1f","5m","x","5n","11"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y){var z=h.install("ephox.flash"),A=g.detect(),B=j.none();return function(g){var h=l.create({response:k(["rtf"]),spin:k([]),cancel:k([]),error:k(["message"]),reset:k([]),hide:k([]),failed:k(["message"])}),j=!1,s=p.fromTag("div");n.add(s,c.resolve("flashbin-target"));var v=a.responsive();v.events.crashed.bind(function(){h.trigger.failed("flash.crashed")}),v.events.timeout.bind(function(){h.trigger.failed("flash.crashed")});var C=function(a){v.stop(),w(function(){""===a?h.trigger.error("flash.crashed"):h.trigger.response(x(a))},0)},D=function(){if(N.stop(),!j){j=!0;try{var a=L.dom();e.each(J,function(b,c){var d=a[c];if(void 0===d)throw'Flash object does not have the method "'+c+'"';d.call(a,b)}),h.trigger.reset(),S(),P()}catch(b){u.log("Flash dialog - Error during load: ",b)}}},E=z.permanent(D),F=function(){return!m.inBody(L)},G=function(){return!L.dom().SetVariable},H=function(){v.start(1e3,10,F,G),h.trigger.spin()},I=function(a){v.stop(),h.trigger.error(a)},J={setSpinCallback:z.permanent(H),setPasteCallback:z.permanent(C),setEscapeCallback:z.permanent(h.trigger.cancel),setErrorCallback:z.permanent(I),setStartPasteCallback:z.permanent(i.noop)},K=function(){var a=g.replace(/^https?:\/\//,"//"),b="onLoad="+E,c='    <param name="allowscriptaccess" value="always">    <param name="wmode" value="opaque">    <param name="FlashVars" value="'+b+'">';if(A.browser.isIE()&&10===A.browser.version.major){var d=f.generate("flash-bin");return p.fromHtml('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="'+d+'"><param name="movie" value="'+a+'">'+c+"</object>")}return p.fromHtml('<object type="application/x-shockwave-flash" data="'+a+'">'+c+"</object>")},L=K(),M=function(){o.setAll(L,{width:"2px",height:"2px"})};M();var N=b(L,e.keys(J),D);r.append(s,L);var O=function(){return s},P=function(){A.browser.isFirefox()&&y.getSelection().removeAllRanges(),q.focus(L)},Q=null,R=function(){n.add(s,c.resolve("flash-activate")),o.remove(L,"height"),o.remove(L,"width"),h.trigger.hide()},S=function(){t(Q),n.remove(s,c.resolve("flash-activate")),M()},T=function(){Q=w(R,3e3),h.trigger.spin(),o.set(s,"display","block"),P()},U=function(){o.set(s,"display","none"),B.each(function(a){d.each(a,function(a){a.unbind()})})},V=function(){U(),d.each(e.values(J),function(a){z.unregister(a)}),z.unregister(E),N.stop()};return{focus:P,element:O,activate:T,deactivate:U,destroy:V,events:h.registry}}}),g("1q",["38","39","21","22","w","k","11"],function(a,b,c,d,e,f,g){return function(h,i){var j=i.translations,k=d.create({response:c(["rtf","hide"]),cancel:c([]),error:c(["message"]),failed:c(["message"])}),l=function(){var c=b(i.swf);c.deactivate();var d=f.fromDom(g),l=e.bind(d,"mouseup",c.focus),m=function(){q()},n=function(){m(),k.trigger.cancel()};c.events.cancel.bind(n),c.events.response.bind(function(a){k.trigger.response(a.rtf(),m)}),c.events.error.bind(function(a){m(),k.trigger.error(a.message())}),c.events.failed.bind(function(a){m(),k.trigger.failed(a.message())});var o=h();o.setTitle(j("cement.dialog.flash.title"));var p=a(c,o.reflow,i);p.reset(),o.setContent(p.element()),o.events.close.bind(n),o.show(),c.activate();var q=function(){l.unbind(),c.destroy(),o.destroy()}};return{open:l,events:k.registry}}}),g("5p",[],function(){var a=function(a,b){return d(function(c,d,e){return d(a,b)})},b=function(a){return d(function(b,c,d){return b(a)})},c=function(a){return d(function(b,c,d){return d(a)})},d=function(a){return{fold:a}};return{on:a,before:b,after:c}}),g("5o",["5p","2c","k"],function(a,b,c){var d=b.immutable("start","soffset","finish","foffset"),e=b.immutable("start","soffset","finish","foffset"),f=b.immutable("start","finish"),g=function(b){var d=c.fromDom(b.startContainer),e=c.fromDom(b.endContainer);return f(a.on(d,b.startOffset),a.on(e,b.endOffset))};return{read:d,general:e,write:f,writeFromNative:g}}),g("5q",[],function(){var a=function(a,b){if(a.getSelection)return b(a,a.getSelection());throw"No selection model supported."};return{run:a}}),g("6v",["3n","3f"],function(a,b){var c=function(c,d,e,f){var g=b.owner(c),h=g.dom().createRange();h.setStart(c.dom(),d),h.setEnd(e.dom(),f);var i=a.eq(c,e)&&d===f;return h.collapsed&&!i};return{after:c}}),g("6u",["5o","6v","k","3f"],function(a,b,c,d){var e=function(a){return b.after(c.fromDom(a.anchorNode),a.anchorOffset,c.fromDom(a.focusNode),a.focusOffset)},f=function(b,d){var f=c.fromDom(d.startContainer),g=c.fromDom(d.endContainer);return e(b)?a.read(g,d.endOffset,f,d.startOffset):a.read(f,d.startOffset,g,d.endOffset)},g=function(a){return e(a)},h=function(a,b,c,e){return function(f){if(f.extend)f.collapse(a.dom(),b),f.extend(c.dom(),e);else{var g=d.owner(a).dom().createRange();g.setStart(c.dom(),e),g.setEnd(a.dom(),b),f.removeAllRanges(),f.addRange(g)}}},i=function(a,c,d,e){return b.after(a,c,d,e)},j=function(){return{flip:f,isRtl:g}},k=function(){return{flip:h,isRtl:i}};return{read:j,write:k}}),g("5s",["5o","6u","n","6v","k"],function(a,b,c,d,e){var f=function(b,d){var f=h(b,d.start(),d.finish());if(f.collapsed===!0){var g=h(b,d.finish(),d.start());return g.collapsed===!0?c.none():c.some(a.general(e.fromDom(g.endContainer),g.endOffset,e.fromDom(g.startContainer),g.startOffset))}return c.none()},g=function(a,b){var c=h(a,b.start(),b.finish());return c.collapsed===!0?h(a,b.finish(),b.start()):c},h=function(a,b,c){var d=m(a);return b.fold(function(a){d.setStartBefore(a.dom())},function(a,b){d.setStart(a.dom(),b)},function(a){d.setStartAfter(a.dom())}),c.fold(function(a){d.setEndBefore(a.dom())},function(a,b){d.setEnd(a.dom(),b)},function(a){d.setEndAfter(a.dom())}),d},i=function(a,b){return h(a,b.start(),b.finish())},j=function(a,b,c,e,f){var g=d.after(b,c,e,f),h=a.document.createRange();return g?(h.setStart(e.dom(),f),h.setEnd(b.dom(),c)):(h.setStart(b.dom(),c),h.setEnd(e.dom(),f)),h},k=function(a,b){var c=i(a,b);return function(a){a.addRange(c)}},l=function(a,c){var d=f(a,c);return d.fold(function(){return k(a,c)},function(a){return b.write().flip(a.start(),a.soffset(),a.finish(),a.foffset())})},m=function(a){return a.document.createRange()};return{create:m,build:l,toNative:i,forceRange:g,toExactNative:j}}),g("5r",["g","5s","k","1d","2a","2h"],function(a,b,c,d,e,f){var g=function(a,b,c){return a.selectNodeContents(c.dom()),a.compareBoundaryPoints(b.END_TO_START,b)<1&&a.compareBoundaryPoints(b.START_TO_END,b)>-1},h=function(b,c,d,h){var i=b.document.createRange(),j=f.is(c,h)?[c]:[],k=j.concat(e.descendants(c,h));return a.filter(k,function(a){return g(i,d,a)})},i=function(a,e,f){var g=b.forceRange(a,e),i=c.fromDom(g.commonAncestorContainer);return d.isElement(i)?h(a,i,g,f):[]};return{find:i}}),g("6w",["g","5o","5p","1d"],function(a,b,c,d){var e=function(b,e){var f=d.name(b);return"input"===f?c.after(b):a.contains(["br","img"],f)?0===e?c.before(b):c.after(b):c.on(b,e)},f=function(a){var d=a.start().fold(c.before,e,c.after),f=a.finish().fold(c.before,e,c.after);return b.write(d,f)};return{beforeSpecial:e,preprocess:f}}),g("6x",["g","k","1g"],function(a,b,c){var d=function(d,e){var f=e||c,g=f.createDocumentFragment();return a.each(d,function(a){g.appendChild(a.dom())}),b.fromDom(g)};return{fromElements:d}}),g("5t",["5o","6u","5s","6w","n","k","6x"],function(a,b,c,d,e,f,g){var h=function(a){return function(b,e){var f=d.preprocess(a),g=c.build(b,f);void 0!==e&&null!==e&&(e.removeAllRanges(),g(e))}},i=function(a){return function(b,d){var e=c.create(b);e.selectNodeContents(a.dom()),d.removeAllRanges(),d.addRange(e)}},j=function(a,b){var c=b.getRangeAt(0),d=b.getRangeAt(b.rangeCount-1),e=a.document.createRange();return e.setStart(c.startContainer,c.startOffset),e.setEnd(d.endContainer,d.endOffset),e},k=function(c,d){var e=f.fromDom(d.startContainer),g=f.fromDom(d.endContainer);return b.read().isRtl(c)?b.read().flip(c,d):a.read(e,d.startOffset,g,d.endOffset)},l=function(a,b){return void 0!==b&&null!==b&&b.rangeCount>0?e.from(j(a,b)):e.none()},m=function(a,b){var c=l(a,b);return c.map(function(a){return k(b,a)})},n=function(a){return function(b,c){var d=l(b,c);d.each(function(c){o(b,c,a)})}},o=function(a,b,c){var d=g.fromElements(c,a.document);b.deleteContents(),b.insertNode(d.dom())},p=function(a,b){return function(e,f){var g=d.preprocess(a),h=c.toNative(e,g);o(e,h,b)}},q=function(a,b,d,e){return function(f,g){var h=c.toExactNative(f,a,b,d,e);h.deleteContents()}},r=function(a,b,d,e){return function(g,h){var i=c.toExactNative(g,a,b,d,e),j=i.cloneContents();return f.fromDom(j)}},s=function(a,b,d,f){return function(g,h){var i=c.toExactNative(g,a,b,d,f),j=i.getClientRects(),k=j.length>0?j[0]:i.getBoundingClientRect();return k.width>0||k.height>0?e.some(k):e.none()}},t=function(a){return function(b,d){var f=c.create(b);f.selectNode(a.dom());var g=f.getBoundingClientRect();return g.width>0||g.height>0?e.some(g):e.none()}},u=function(a,b){a.getSelection().removeAllRanges()},v=function(a,b,d,e){return function(f,g){var h=c.toExactNative(f,a,b,d,e);return h.toString()}};return{get:m,set:h,selectElementContents:i,replace:n,replaceRange:p,deleteRange:q,cloneFragment:r,rectangleAt:s,bounds:t,clearSelection:u,stringAt:v}}),g("3a",["5o","5p","5q","5r","5s","5t","3n","k"],function(a,b,c,d,e,f,g,h){var i=function(a){return c.run(a,f.get)},j=function(a,b){c.run(a,f.set(b))},k=function(c,d,e,f,g){var h=a.write(b.on(d,e),b.on(f,g));j(c,h)},l=function(a,b){c.run(a,f.selectElementContents(b))},m=function(a,b){c.run(a,f.replace(b))},n=function(a,b,d){c.run(a,f.replaceRange(b,d))},o=function(a,b,d,e,g){c.run(a,f.deleteRange(b,d,e,g))},p=function(a,b,d,e,g){return c.run(a,f.cloneFragment(b,d,e,g))},q=function(a,b,c,d){return g.eq(a,c)&&b===d},r=function(a,b,d,e,g){return c.run(a,f.rectangleAt(b,d,e,g))},s=function(a,b){return c.run(a,f.bounds(b))},t=function(a,b,c){return d.find(a,b,c)},u=function(c,d,e,f,g,h){var i=a.write(b.on(d,e),b.on(f,g));return t(c,i,h)},v=function(b,c){var d=e.forceRange(b,c);return a.general(h.fromDom(d.startContainer),d.startOffset,h.fromDom(d.endContainer),d.endOffset)},w=function(a){c.run(a,f.clearSelection)},x=function(a,b,d,e,g){return c.run(a,f.stringAt(b,d,e,g))};return{get:i,set:j,setExact:k,selectElementContents:l,replace:m,replaceRange:n,deleteRange:o,isCollapsed:q,cloneFragment:p,rectangleAt:r,bounds:s,findWithin:t,findWithinExact:u,deriveExact:v,clearAll:w,stringAt:x}}),g("5u",["p","3n"],function(a,b){return function(c,d,e,f){var g=b.eq(c,e)&&d===f;return{startContainer:a.constant(c),startOffset:a.constant(d),endContainer:a.constant(e),endOffset:a.constant(f),collapsed:a.constant(g)}}}),g("3b",["5u","k","1x","1y","3f"],function(a,b,c,d,e){return function(f){var g=b.fromTag("br"),h=function(a,b){a.dom().focus()},i=function(a){var b=e.owner(a);return b.dom().defaultView},j=function(b,d){var e=i(d);e.focus(),c.append(d,g),f.set(e,a(g,0,g,0))},k=function(){d.remove(g)};return{cleanup:k,toOn:h,toOff:j}}}),g("3c",["p"],function(a){return function(){var b=function(a,b){a.dom().focus()},c=function(a,b){b.dom().focus()},d=a.identity;return{toOn:b,toOff:c,cleanup:d}}}),g("6y",["g","k","1x","29","1y","3f"],function(a,b,c,d,e,f){var g=function(a,b){f.nextSibling(a).filter(b).each(function(b){var c=f.children(b);d.append(a,c),e.remove(b)}),i(a,b)},h=function(a,g){var h=f.children(a),i=b.fromTag("div",f.owner(a).dom());d.append(i,h),c.before(a,i),e.remove(a)},i=function(b,c){var d=f.children(b);a.each(d,function(a){c(a)&&h(a,b)})};return{consolidate:g}}),g("6z",["3g"],function(a){var b=a.create("ephox-sloth");return{resolve:b.resolve}}),g("70",["5d"],function(a){var b=function(a,b){return function(d){return"rtl"===c(d)?b:a}},c=function(b){return"rtl"===a.get(b,"direction")?"rtl":"ltr"};return{onDirection:b,getDirection:c}}),g("5v",["1s","2c","6y","6z","j","27","3q","5d","70","k","6h","1x","1y","20","3f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=d.resolve("bin"),q=p+a.generate(""),r=i.onDirection("-100000px","100000px");return function(a){var d=j.fromTag("div");e.setAll(d,{contenteditable:"true","aria-hidden":"true"}),h.setAll(d,{position:"fixed",top:"0px",width:"100px",height:"100px",overflow:"hidden",opacity:"0"}),g.add(d,[p,q]);var i=function(a){m.empty(d),h.set(d,"left",r(a)),l.append(a,d)},s=function(){var b=n.ancestor(d,"body");b.each(function(b){a.toOff(b,d)})},t=function(a){return f.has(a,q)},u=function(){c.consolidate(d,t);var a=b.immutable("elements","html","container"),e=o.children(d),f=k.get(d);return a(e,f,d)},v=function(){m.remove(d)},w=function(){return d};return{attach:i,focus:s,contents:u,container:w,detach:v}}}),g("3d",["p","2x","21","22","2y","5v","3f"],function(a,b,c,d,e,f,g){return function(h,i){var j=f(h),k=function(){h.cleanup();var a=j.contents();j.detach(),n.trigger.after(a.elements(),a.html(),j.container())},l=b.tap(function(){n.trigger.before(),j.attach(i),j.focus(),e.run(g.owner(i),l,k)}),m=function(){l.instance()},n=d.create({before:c([]),after:c(["elements","html","container"])}),o=a.noop;return{instance:a.constant(m),destroy:o,events:n.registry}}}),g("1r",["2t","3a","21","22","3b","3c","3d","1d"],function(a,b,c,d,e,f,g,h){var i=a.detect(),j={set:function(a,c){b.setExact(a,c.startContainer(),c.startOffset(),c.endContainer(),c.endOffset())}},k=function(a){var b=i.browser.isIE()&&"body"!==h.name(a)?f:e;return b(j)};return function(a){var b=d.create({after:c(["container"])}),e=k(a),f=g(e,a);f.events.after.bind(function(c){e.toOn(a,c.container()),b.trigger.after(c.container())});var h=function(){f.instance()()};return{run:h,events:b.registry}}}),g("5y",["w","k","1g"],function(a,b,c){var d=function(d){if("complete"===c.readyState||"interactive"===c.readyState)d();else var e=a.bind(b.fromDom(c),"DOMContentLoaded",function(){d(),e.unbind()})};return{execute:d}}),g("3e",["2t","5h","p","5w","n","5x","5i","5d","w","k","1x","5y","1y"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=b.install("ephox.keurig.init"),o=e.none(),p=a.detect(),q=p.browser,r=q.isIE()||q.isSpartan()||p.deviceType.isiOS()||p.deviceType.isAndroid(),s=r?c.noop:d.cached(function(a){var b=j.fromTag("div");if(void 0===a)throw"baseUrl was undefined";var c=j.fromTag("iframe");h.setAll(b,{display:"none"});var d=i.bind(c,"load",function(){var g=function(a){o=e.some(a),q.isSafari()||m.remove(b)},h=n.ephemeral(g),i=a+"/wordimport.js";f.write(c,'<script type="text/javascript" src="'+i+'"></script><script type="text/javascript">function gwtInited () {parent.window.'+h+"(com.ephox.keurig.WordCleaner.cleanDocument);};</script>"),d.unbind()});l.execute(function(){k.append(g.body(),b),k.append(b,c)})}),t=function(a,b){return o.map(function(c){return c(a,b)})},u=function(){return o.isSome()};return{load:s,cleanDocument:t,ready:u}}),g("1t",["3e"],function(a){return function(b){return a.ready()||a.load(b),{cleanDocument:a.cleanDocument}}}),g("l",["1o","1p","1q","1r","g","1s","1t","p","n"],function(a,b,c,d,e,f,g,h,i){return function(j,k,l,m){var n=g(m.baseUrl),o=h.curry(c,k),p=d,q=function(){return{clipboardType:f.generate("clipboard-type"),findClipboardTags:i.none}},r=void 0!==m.intraFlag?m.intraFlag:q(),s=e.flatten([void 0!==m.intraFlag?[b.internal(l,p,j,r)]:[],[b.onlyText()],[b.gwt(n,k,m,o)],[b.image(m)]]),t=b.pastiche(k,m,l,p,j,o,r);return a(s,t)}}),g("m",["1o","1p"],function(a,b){return function(){return a([b.text()],b.none())}}),g("q",[],function(){return{officeStyles:"prompt",htmlStyles:"clean"}}),g("r",["j","k","1x","1y","1z","20","1g"],function(a,b,c,d,e,f,g){var h="powerpaste-styles",i="#"+h,j=function(d){if(!e.any(i)){var g="<style>.ephox-cement-flashbin-helpcopy-kbd {font-size: 3em !important; text-align: center !important; vertical-align: middle !important; margin: .5em 0} .ephox-cement-flashbin-helpcopy-kbd .ephox-polish-help-kbd {font-size: 3em !important; vertical-align: middle !important;} .ephox-cement-flashbin-helpcopy a {text-decoration: underline} .ephox-cement-flashbin-loading-spinner {background-image: url("+d+") !important; width: 96px !important; height:96px !important; display: block; margin-left: auto !important; margin-right: auto !important; margin-top: 2em !important; margin-bottom: 2em !important;} .ephox-cement-flashbin-loading p {text-align: center !important; margin: 2em 0 !important} .ephox-cement-flashbin-target {height: 1px !important;} .ephox-cement-flashbin-target.ephox-cement-flash-activate {height: 150px !important; width: 100% !important;} .ephox-cement-flashbin-target object {height: 1px !important;} .ephox-cement-flashbin-target.ephox-cement-flash-activate object {height: 150px !important; width: 100% !important;} .ephox-cement-flashbin-helpcopy p {white-space: normal;}</style>",j=b.fromHtml(g);a.set(j,"type","text/css"),a.set(j,"id",h);var k=f.first("head").getOrDie("Head element could not be found.");c.append(k,j)}},k=function(){if(e.any(i)){var a=f.first("head").getOrDie("Head element could not be found."),b=f.descendant(a,i).getOrDie("The style element could not be removed");d.remove(b)}};return{injectStyles:j,removeStyles:k}}),g("v",["g","k","j","1g"],function(a,b,c,d){var e=function(a){var b=d.createElement("div");b.appendChild(a.cloneNode(!0));var c=b.innerHTML;return b=a=null,c},f=function(d){a.each(a.map(d.getElementsByTagName("*"),b.fromDom),function(a){c.has(a,"data-mce-style")&&!c.has(a,"style")&&c.set(a,"style",c.get(a,"data-mce-style"))})};return{nodeToString:e,restoreStyleAttrs:f}}),g("t",["21","22","v","j","k","1x","1y","20"],function(a,b,c,d,e,f,g,h){return function(i){var j=function(){var j,k="",l="",m=[],n=null,o=b.create({close:a([])}),p=function(a){k=a},q=function(a){var b=c.nodeToString(a.dom());l=[{type:"container",html:b}],n=a},r=function(a){var b=[];a.forEach(function(a,c,d){b.push({text:a.text,onclick:a.click})}),m=b},s=function(a){o.trigger.close()},t=function(){j.off("close",s),j.close("close")},u=function(){0===m.length&&(m=[{text:"Close",onclick:function(){j.close()}}]);var a={title:k,spacing:10,padding:10,minWidth:300,minHeight:100,layout:"flex",items:l,buttons:m};j=i.windowManager.open(a);var b=e.fromDom(j.getEl()),c=h.descendant(b,"."+d.get(n,"class")).getOrDie("We must find this element or we cannot continue");f.before(c,n),g.remove(c),j.on("close",s)},v=function(){t()},w=function(){t()},x=function(){};return{events:o.registry,setTitle:p,setContent:q,setButtons:r,show:u,hide:v,destroy:w,reflow:x}};return{createDialog:j}}}),g("24",["2c","n"],function(a,b){var c=a.immutable("url","html"),d=function(a){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(a)},e=function(a){return d(a)&&/.(gif|jpe?g|png)$/.test(a)},f=function(a){var d=/^<a href="([^"]+)">([^<]+)<\/a>$/.exec(a);return b.from(d).bind(function(d){var e=c(d[1],a);return d[1]===d[2]?b.some(e):b.none()})};return{isAbsoluteUrl:d,isImageUrl:e,parseUrlFromLinkHtml:f}}),g("u",["g","n","23","24"],function(a,b,c,d){var e=function(a){return"extra"in a.undoManager},f=function(a,c,d){return e(a)?(a.undoManager.extra(function(){k(a,c)},d),b.some(!0)):b.none()},g=function(a,b){return f(a,b.html(),function(){a.insertContent('<img src="'+b.url()+'">')})},h=function(a,b){return f(a,b.html(),function(){a.execCommand("mceInsertLink",!1,b.url())})},i=function(a,c){return d.parseUrlFromLinkHtml(c).bind(function(c){var e=a.selection.isCollapsed()===!1&&d.isAbsoluteUrl(c.url());return e?h(a,c):b.none()})},j=function(a,c){return d.parseUrlFromLinkHtml(c).bind(function(c){return d.isImageUrl(c.url())?g(a,c):b.none()})},k=function(a,c){return a.insertContent(c,{merge:a.settings.paste_merge_formats!==!1,paste:!0}),b.some(!0)},l=function(a,b,d){var e=function(c){return c(a,b)};return c.findMap(d,e)};return{until:l,linkSelection:i,insertImage:j,insertContent:k}}),g("8",[],function(){var a=function(a,b){return a.hasEventListeners(b)},b=function(a,b){return a.fire("PastePreProcess",{content:b}).content},c=function(a,b){var c=a.dom.add(a.getBody(),"div",{style:"display:none"},b),d=a.fire("PastePostProcess",{node:c}).node.innerHTML;return a.dom.remove(c),d},d=function(c,d){return a(c,"PastePreProcess")?b(c,d):d},e=function(b,d){return a(b,"PastePostProcess")?c(b,d):d},f=function(a,b){return e(a,d(a,b))},g=function(a){var b=a.settings,c=a.plugins.powerpaste;b.paste_preprocess&&a.on("PastePreProcess",function(d){b.paste_preprocess.call(a,c,d)}),b.paste_postprocess&&a.on("PastePostProcess",function(d){b.paste_postprocess.call(a,c,d)})};return{process:f,registerEvents:g}}),g("6",["l","m","g","n","o","p","d","q","r","s","t","u","8","v","w","k","x","2"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){return function(s,t,u,v,w){var x,y,z,A,B;B=(v?v.jsUrl:u)+"/js",y=(v?v.swfUrl:u)+"/flash/textboxpaste.swf",z=(v?v.imgUrl:u)+"/img/spinner_96.gif",A=(v?v.cssUrl:u)+"/css/editorcss.css";var C=function(a){return a.settings.smart_paste!==!1},D=function(a){return function(b,c){return b.undoManager.transact(function(){l.insertContent(b,c),n.restoreStyleAttrs(b.getBody()),w.prepareImages(a)}),d.some(!0)}},E=function(a,b,c){var d=C(a)?[l.linkSelection,l.insertImage]:[];l.until(a,b,d.concat([D(c)]))},F=function(){x&&s.selection.moveToBookmark(x),x=null};s.on("init",function(d){i.injectStyles(z),s.dom.loadCSS(A);var l={baseUrl:B,swf:y,officeStyles:s.settings.powerpaste_word_import||h.officeStyles,htmlStyles:s.settings.powerpaste_html_import||h.htmlStyles,translations:g.translate,allowLocalImages:s.settings.powerpaste_allow_local_images!==!1,enableFlashImport:s.settings.powerpaste_enable_flash_import!==!1,preprocessor:function(a){return e.pure(a)}},r=k(s),u=p.fromDom(s.getBody()),v=function(a){a.events.cancel.bind(function(){F()}),a.events.error.bind(function(a){F(),s.notificationManager?s.notificationManager.open({text:g.translate(a.message()),type:"error"}):j.showDialog(s,g.translate(a.message()))}),a.events.insert.bind(function(a){var b=c.map(a.elements(),function(a){return n.nodeToString(a.dom())}).join("");s.focus(),q(function(){F(),E(s,m.process(s,b),a.assets()),w.uploadImages(a.assets())},1)})},C=a(u,r.createDialog,f.noop,l),D=b();c.each([C,D],v),o.bind(u,"paste",function(a){x||(x=s.selection.getBookmark());var b=t.isText()?D:C;b.paste(a.raw()),t.reset(),q(function(){s.windowManager.windows[0]&&s.windowManager.windows[0].getEl()&&s.windowManager.windows[0].getEl().focus()},1)})}),s.on("remove",function(a){1===r.editors.length&&i.removeStyles()})}}),g("7",["y","z"],function(a,b){var c=function(a){return tinymce.util.VK.metaKeyPressed(a)&&86==a.keyCode&&a.shiftKey};return function(d){var e=b(d.settings.paste_as_text),f=b(!1);d.on("keydown",function(a){c(a)&&(f.set(!0),tinymce.Env.ie&&tinymce.Env.ie<10&&(a.preventDefault(),d.fire("paste",{})))});var g=a(function(){var a=d.translate("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.");d.notificationManager.open({text:a,type:"info"})}),h=function(){var a=this,b=!e.get();a.active(b),e.set(b),d.fire("PastePlainTextToggle",{state:b}),b===!0&&0!=d.settings.paste_plaintext_inform&&g(),d.focus()},i=function(){f.set(!1)},j=function(){return f.get()||e.get()};return{toggle:h,reset:i,isText:j}}}),g("10",[],function(){var a=0,b=1,c=-1,d=function(a){return parseInt(a,10)},e=function(a){return function(){return a}},f=function(a,b,c){return{major:e(a),minor:e(b),patch:e(c)}},g=function(a){var b=/([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(a);return b?f(d(b[1]),d(b[2]),d(b[3])):f(0,0,0)},h=function(d,e){var f=d-e;return 0===f?a:f>0?b:c},i=function(b,c){var d=h(b.major(),c.major());if(d!==a)return d;var e=h(b.minor(),c.minor());if(e!==a)return e;var f=h(b.patch(),c.patch());return f!==a?f:a};return{nu:f,parse:g,compare:i}}),g("9",["10"],function(a){var b=function(a){var b=[a.majorVersion,a.minorVersion].join(".");return b.split(".").slice(0,3).join(".")},c=function(c){return c?a.parse(b(c)):null},d=function(b,d){return a.compare(c(b),a.parse(d))<0};return{getVersion:c,isLessThan:d}}),g("a",["11"],function(a){var b=function(a,b){return function(){var c=a.console;c&&b in c&&c[b].apply(c,arguments)}};return{log:b(a,"log"),error:b(a,"error"),warn:b(a,"warm")}}),g("1",["3","4","5","6","7","8","9","a","2"],function(a,b,c,d,e,f,g,h,i){return function(j){return g.isLessThan(i,"4.0.0")?(h.error('The "powerpaste" plugin requires at least 4.0.0 version of TinyMCE.'),function(){}):function(g,h){var k=e(g),l=function(){var b=a(g);d(g,k,h,j,b),g.settings.powerpaste_block_drop||c(g,h,j,b)},m=function(){b(g,k,j)},n=function(){var a=this;a.active(k.isText()),g.on("PastePlainTextToggle",function(b){a.active(b.state)})};i.Env.ie&&i.Env.ie<10?m():l();var o=function(a){g.dom.bind(a,"drop dragstart dragend dragover dragenter dragleave dragdrop draggesture",function(a){return i.dom.Event.cancel(a)})};g.settings.powerpaste_block_drop&&g.on("init",function(a){o(g.getBody()),o(g.getDoc())}),f.registerEvents(g),g.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:k.toggle,onPostRender:n}),g.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,onclick:k.toggle,onPostRender:n})}}}),g("0",["1","2"],function(a,b){return function(c){b.PluginManager.requireLangPack("powerpaste","ar,ca,cs,da,de,el,es,fa,fi,fr_FR,he_IL,hr,hu_HU,it,ja,kk,ko_KR,nb_NO,nl,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,sv_SE,th_TH,tr,uk,zh_CN,zh_TW"),b.PluginManager.add("powerpaste",a(c))}}),d("0")()}();